Проверьте, находится ли 3D-точка внутри коробки - PullRequest
0 голосов
/ 06 октября 2018

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

1 Ответ

0 голосов
/ 06 октября 2018

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

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, равентупой).Когда у вас есть длина проекции, вам просто нужно сравнить их абсолютные значения с соответствующими половинными экстентами вашего блока.

...