在三维空间中表示平面和直线
平面和直线是三维计算机视觉和计算机图形学中有用的几何实体。将它们表示为一组点是低效的,这会导致很大的内存需求,具体取决于用于生成点的步长。
在本文中,我将讨论如何使用向量方程表示平面和直线。我还将介绍如何使用向量形式找到直线和平面之间的交点。
三维线条
我们可以用下面的等式[1]表示向量形式的直线。
p = l? + l * ** d,** d ∈ R
其中,I是一个向量,表示直线方向,l?是直线上的一个点,d是标量。
p是直线上的通用点,这些点定义了线。因此,为了定义直线,我们只需要知道6个数字/参数,就可以用向量形式完整地表示它。
我创建了一个类来表示线向量并绘制它。它由一个vector和一个point_on_line参数化,它们都是3x1 numpy列向量。
要在直线上获得点,我们可以使用该方程。通过缩放vector改变d。
我将展示一些样本行。
向量(1,1,1)点(0,0,0);
如果你想要一条横跨二维平面的线,那么你可以使用一个在两个坐标中只有非零值的向量,你将在二维平面中得到一条线。向量(1,1,0)点(0,0,0):
三维平面
我们可以用下面的等式表示向量形式的平面。
(p — p?) * n = 0,其中n是平面的法向(垂直)向量,p?是平面上的点。
上述方程式中所有点p的轨迹定义了该平面。(p — **p?)**表示平面中的向量,n表示平面的正交向量或法向量。因此,对于平面上所有点p的这些向量,相互正交的这两个向量的点积将为零。
用六个数字来表达一个平面十分优雅!
下面是Python中使用上述定义的平面类。
接下来,让我们看看如何找到直线和平面的交点。
3D中点与平面的交点
现在我们知道了如何在3D中表示点和平面,我们可以看看如何找到这两个几何图形之间的交点。
如果一条直线和某个平面在点p相交,它将同时满足直线和平面方程。因此,为了找到交点,将p的值从直线方程代入平面方程。
(( **l? + l * ** d) — p?) * n = 0
展开这些项可以得到以下等式。
(l * n) d + (l? — p?) * n = 0
求解d得到:
d = (p? — l?) * n / (l * n)
这返回给我们一个点,该点位于直线和平面上。
有三种情况。
首先是直线和平面平行,但直线不在平面内。
接下来是,正好有一个交点。
最后,直线平行于平面并在平面中,在这种情况下,直线中的每个点也将位于平面上。因此,在这种情况下,将有无限多个点同时满足这两个方程。
对于前两个案例,l * n = 0,因为对于它们,I垂直于法向量n。否则,我们将得到一个实数d,它可以在直线方程中替换回来,以得到交点:
p = l? + l * d
我已经为平面和直线类编写了一个基于上述方程计算交点的函数。请注意,函数是相同的等式,唯一不同的是代码语法。class Line:
现在,我们可以使用plane和line类来查找它们之间的交点。例如:
我们可以使用Symphy验证结果:
我们也使用Symphy实现来验证我们的代码。
结论
在本文中,我们研究了3D中的线和平面。我们看到了它们的向量方程,以及如何用一个向量和一个点来表示它们。这是一个非常紧凑的表示,只有六个数字。我们最终了解了如何找到两者之间的交叉点,并查看了三种可能的交叉点情况。
参考文献
原文标题:在三维空间中表示平面和直线
-
这位巨型石油交易商认为油价有上涨空间
2022-01-25 -
我国四氧化三锰生产技术成熟,电池级四氧化三锰仍具有发展空间
2022-01-21 -
美元坚挺,天气温暖,存储空间充足,使价格免受趋势破坏
2021-09-14 -
欧洲100%可再生能源的梦想需要灵活的电网概念和更多的存储空间
2021-09-07 -
高瓴、高毅多次调研,这只医械股空间可观
2021-08-20 -
重新思考视觉transformers的空间维度
2021-08-09 -
IEA-PVPS:太阳能集成需要改进的预测,灵活的资源和更多的存储空间
2021-08-06 -
Facebook新财报:VR/AR业务盈利空间有限
2021-08-03 -
光纤激光切割机发展空间以及趋势
2021-08-03 -
如何做好受限空间安全管理
2021-07-27 -
空间大/颜值高 比亚迪元PLUS预告图曝光
2021-07-24 -
辽宁发布自然资源领域碳达峰碳中和行动清单
2021-07-20 -
古根海姆:NYLD出售CAFD,对yieldco空间产生怀疑
2021-07-17 -
“出差”3个月 神舟十二号能用多少电?
2021-06-24 -
在轨驻留3个月,神舟十二号载人飞船怎样确保能源供给?
2021-06-18