Главная страница
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.03 c
14-1110374841
Yanis
2005-03-09 16:27
2005.03.27
Толковый словарь


3-1109325756
prosoft
2005-02-25 13:02
2005.03.27
ODAC и Oracle Objects проблема


14-1110403647
суслик
2005-03-10 00:27
2005.03.27
Посоветуйте форум


14-1109932975
Danilka
2005-03-04 13:42
2005.03.27
Еще чуть-чуть про демократию.


1-1111052504
Gerakl
2005-03-17 12:41
2005.03.27
Delphi2005 (IDE)