检查框内的 3D 点
Check if 3D point inside a box
我有一个由 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
是钝的(。获得投影长度后,只需将其绝对值与框的相应半范围进行比较即可。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 无法将结构注册为增强几何体3D点
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 检查框内的 3D 点
- 检查 3D 点是否位于给定的 3D 线上(在两个 3D 点之间)
- 检查由三个 3D 点组成的平面是否与立方体相交
- 在规范化 3d 向量时,在调用 sqrt 之前检查可以节省多少
- 在尺寸n的3D阵列中有效检查相邻的体素
- 如何将 3d int* 指针数组传递给函数并检查是否已满
- 检查点是否在三角形 (3D) 内的性能