在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 );
我不太擅长编写代码,但是我想至少可以为您提供算法。
段可以扩展到无限线,现在您可以计算从摄像机点到该线的距离;问题是您不知道垂直于摄像机的线的垂直线是在线段的内部还是外部。因此,您可以计算三个距离:相机点与线段两点之间的距离以及相机与线段之间的距离,三个中的较低者应为您要寻找的距离。
希望这会有所帮助。