Показать сообщение отдельно
Старый 16.12.2012, 14:25   #6
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Ответ: Ближайшая вершина бокса до прямой в 3д

Думаю можно и без перебора
вроде того:
Vector3f vectorA = segment.positionA - box.center;
Vector3f vectorB = segment.positionB - box.center;

Vector3f min_vector = ( dot( vectorA ) < dot( vectorB ) ) ? vectorA : vectorB;

x = sign( min_vector.x );
y = sign( min_vector.y );
z = sign( min_vector.z );

Vector3f closest = box.center + box.extent * Vector3f( x, y, z );
фишка в том, что знаки вектора "бокс-сегмент" ( конечно без нуля: -1, +1 ) как раз и определят ближайшую вершину, а ее позицию можно вычислить сдвинув центр бокса, на его полуразмеры по получившейся из этих самых знаков оси.

ЗЫ
хотя я это не проверял, просто мысль
(Offline)
 
Ответить с цитированием