内容
- 参数化表达式
- 求点到直线的距离
- 求直线间的距离
1. 参数化表达式
- 直线
假设3D空间中有两点 P1 和 P2,通过该两点所在的直线的参数化表达式为:
可以理解为,过P1和P2两点的直线上的点,都是从P1点出发,沿着P2-P1的矢量方向可以找到的;
这里,t可以是任意实数,若t为0到1之间,则表示的是连接 P1 和 P2 的线段,即P(t)点位于两点之间。
- 射线
假设射线的端点为 S,且沿着某一方向 V 无限延伸,射线的参数化表达式为:
这里,t 是大于等于 0 的实数;
该式也可以用来表示直线,如果令,,该式与直线方程相同。
2. 求点到直线的距离
如图所示,已知由端点S和方向V定义的直线,和一点P,求点P到直线的距离d:
根据勾股定理可知:
即点Q到直线的距离,等于Q-S的平方减去Q-S在方向V上的投影的平方;
对上式简化可得:
3. 求直线间的距离
在二维空间中,两条直线,要么平行,要么相交于一点。在三维空间中,还存在一种情况,即两条直线既不相交也不平行,我们称之为扭曲。下面将通过简单计算,获取两条相扭曲的直线上两点之间的最近距离。
如上图所示,假设有两条直线,其参数化方程分别为:
那么求两条直线上两点之间的最近距离,就是求 的最小值,设:
展开平方,并且将 和 的表达式带入方程,暴力求解,得到:
式子还挺长,不过可以通过分别令 相对 和 的偏导数为0求解得到最小值:
消去2,上述两个等式整理后,可写成矩阵形式:
解关于 和 的方程得:
根据上式可以求得 和 的值,代入函数 可以求得两条直线之间的最短距离的平方,再开方。或者代入两条直线的参数化方程,求得两条直线上距离最近的两个点,再求两点间的距离;
如果方向向量 和 是单位向量,则 ,能进一步简化式子;
如果 的值等于0,说明方程无解,则两条直线平行。此时两条直线间的距离等于一条直线上任意一点到另一条直线的距离;
如下图所示,点 到直线 的距离,就是两条直线间的距离。