我在Unity3D中做了一个应用程序,我想自己编码重力和向心力,但是我得到了奇怪的结果,我做的对吗?这是我的密码:
public void Attract(MassObject[] _allMass)
{
Vector3 F = new Vector3();
Vector3 C = new Vector3();
foreach(MassObject i in _allMass)
{
// gravity pull
F.x = GV.gravity * ((mass * i.mass) / (obj.position.x - i.obj.position.x));
F.y = GV.gravity * ((mass * i.mass) / (obj.position.y - i.obj.position.y));
F.z = GV.gravity * ((mass * i.mass) / (obj.position.z - i.obj.position.z));
// centripital force
C.x = (mass * Mathf.Pow(vel.x,2)) / (obj.position.x - i.obj.position.x);
C.y = (mass * Mathf.Pow(vel.y,2)) / (obj.position.y - i.obj.position.y);
C.z = (mass * Mathf.Pow(vel.z,2)) / (obj.position.z - i.obj.position.z);
}
vel = F + C;
Debug.Log(F);
Debug.Log(C);
}发布于 2015-10-27 19:49:25
这方面有几个问题:
F迭代重写C和foreach,因此您将得到列表中最后一个对象的for。您应该使用+=而不是=将所有的力量相加在一起。x、y和z。这样做将使第三个错误更加明显:force是指向obj到i.obj的矢量,具有两个物体之间重力的大小。把它加到F中,以积累来自每个物体的力,事情应该是好的。vel是速度,那么把它设为两个力之和是错误的。不过,我觉得你最好还是从别的地方了解这件事。理解牛顿定律是一个好的开始。https://stackoverflow.com/questions/33376911
复制相似问题