c++ - 检查框内是否有 3D 点
问题描述
我有一个由 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
归一化,则本质上为您提供 on 的投影X⋅Y
长度(如果由和形成的角度为钝角,则为负)。一旦你有了投影长度,你只需要将它们的绝对值与你的盒子的相应一半范围进行比较。X
Y
X
Y
推荐阅读
- python - Django 3.2.3 - 3.2.6 开发服务器上的管道损坏错误
- keycloak - keycloak:最大登录失败后的通知
- filter - 如何在模块 Amzzing 过滤器中添加更多标准参数?
- c# - 在 Ubuntu 中,如何使用 C# 清除控制台历史记录?
- python - 在 Cray 上运行 dask-mpi
- javascript - 为什么 JavaScript 会产生“this”输出?
- reactjs - 如何使用@msal 在十分钟后触发会话过期弹出窗口 - 反应和天蓝色广告
- python - Event.listens_for 不更新 Session 内的引擎
- centos7 - 新的 CEO 安装无法恢复
- inno-setup - 隐藏 Inno 设置向导小图