基于 js 开源项目:计算机几何算法库 Compute Geometry Algorithm(CGA),开源地址:即将到来
点由z,y,z三个坐标组成,可以表示为
直线可以表示为, 是直线上的一点,是直线的方向。 是直线上任意的一点
假设我们有点和直线,我们要找出点与的最短距离,如果上离最近的点 , 在直线上,此时
![]()
满足:
并且可以确定
那么点 Q 到直线 L 的距离为 d,说明:符号表示向量的长度(范数)
当为单位矩阵,那么
伪代码如下,JavaScript:
x/**
* 点到直线的距离
* @param {Point} point
* @param {Line} line
* @returns
* {
* lineParameter 最近点的参数
* lineCloset 最近点
* distanceSqr //到最近点距离的平方
* distance//到最近点距离
* }
*/
function distancePointLine(point,line) {
var result = {};
var diff = point.clone().sub(line.origin);
result.lineParameter = line.direction.dot(diff);
result.lineCloset = line.direction
.clone()
.multiplyScalar(result.lineParameter)
.add(line.origin);
diff = point.clone().sub(result.lineCloset);
result.distanceSqr = diff.dot(diff);
result.distance = Math.sqrt(result.distanceSqr);
return result;
}
点到射线
如果是直线,上文已经详细说过. 如果是射线,那么我们限制为非负数, 是点到射线的最近点的系数,如果,那么点到最近点的的线是与垂直的,但是如果 是,到射线所在的直线上的最近点是在射线之外,那么最近点,就是到的原点
图示如下:
点到射线
线段可以定义成两个端点,方向可以定义为 根据的定义,两个端点可以表示为 ,我们就可以得到点到线段的最短距离的方程:
图是如下: