Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.06.2009, 00:22
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 1  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Question Быстрый поиск соседей

Возник такой вопрос. Есть n частиц(много). Вероятность столкновения велика. Есть теоритически бесграничное поле. Есть статья, где достаточно хорошо описан метод для поиска соседей(там всё поле разбивается на ячейки нужного нам размера, ну и всё такое. Хз как называется этот метод).

Всё бы хорошо, но все моменты, где применяется запись и поиск в объекте разных значений очень тормозит. Есть ли идеи, как сделать хранение бесконечного количества ячеек не в переменной Object, а в другом быстром виде, чтобы избавиться от всех длинных циклов?

Вот примерно мой код:
Код AS3:
			all_sectors=new Object();
 
			for (i=0; i<ptCount; i++)
			{
				p=pt[i];
				for (dx=-1; dx<=1; dx+=1)
           			   for (dy=-1; dy<=1; dy+=1)
					{ 
						x1 = p.xx*rinv - dx;     //rinv=1/радиус частицы
						y1 = p.yy*rinv - dy;
						s = Math.floor(x1)+"_"+Math.floor(y1);
						if(! all_sectors[s])
							all_sectors[s] = new Object(); 
						all_sectors[s][i]=p;
					}
                                 ... //Ещё кое-какой код
                         }
 
 
			for(s in all_sectors)
			{
				sector=all_sectors[s];
				for(su in sector)
				{
					i=parseInt(su);
					for(sv in sector)
					{
						j=parseInt(sv);
						if(i>j)
						{
                                                 //До сюда при тестировании выполнение дошло примерно 5000 раз
                                                 ....
Спасибо

Старый 26.06.2009, 00:39
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 2  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Какой ужас Напишите метод целиком. И опишите что на входе, а что должно быть на выходе.
__________________
TankiOnline
Я разработчик Alternativa3D

Старый 26.06.2009, 01:00
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 3  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Вход:
Массив точек pt[] длины ptCount.
Точки имеют координаты - свойства xx,yy
Выход:
Для каждой точки pt[i] массив индексов соседей i-ой точки с индексами < i.
Под соседом понимается такая точка, для которой расстояние от неё до i-ой точки < R.

Просто, стандартный поиск соседей, особого смысла метод писать нету.

Старый 26.06.2009, 21:44
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 4  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Лучше конечно упростить вначале задачу настолько, насколько возможно — например, сделать поле не бесконечного размера а конечного. Тогда и таблицу можно будет задать двумерным массивом.
Ну раз вы хотите бесконечное поле, то придется извращаться. Один из вариантов, создать класс разряженной таблицы и хранить элементы в двунаправленных списках.
Также очень хорошее упрощение это разделение статичной и динамичной геометрии — статичные точки можно предрасчитать и заранее записать в таблицу.
__________________
TankiOnline
Я разработчик Alternativa3D

Старый 26.06.2009, 21:50
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 5  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
хм.. про разреженные матрицы и не подумал) спасибо) статичных точек нет. Моделирую жидкость.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
object , Столкновения , частицы
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:37.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.