Главная страница
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-1109344351
cyborg
2005-02-25 18:12
2005.03.27
Самопальный форум


3-1109765686
Alsk
2005-03-02 15:14
2005.03.27
как вытянуть уникальные записи из двух таблиц ??


14-1110226586
Fatal
2005-03-07 23:16
2005.03.27
Delphi2005


8-1102629649
maxXP
2004-12-10 01:00
2005.03.27
Можно ли получить график в картинку из компоненты tchart???


8-1102784835
Ig
2004-12-11 20:07
2005.03.27
TBitmap и IniFiles.