三个js得到切线/球面和线段的交点

时间:2014-10-28 14:17:05

标签: three.js geometry

我有Vector3 A Vector3 B

我需要知道Vector3 C (球体和段AB的交叉点)。

获得此向量的最佳方法是什么?

我只需要一个矢量,不需要关于精度或范围。

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以将C点表示为A点和B点的仿射组合

C =(1-t) A + t B

然后,矢量OC(其中O是球体的中心)应该具有幅度R(球体的半径)。从这里你可以得到t的二次方程,你可以很容易地求解。请注意,通常您应该得到两个t值,因为A和B定义的无限线将与球体相交两次。所以,你应该只取0到1之间的t值。当AB线与球体相切并且没有真正的根时,会出现二次方程只有一个根(实际上是重根)的情况。所有当AB线与球体不相交时。

答案 1 :(得分:0)

在伪代码中

dAB[1] = B[1] - A[1]
dAB[2] = B[2] - A[2]
dAB[3] = B[3] - A[3]

rdAB = 1.0/sqrt(dAB[1]^2+dAB[2]^2+dAB[3]^2)

C[1] = A[1] + R*dAB[1]*rdAB
C[2] = A[2] + R*dAB[2]*rdAB
C[3] = A[3] + R*dAB[3]*rdAB 

其中dAB是从AB的向量,R是球体的半径,rdAB是向量的反向长度{ {1}}。