0

在 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 );  
4

2 回答 2

2

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

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

希望这可以帮助。

于 2020-06-15T22:13:47.760 回答
1

方法 1 使用 TRHEE js

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

Vector3 有一个方法称为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][1]
于 2021-01-25T02:13:59.677 回答