我有Vector3
A 和Vector3
B :
我需要知道Vector3
C (球体和段AB的交叉点)。
获得此向量的最佳方法是什么?
我只需要一个矢量,不需要关于精度或范围。
答案 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
是从A
到B
的向量,R
是球体的半径,rdAB
是向量的反向长度{ {1}}。