首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重力和中心力

重力和中心力
EN

Stack Overflow用户
提问于 2015-10-27 19:31:41
回答 1查看 1.2K关注 0票数 1

我在Unity3D中做了一个应用程序,我想自己编码重力和向心力,但是我得到了奇怪的结果,我做的对吗?这是我的密码:

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-27 19:49:25

这方面有几个问题:

  1. 您正在使用每次F迭代重写Cforeach,因此您将得到列表中最后一个对象的for。您应该使用+=而不是=将所有的力量相加在一起。
  2. 您应该使用向量操作,而不是手动计算xyz。这样做将使第三个错误更加明显:
  3. 这个公式是错误的。例如,这一行: F.x = GV.gravity *((质量* i.mass) / (obj.position.x - i.obj.position.x)); 只有几样东西被取代了 F.x =重力coeff *(质量乘以)/(x轴上的距离**) 您真正需要的是对象之间的距离,而不仅仅是x轴上的距离。您可以通过向量操作获得这个结果: 浮子distanceSquared = (obj.position - i.obj.position).sqrMagnitude; 然后你可以用万有引力定律来得到重力的大小: 浮子forceMagnitude = GV.gravity *(质量* i.mass) / distanceSquared; 最后,你需要一个方向。您可以通过向量减法和归一化得到这个值,然后乘以所需的幅度: Vector3力= (i.obj.position - obj.position).normalized * forceMagnitude; 现在,force是指向obji.obj的矢量,具有两个物体之间重力的大小。把它加到F中,以积累来自每个物体的力,事情应该是好的。
  4. 你对物理的理解可能会变差。如果vel是速度,那么把它设为两个力之和是错误的。不过,我觉得你最好还是从别的地方了解这件事。理解牛顿定律是一个好的开始。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33376911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档