【发布时间】:2015-03-10 22:57:32
【问题描述】:
我有Vector3A和Vector3B:
我需要知道Vector3 C(球体和线段 AB 的交点)。
获取此向量的最佳方法是什么?
我只需要一个向量,与精度或范围无关。
【问题讨论】:
我有Vector3A和Vector3B:
我需要知道Vector3 C(球体和线段 AB 的交点)。
获取此向量的最佳方法是什么?
我只需要一个向量,与精度或范围无关。
【问题讨论】:
在伪代码中
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 是向量dAB 的倒数长度。
【讨论】:
您可以将点 C 表示为点 A 和 B 的仿射组合
C = (1-t)A + tB
那么,向量 OC(其中 O 是球体的中心)应该具有大小 R(球体的半径)。从中可以得到 t 的二次方程,并且可以轻松求解 t。请注意,通常您应该得到两个 t 值,因为由 A 和 B 定义的无限线将与球体相交两次。因此,您应该只取 0 到 1 之间的 t 值。当直线 AB 与球体相切并且在所有当线 AB 不与球体相交时。
【讨论】: