有一个对象A.我想创建一个对象B.我试图避免A覆盖B:
我在想如何实现这一目标。看看下面的图:
在搜索某些Unity3D函数来解决问题之前,我一直在用数学 - 几何方式思考解决方案。我已经意识到如果摄像机位于半径为c-A的球体内,A和B将位于同一表面上。所以我猜这个解决方案可能与在半径为c-A的球体表面上距A的距离A-B处的B点相关。它有意义吗?还有其他想法吗?如何用数学和Unity做到这一点?
答案 0 :(得分:3)
您所描述的是球体表面上的环,其平面垂直于c-A
方向。
计算起来相当简单。首先,我们需要找到c-A
的2个垂直向量(我们称之为d
):
"c-A" = d
,球体半径R = abs(d)
和距离"A-B" = D
。d.X / R < 0.5
,请设置临时向量w = X
,否则设置w = Y
。u = normalize(cross(w, d))
。v = normalize(cross(d, u))
。此戒指的中心点由c + d * cos(D / R)
给出。从这里我们可以用
p(t) = c + d * cos(D / R) + u * cos(t) + v * sin(t) , 0 ≤ t ≤ 2π
更新: