我有以下3D数据:
射线起点(x,y,z)
射线方向(x,y,z)
四个矩形角(x,y,z)
现在,我正在寻找一个简单的c ++函数,该函数将计算矩形是否与射线相交。我不需要交点坐标,只需要“是/否”布尔。
我已经在Google上搜索了很多,但不幸的是我找不到适合我要求的任何简单功能。我希望我可以避免编写自己的函数,因为矢量计算很早就已经开始了:-(!!如果有人有想法,我将不胜感激。
谢谢....
编辑:
谢谢你的帮助。这正是我要搜索的内容,但是vxl库有问题。首先,我下载并编译了源代码。然后,在测试库时,尝试创建具有三个3D点的平面时出现以下错误。
“对`vgl_plane_3d :: vgl_plane_3d(vgl_point_3d const&,vgl_point_3d const&,vgl_point_3d const&)的未定义引用” |”
我的代码:
// -----------------------------------------------
#include <vgl/vgl_point_3d.h>
#include <vgl/vgl_plane_3d.h>
#include <vgl/vgl_intersection.h>
void createTestPlane(void);
using namespace std;
int main()
{
createTestPlane();
return 0;
}
void createTestPlane()
{
vgl_point_3d<double> PlaneP0(1.0,0.0,0.0);
vgl_point_3d<double> PlaneP1(1.0,0.0,1.0);
vgl_point_3d<double> PlaneP2(1.0,1.0,0.0);
vgl_plane_3d<double> testConstruction();
vgl_plane_3d<double> Plane(PlaneP0,PlaneP1,PlaneP2);
}
// -----------------------------------------------
我不知道问题出在哪里,因为带有三个3D点的构造函数在“”标题中可用。默认构造函数似乎正常工作。
头文件的一部分:
// -----------------------------------------------
// Default constructor: horizontal XY-plane (equation 1.z = 0)
inline vgl_plane_3d () : a_(0), b_(0), c_(1), d_(0) {}
//: Construct from three non-collinear points
// The plane will contain all three points \a p1, \a p2 and \a p3.
vgl_plane_3d (vgl_point_3d<T> const& p1,
vgl_point_3d<T> const& p2,
vgl_point_3d<T> const& p3);
// -----------------------------------------------
有人知道我在做什么错吗?
最佳答案
我不允许发布图表。这是图形描述:
矩形点:V0,V1,V2,V3
射线起源:O
射线方向:Dir
表面法线:N ^
P:矩形平面上的命中点。 (注意:可能在外面)
I.计算生命值P:
N ^ =((V1-V0)X(V3-V0))。nomralize()。 X是叉积; N ^长度是1,表面法线。
Q = O-V0
H = Q * N ^。 *是点积; H是到矩形表面的最短距离
Dproj = Dir *(-N ^); -N ^表示还原N
比例= H / Dproj。
P = O +(Dir).nominalized()*比例尺。 Dir是归一化向量。
二。通过比较矩形区域和四个三角形区域来测试P是否在矩形内部
有关计算三角形/矩形面积的参考:
http://en.wikipedia.org/wiki/Cross_product
a0 =(((V0-P)X(V1-P)).length()* 0.5
a1 =(((V1-P)X(V2-P))。length()* 0.5
a2 =(((V2-P)X(V3-P))。length()* 0.5
a3 =(((V3-P)X(V0-P))。length()* 0.5
Trec =(((V1-V0)X(V3-V0))。length()
如果((a0 + a1 + a2 + a3)> Trec),P在外面,否则在里面。
希望这个解释对您有用。
关于c++ - 在C++ 3D中计算矩形是否与射线相交,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24828653/