Вопрос:

Проверьте, находится ли 3D-точка внутри коробки

c++ 3d geometry glm-math

235 просмотра

1 ответ

51 Репутация автора

У меня есть блок, который состоит из 8 вершин и может масштабироваться или поворачиваться в любом направлении, поэтому я применяю матрицу преобразования для вершин при каждом преобразовании, у меня есть центр, размер и направления по X, Y и Z от центра, как я могу проверить, если какая-нибудь 3D точка находится внутри коробки?

Автор: Mohamed Moussa Источник Размещён: 05.10.2018 10:21

Ответы (1)


3 плюса

20693 Репутация автора

Решение

Если у вас есть:

vec3 center; // Center of the box.
vec3 dx, dy, dz; // X,Y, and Z directions, normalized.
vec3 half; // Box size in each dimension, divided by 2.

vec3 point; // Point to test.

Тогда тест так же прост, как:

vec3 d = point - center;
bool inside = abs(dot(d, dx)) <= half.x &&
              abs(dot(d, dy)) <= half.y &&
              abs(dot(d, dz)) <= half.z;

Основным свойством точечного произведения является тот факт, что X⋅Y == |X|⋅|Y|⋅cos(angle_formed_by_X_and_Y).

Если Yнормализовано, то, по X⋅Yсути, дает вам длину проекции Xна Y(которая отрицательна, если угол образован Xи Yявляется тупым). Когда у вас есть длина проекции, вам просто нужно сравнить их абсолютные значения с соответствующими половинными экстентами вашего блока.

Автор: HolyBlackCat Размещён: 05.10.2018 10:30
Вопросы из категории :
32x32