Unity3D-计算轨道上的t值位置

时间:2018-09-20 15:56:15

标签: unity3d math 3d geometry trigonometry

我使用的是我在网上找到的脚本,该脚本使用kdTree计算网格物体表面上与对象最接近的点。

我在OnDrawGizmos方法中具有以下代码,该代码使我能够绘制一个绕对象表面旋转的圆。

x = target.transform.position.x + ((Mathf.Cos(tValue)) * (radius));
z = target.transform.position.z + ((Mathf.Sin(tValue)) * (radius));
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(new Vector3(x, y, z), 0.06f);

在我正在绕行的物体上,“ tValue”的范围是从0到6.3,以进行完整的绕行。我的问题是我试图在靠近中心对象的对象的0-6.3范围内计算tValue。我已经使用kdTree系统计算出对象表面上的vector3位置,并且它排列得很完美。

我计算上式和下式中使用的半径:

Vector3 RadiusDirection = (Vector3.ProjectOnPlane(orbitingSurfaceMeshPos, planet.transform.up) - Vector3.ProjectOnPlane(planet.transform.position, planet.transform.up));
float radius = RadiusDirection.magnitude;

但是,当我尝试计算t值时,我得到一个完全不同的值。我想我可以“反转”“方程式”,所以我一直在做:

float temp = orbiting.z - planet.transform.position.z;
temp = temp / radius;
calculatedTvalue = (Mathf.Asin(temp));

我可能做错了什么?我已经在一个空的场景和新脚本中测试了我的“反向方程”,如果我只是获取了轨道位置计算的结果并直接对其进行了逆转,那么它工作得很好。但是,它不适用于我的游戏。

0 个答案:

没有答案