基于 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; }点到射线
如果是直线,上文已经详细说过. 如果是射线,那么我们限制为非负数, 是点到射线的最近点的系数,如果,那么点到最近点的的线是与垂直的,但是如果 是,到射线所在的直线上的最近点是在射线之外,那么最近点,就是到的原点
图示如下:
点到射线
线段可以定义成两个端点,方向可以定义为 根据的定义,两个端点可以表示为 ,我们就可以得到点到线段的最短距离的方程:
图是如下: