Three.js点到线段的距离

Three.js distance between point and line segment

在 Three.js 中,我有一个简单的方法来计算一个点(即我的相机的位置)和一条无限延伸的线之间的距离。然而,我真正需要的是找到一个点和由两点构成的单个线段之间的距离。注意:我使用的 Three.js 具有 3 个空间维度:x、y 和 z。

这是我在 Three.js 中使用的点到线段公式:

var A = lineVertex1.clone()
var B = lineVertex2.clone()

var D = B.clone().sub( A ).normalize();
var d = camera.position.clone().sub( A ).dot( D );
var X = A.clone().add( D.clone().multiplyScalar( d ) );

var distance = camera.position.distanceTo( X );  

我写代码不是很熟练,但我想我至少可以提供给你算法。

一条线段可以延伸成一条无限长的直线,现在可以计算相机点到直线的距离;问题是你不知道从相机穿过的线的垂直线是在线段内部还是外部。所以你可以计算三个距离:相机点到线段两点的距离和相机到线的距离,三个中较小的应该是你要找的距离。

希望对您有所帮助。

方法 1 使用 TRHEE js

要找到点 (A) 和由两点(B 和 C)构成的单个线段之间的距离,我们可以使用 THREE.Vector3,它不是网格,它只是一条几何线。

Vector3 有一个名为 closestPointToPoint() 的方法。采用 closestPointToPoint() 方法提供的距离,我们将找到点 A 和线段或线 BC 之间的距离。

const A=new Vector3(0,0,0);

const B=new Vector3(5,2,5); // line base point 1
const C=new Vector3(5,-2,5); // line base point 2

const line=new Line3(B,C);
const d=line.closestPointToPoint(A).distanceTo(A);

console.log(d.toFixed(3));// 7.071  this is 5 × √2 ! 

方法 2 与代数


有了A点、B点和C点的坐标,我们可以用这里给出的公式写出A和BC线之间的距离:Math StackExchange