繁体   English   中英

确定直线在3D空间中与三角形相交的位置

[英]Determining where / if line intersects triangle in 3D space

问题

所以基本上我有一堆由3个点定义的三角形:

X0, Y0, Z0
X1, Y1, Z1
X2, Y2, Z2

我有两条要点:

Xl0, Yl0, Zl0
Xl1, Yl1, Zl1

我有一个空间点(P)定义为:

Xp0, Yp0, Zp0

在此处输入图片说明

我想首先知道如何确定与原始线平行但经过新点P的线的方程式?

其次,使用该新线,如何确定三角形上是否相交?

我想尝试创建一个函数,该函数接受我已经呈现的输入,并输出一个点,该点是三角形和布尔值的交集(如果确实相交)。

现在,我想通过c#或VB .NET进行此操作,但是实际的解决方案实际上只是基于数学的,因此用数学而不是代码表示的答案肯定也会有所帮助。

我尝试过的

我以为计算新线将仅仅是新点和第二点,

Xnew = Xl0 + (Xp0 - Xl1)
Ynew = Yl0 + (Yp0 - Yp1)
Znew = Zl0 + (Zp0 - Zp1)

然后绘制从(Xnew,Ynew,Znew)到(Xp0,Yp0,Zp0)的新线应该与我的第一条线平行,但是这样做并不平行,这意味着我的计算是错误的。

任何帮助将不胜感激!

更新资料

在尝试了以下建议之后,绘制的线条似乎还不正确:

在此处输入图片说明

相机到原点的位置就是创建第一行的原因。 我们确定的第二条线是从光标位置到新计算点的线,该点应与从原点到相机的线平行,如您所见,并非如此。 我的思考过程是否错误或编码不正确?

我的代码进行计算,如下所示:

GL.Begin(PrimitiveType.Lines)
    GL.Color3(Color.Orange)

    Dim XL0, YL0, ZL0 As Single
    XL0 = 0
    YL0 = 0
    ZL0 = 0

    'origin is at 0,0,0

    Dim XL1, YL1, ZL1 As Single
    XL1 = camx
    YL1 = camy
    ZL1 = camz

    Dim XS, YS, ZS As Single

    XS = XL1 - XL0
    YS = YL1 - YL0
    ZS = ZL1 - ZL0

    Dim length As Single = Sqrt(XS * XS + YS * YS + ZS * ZS)

    XS /= length
    YS /= length
    ZS /= length

    Dim XPN, YPN, ZPN As Single

    XPN = returnvec.X - XS * length
    YPN = returnvec.Y - YS * length
    ZPN = returnvec.Z - ZS * length


    GL.Vertex3(XPN, YPN, ZPN)
    GL.Vertex3(returnvec.X, returnvec.Y, returnvec.Z)
    GL.End()

在此处输入图片说明

试验1

在此处输入图片说明

试用2

我想首先知道如何确定与原始线平行但经过新点P的线的方程式?

要获得直线的斜率:

XS = XL1 - XL0;
YS = YL1 - YL0;
ZS = ZL1 - ZL0;
// Find length of new slope
length = Math.Sqrt(XS * XS + YS * YS + ZS * ZS);
// Normalize the new slope
XS /= length;
YS /= length;
ZS /= length;

现在XS是一个Vector3 ,它基本上代表您的线的斜率,您可以对另一条线做同样的操作,并且可以通过将该斜率与该线进行比较,以及对这条线进行反向倾斜进行测试。

现在,如果您要用此斜率创建一条新线,并从点Plength找到点N ,我们可以这样做:

XPN = XPP + XS * length;
YPN = YPP + YS * length;
ZPN = ZPP + ZS * length;

我画了线,它们确实是平行的。 我认为正在发生的事情是,由于我以直线视图查看该线,因此它似乎向内收敛。 这意味着我创建平行线的数学是正确的,从技术上讲这是我的问题。 但是,平行线不是我需要进行射线投射的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM