Форум: "Игры";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизОпять коллизии Найти похожие ветки
← →
Бульдозер © (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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.054 c