Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检查三维点是否位于框内_C++_3d_Geometry_Glm Math - Fatal编程技术网

C++ 检查三维点是否位于框内

C++ 检查三维点是否位于框内,c++,3d,geometry,glm-math,C++,3d,Geometry,Glm Math,我有一个包含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; /

我有一个包含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;
vec3d=点-中心;
bool inside=abs(点(d,dx))如果您有:

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;
vec3d=点-中心;

bool-inside=abs(dot(d,dx))谢谢你的精彩解释,我实现了它,工作得非常好嗨,你能解释一下dx,dy和dz是什么吗?这些方向是什么?@biiiiird这些基本上是长方体侧面的法线(单位长度的向量垂直于侧面)。@HolyBlackCat因此dx、dy、dz相对于长方体本身或局部,而不是全局轴x、y和z?我可以简单地通过找到长方体3边的法线来计算这个?也算半个x,这也是局部的吗?计算顶点中的最大和最小x值,减去这两个值并除以2?希望我的理解是正确的。@biiiird dx,dy,dz不依赖于盒子的位置,是的。它们确实取决于它的旋转。是的,只是计算法线。我不确定half.x/y/z是局部的还是全局的,它只是盒子大小除以2。谢谢你的精彩解释,我实现了它,工作得很好。嗨,你能解释一下dx、dy和dz是什么吗?这些方向是什么?@biiiiird这些基本上是长方体侧面的法线(单位长度的向量垂直于侧面)。@HolyBlackCat因此dx、dy、dz相对于长方体本身或局部,而不是全局轴x、y和z?我可以简单地通过找到长方体3边的法线来计算这个?也算半个x,这也是局部的吗?计算顶点中的最大和最小x值,减去这两个值并除以2?希望我的理解是正确的。@biiiird dx,dy,dz不依赖于盒子的位置,是的。它们确实取决于它的旋转。是的,只是计算法线。我不确定half.x/y/z是局部的还是全局的,它只是盒子大小除以2。