Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Точный расчет колизии 
:(
    Опции темы
Graf_h
Дата 5.11.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



Привет! как можно точно расчитать колизии! Припустим есть обект, сфера для росчета колизии радиусом примерно 25 пикселей. обьект движется со скоростью 30 пикселей в тик.Дальше, припустим обекты находятся на расстояниее 10 пикселей, а двигаются - 30 пикселей, в итоге они пересекутся, но не должны:(


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Rickert
Дата 5.11.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Graf_h
0) Лучше сравнивать не пиксели, а радиусы.
1) Узнали что объекты пересекаются - отводим один из объектов назад.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Graf_h
Дата 5.11.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



Спасибо Rickert, я так и думал! но когда движение по сплайну:

Код

public function calculateSpline(t:Number):V_Point{
            var new_point:V_Point = new V_Point(0,0)
            new_point.x =(1-t)*(1-t)*(1-t)*first_point.x + 3*t*(1-t)*(1-t)*anchor1.x+3*t*t*(1-t)*anchor2.x+t*t*t*last_point.x
            new_point.y =(1-t)*(1-t)*(1-t)*first_point.y + 3*t*(1-t)*(1-t)*anchor1.y+3*t*t*(1-t)*anchor2.y+t*t*t*last_point.y
            return new_point
        }


как в этом случае! я при пересечении ставил цикл while и отодвигал на один шаг назад! Но думаю можно както компакнее сделать smile 


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Rickert
Дата 5.11.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Graf_h, какая разница какой длинны получается код? Главное быстродействие. У тебя куча констант, которые не меняются - выноси их в переменные. Ктсати, тут же и компактность добавится.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Graf_h
Дата 5.11.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



Цитата(Rickert @  5.11.2008,  11:52 Найти цитируемый пост)
 Главное быстродействие. 

как можно без цыклов обойтись?Вот что  у меня получается:
Фрагмент кода:

Код

public function Move():void{
          for (var i:uint=0;i<this.mas_objects.length;i++){
                   this_f = mas_objects[i]

                   if (this_f.moveflag){
                   if (this_f.speed<0){this_f.orient=1}
                   this_f.speed+=this_f.speed_step*this_f.orient
                   if (this_f.speed>=this_f.max_speed){this_f.speed=this_f.max_speed}
                   this_f.pos+=this_f.speed*this.this_spline.spline_step*this_f.orient    
                   n_point = this.this_spline.calculateSpline(this_f.pos)
                   this_f.x=n_point.x;this_f.y=n_point.y
                   n_point = this.this_spline.calculateSpline(this_f.pos+this.this_spline.spline_step*this_f.orient)
                    this_f.rot(n_point.x,n_point.y)

            


                       if (i==0){
                              //Это пропускаем, здесь без проблем
                       } else{
                               prew_f= mas_objects[i-1]
                               var c1:Number=(this_f.x*this_f.forward_vector.x)-(prew_f.x*prew_f.forward_vector.x)
                               var c2:Number=(this_f.y*this_f.forward_vector.y)-(prew_f.y*prew_f.forward_vector.y)
                               var z:Number=Math.sqrt(c1*c1 + c2*c2)
                               if (z<V_Utility.FISHKA_SIZE){
                                               this_f.moveflag=false
                                               //меня вот этот цыкл смущает :(
                                               while (z<V_Utility.FISHKA_SIZE){
                                                           this_f.pos-=this.this_spline.spline_step    
                                                           n_point = this.this_spline.calculateSpline(this_f.pos)
                                                           this_f.x=n_point.x;this_f.y=n_point.y
                                                           n_point = this.this_spline.calculateSpline(this_f.pos+this.this_spline.spline_step)
                                                           this_f.rot(n_point.x,n_point.y)

                                                           c1=(this_f.x*this_f.forward_vector.x)-(prew_f.x*prew_f.forward_vector.x)
                                                           c2=(this_f.y*this_f.forward_vector.y)-(prew_f.y*prew_f.forward_vector.y)
                                                           z=Math.sqrt(c1*c1 + c2*c2)

                                               }

                               }

                       }

               }

         }

}




Это сообщение отредактировал(а) Graf_h - 5.11.2008, 12:11


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Rickert
Дата 5.11.2008, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Омайн год smile  "this." ? O_O
Сказать честно: откуда растут рога у всего это невозможно. Пожалей smile что это вообще там происходит? Сдвигаешь позицию, пересчитываешь положение сплайна, опять сдивгаешь позицию, опять пересчитываешь и ещё вроде вращаешь. Там по идее должны быть что-нить типа расчитать положение на момент t вроде.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Graf_h
Дата 5.11.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



Цитата(Rickert @  5.11.2008,  12:13 Найти цитируемый пост)
двигаешь позицию, пересчитываешь положение сплайна, опять сдивгаешь позицию, опять пересчитываешь и ещё вроде вращаешь

А как по другому?pos это как раз и есть t (0..1)


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.