C++ 计算矩形是否与c+中的光线相交+;三维
我有以下3D数据:C++ 计算矩形是否与c+中的光线相交+;三维,c++,3d,intersection,rectangles,raytracing,C++,3d,Intersection,Rectangles,Raytracing,我有以下3D数据: 射线原点(x、y、z) 射线方向(x、y、z) 四个矩形角(x、y、z) 现在我正在寻找一个简单的C++函数,它计算矩形是否与光线相交。我不需要交点坐标,只需要一个“是/否”布尔值。 我在谷歌上搜索了很多,但不幸的是,我找不到任何符合我要求的简单功能。我希望我能避免写我自己的函数,因为向量计算已经是很久以前的事了:-(!如果有人有想法,我非常乐意提供任何帮助 谢谢 编辑: 谢谢你的帮助。这正是我正在搜索的,但是我在vxl库中遇到了一个问题。首先我下载并编译了源代码。然后,
- 射线原点(x、y、z)
- 射线方向(x、y、z)
- 四个矩形角(x、y、z)
// -----------------------------------------------
#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);
}
// -----------------------------------------------
//-----------------------------------------------
#包括
#包括
#包括
void-createstplane(void);
使用名称空间std;
int main()
{
createTestPlane();
返回0;
}
void createTestPlane()
{
vgl_点_3d平面P0(1.0,0.0,0.0);
vgl_点_3d平面P1(1.0,0.0,1.0);
vgl_点_3d平面P2(1.0,1.0,0.0);
vgl_平面_3d测试构造();
vgl_平面_3d平面(平面P0、平面P1、平面P2);
}
// -----------------------------------------------
我不知道问题出在哪里,因为在“”标题中提供了具有三个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);
// -----------------------------------------------
//-----------------------------------------------
//默认构造函数:水平XY平面(方程式1.z=0)
内联vgl_平面_3d():a_0,b_0,c_1,d_0{}
//:从三个非共线点构造
//该平面将包含所有三个点\a p1、\a p2和\a p3。
vgl_平面_3d(vgl_点_3d常量和p1,
vgl_点_3d常量和p2,
vgl_点_3d常量和p3);
// -----------------------------------------------
有人知道我做错了什么吗?你可能想看看VXL(),从第00240行开始是你可能想要的函数的声明。它是开源的,所以你可以使用库或者下载并检查代码/我不被允许发布该图。图的描述如下: 矩形点: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).nomralized()*Scale.Dir是一个规范化向量 二、 通过比较矩形区域和四个三角形区域,测试p是否在矩形内 关于计算三角形/矩形面积的参考: 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在外部,否则,p在内部
希望此解释对您有用。很抱歉,作为后续内容,我意识到第一个链接仅指向文档。源代码如下: