在三维空间中表示平面和直线-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
平面和直线是三维计算机视觉和计算机图形中有用的几何实体。将它们表示为一组点是低效的,这可能会导致大量内存需求,具体取决于用于生成点的步长。
在本文中,我将讨论如何使用向量方程来表示平面和直线。我还将向您展示如何使用向量形式找到直线和平面之间的交点。
3D线条
我们可以使用下面的等式[1]以向量形式表示直线。
p=1₀ + l**d,**d∈ R
式中,I是表示直线方向的向量,l₀ 是直线上的点,d是标量。
P是直线上的一般点,它定义了直线。因此,为了定义一条线,我们只需要知道6个数字/参数,然后我们就可以完全用矢量形式表达它。
我创建了一个类来表示线向量并绘制它。它由一个向量和一个point_on_line参数化,这两个向量都是3x1numpy列向量。
为了在一条线上得到一个点,我们可以使用这个方程。通过缩放矢量来更改d。
我将展示一些示例线。
矢量(1,1,1)点(0,0,0);
如果你想要一条横过二维平面的线,你可以使用一个在两个坐标中只有非零值的向量,你会在二维平面上得到一条线。矢量(1,1,0)点(0,0,0):
3D平面
我们可以用下面的等式来表示矢量形式的平面。
(p-p₀) * n=0,其中n是平面的法向(垂直)矢量,p₀ 是平面上的点。
上述方程中所有点p的轨迹定义了平面。(p-**p₀) * * n表示平面的正交向量或法向量。因此,对于平面上所有点p的矢量,两个正交矢量的点积将为零。
用六个数字表示一架飞机是非常优雅的!
下面是上面在Python中定义的平面类。
接下来,让我们看看如何找到直线和平面的交点。
三维中点与平面的交点
现在我们知道了如何在3D中表示点和平面,我们可以看到如何找到这两个几何图形之间的交点。
如果一条线在点p处与平面相交,它将同时满足直线和平面方程。因此,为了找到交点,将p的值从线姓方程代入平面方程。
((**l)₀ + l***d)-p₀) * n=0
展开这些项可得出以下等式。
(l*n)d+(l₀ — p₀) * n=0
求解d得到:
d=(p₀ — 我的意思是₀) * n/(l*n)
这将我们返回到位于直线和平面上的点。
有三种情况。
首先,直线与平面平行,但直线不在平面内。
接下来是一个交点。
最后,直线与平面平行且在平面内,在这种情况下,直线上的每个点也将在平面内。因此,在这种情况下,将有无限多的点同时满足这两个方程。
对于前两种情况,l*n=0,因为对于它们,I垂直于法向量n。否则,我们将得到一个实数d,它可以在线姓方程中替换以获得交点:
p=1₀ + l*d
我已经为平面和直线类编写了一个函数,以根据上述等式计算交点。请注意,函数是相同的等式,唯一的区别是代码语法。类别行:
现在,我们可以使用平面和直线类来找到它们之间的交点。例如:
我们可以使用Symphy验证结果:
我们还使用Symphy实现来验证我们的代码。
<img src="http
600学习网 » 在三维空间中表示平面和直线-600学习网