Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.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+中的光线相交+;三维_C++_3d_Intersection_Rectangles_Raytracing - Fatal编程技术网

C++ 计算矩形是否与c+中的光线相交+;三维

C++ 计算矩形是否与c+中的光线相交+;三维,c++,3d,intersection,rectangles,raytracing,C++,3d,Intersection,Rectangles,Raytracing,我有以下3D数据: 射线原点(x、y、z) 射线方向(x、y、z) 四个矩形角(x、y、z) 现在我正在寻找一个简单的C++函数,它计算矩形是否与光线相交。我不需要交点坐标,只需要一个“是/否”布尔值。 我在谷歌上搜索了很多,但不幸的是,我找不到任何符合我要求的简单功能。我希望我能避免写我自己的函数,因为向量计算已经是很久以前的事了:-(!如果有人有想法,我非常乐意提供任何帮助 谢谢 编辑: 谢谢你的帮助。这正是我正在搜索的,但是我在vxl库中遇到了一个问题。首先我下载并编译了源代码。然后,

我有以下3D数据:

  • 射线原点(x、y、z)
  • 射线方向(x、y、z)
  • 四个矩形角(x、y、z)
现在我正在寻找一个简单的C++函数,它计算矩形是否与光线相交。我不需要交点坐标,只需要一个“是/否”布尔值。 我在谷歌上搜索了很多,但不幸的是,我找不到任何符合我要求的简单功能。我希望我能避免写我自己的函数,因为向量计算已经是很久以前的事了:-(!如果有人有想法,我非常乐意提供任何帮助

谢谢

编辑:

谢谢你的帮助。这正是我正在搜索的,但是我在vxl库中遇到了一个问题。首先我下载并编译了源代码。然后,在测试库时,我在尝试创建一个包含三个3D点的平面时遇到了以下错误

对“vgl_平面_3d::vgl_平面_3d(vgl_点_3d常量&,vgl_点_3d常量&,vgl_点_3d常量&)”的未定义引用

我的代码:

// -----------------------------------------------
#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在内部


希望此解释对您有用。

很抱歉,作为后续内容,我意识到第一个链接仅指向文档。源代码如下: