css3 3d переводы: обнаружение столкновений - PullRequest
0 голосов
/ 29 мая 2011

Я видел несколько классных 3D-материалов, сделанных с помощью 3d-перевода css3, например: http://www.webkit.org/blog-files/3d-transforms/morphing-cubes.html 9requires webkit)

Доза, кто-нибудь знает способ обнаружения столкновений? Я могу видеть, как можно сделать это в 2D, но я не могу понять математику, которая потребуется для этого в 3D. Тем не менее, похоже, что какой-то JavaScript может справиться с этим.

В приведенной выше ссылке плоскости (деления) время от времени пересекаются, было бы здорово, если бы они избегали друг друга.

Есть идеи?

1 Ответ

2 голосов
/ 29 мая 2011

Если у вас есть треугольник p0, p1, p2 (трехкомпонентные векторы) и сегмент x, y, вы можете легко проверить, пересекает ли этот сегмент треугольник, решив это матричное линейное уравнение:

((p1-p0) (p2-p0) (xy)) (ABC) T = x-p0

, где ABC - скалярные коэффициенты, T - матрица транспонирования (то есть, (ABC) T -столбец из трех переменных).((p1-p0) (p2-p0) (xy)) означает здесь матрицу 3x3 с соответствующими векторами в качестве столбцов, а x-p0 также является столбцом из трех компонентов.

Вы решаете эту системуи найдите A, B и C. Если A> 0, B> 0, A + B <1 и 0 <C <1, то есть пересечение. </p>

Имея два треугольника в трехмерном пространстве, вы можете проверитьесли они пересекаются, проверяя стороны первого треугольника против второго, а затем стороны второго треугольника против первого.Надеюсь, это поможет.

Обновление: немного изменила формулу.

Обновление2: если уравнение не может быть решено, то сегмент находится в той же плоскости, что и треугольник.Это делает задачу еще проще: переведите ваши координаты в эту плоскость и найдите, пересекает ли отрезок треугольник в двухмерном пространстве ...

Update3: на самом деле условие было неверным: A и B должны быть больше 0но их сумма A + B должна быть меньше 1.

...