获取球体表面上坐标的位置

时间:2018-04-13 21:08:10

标签: unity3d geometry coordinates polar-coordinates

有一个对象A.我想创建一个对象B.我试图避免A覆盖B:

A hides B from camera

我在想如何实现这一目标。看看下面的图:

A does not hide B from camera

在搜索某些Unity3D函数来解决问题之前,我一直在用数学 - 几何方式思考解决方案。我已经意识到如果摄像机位于半径为c-A的球体内,A和B将位于同一表面上。所以我猜这个解决方案可能与在半径为c-A的球体表面上距A的距离A-B处的B点相关。它有意义吗?还有其他想法吗?如何用数学和Unity做到这一点?

1 个答案:

答案 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π

更新:

enter image description here