Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Опять коллизии   Найти похожие ветки 

 
Бульдозер ©   (2005-01-05 21:45) [0]

У меня один простенький вопросик: как определить координаты шара после столкновения с треугольником (нормаль тоже не помешала бы). У шара известны координаты в последний и предпоследний кадр. Нигде ещё не нашёл хороших коллизий (есть только точка-треугольник).
Зараннее спасибо.


 
Asteroid ©   (2005-01-05 23:47) [1]

Один из методов такой:
1. Находим плоскостьЮ в которой лежит треугольник
2. Находим точку касания шаром треугольника (она лежит в этой плоскости) исходя из скорости шара.
3. Отражаем шар от плоскости.

1. Плоскость задается нормалью N и расстоянием от центра D. Каждая точка p плоскости удовлетворяет уравнению N*p + D = 0, * - скалярное произведение.
Нормаль к треугольнику (если не задана руками):
N = (p2 - p1) x (p3 - p1); p1, p2, p3 - вершины треугольника, x - векторное произведение.
D = -N*p1

2. Вектор скорости v шара: v = ( c1 - c2 ), c1 - положение центра в последнем кадре, c2 - в предпоследнем.
Луч по направлению v из точки c1 пересекает плоскость треуголльника в точке P, ее и будем искать. Имеются два уравнения:
N*P + D = 0  (уравнение плоскости, точка P в ней)
P = c1 + v * t  (уравнение луча, точка P на нем)
(t во втором уравнении - число)
Подставляем второе в первое, получается
N*(с1 + v * t) + D = 0 ==> N*v * t = -D - N*c1 ==> t = -( D + N*c1 ) / ( N*v ).
Находим точку P: P = c1 + v * t
Заметим, что 0 <= t <= 1, иначе при такой скорости шар бы не коснулся треугольника.

3. Вектор отраженного направления: v" = v - 2 * N*(N*v). Т.к. до точки касания шар прошел путь t, после касания ему в этом кадре осталось пройти путь 1 - t. Поэтому:
c = P + v * (1 - t).

Надеюсь, все понятно и я нигде не накосячил с выкладками :)



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.041 c
3-1109679828
Valeriya
2005-03-01 15:23
2005.03.27
Drop table


1-1110645589
Muh
2005-03-12 19:39
2005.03.27
Как изменить цвет шрифта в StrinGrid?


1-1110873717
cautur
2005-03-15 11:01
2005.03.27
Код ошибки


9-1104049075
Evgenius
2004-12-26 11:17
2005.03.27
Помогите с реализом простенького AI


3-1109784081
Arnold
2005-03-02 20:21
2005.03.27
Как узнать количество записей в таблице??