检查框内的 3D 点

Check if 3D point inside a box

本文关键字:3D 检查      更新时间:2023-10-16

我有一个由 8 个顶点组成的盒子,可以向任何方向缩放或旋转,所以我对每个变换的顶点应用变换矩阵,我在 X、Y 和 Z 上有中心、大小和方向,如何检查盒子内是否有任何 3D 点?

如果您有:

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是钝的(。获得投影长度后,只需将其绝对值与框的相应半范围进行比较即可。