【问题标题】:How can I rotate a vector (centripetal force)?如何旋转矢量(向心力)?
【发布时间】:2014-01-27 10:49:56
【问题描述】:

我正在尝试在编程语言中实现向心力。

我看过一些教授理论的视频。但我不知道如何在编程语言中应用它。

如果我理解我必须将向心力ac = v²/r 应用于速度矢量。但我不知道该怎么做。

我有两个游戏对象,一个描绘地球,另一个描绘月球。我想要的是围绕地球平移月球并使用按钮“切断/取消”向心力,以便月球离开地球轨道。

我不知道如何开始。

我只知道这样旋转:

velocity.x = Mathf.Cos(Time.time) * earth_moon_radius;
velocity.z = Mathf.Sin(Time.time) * earth_moon_radius;
moon.transform.position = velocity;

但是如上所述如何施加向心力呢?

【问题讨论】:

  • 为什么要轮换?旋转不是力的产物吗?如果您想施加力,我将停止旋转并仅保留位置矢量和方向矢量 - 每一步都向位置矢量添加方向矢量的倍数(取决于速度)并向其施加力(添加中心方向矢量的倍数? )。其乘积应与旋转相同。编辑:你想对什么物体施加力?
  • @wondra 我可能把一切都搞砸了。你能展示一些代码如何做到这一点吗?我是菜鸟。我想对月球施加力。它将围绕地球旋转。
  • 你在月球和地球上尝试过老式的质量和重力吗?
  • @Fabricio 我只是指出月球应该有一个直线方向的速度矢量 - 如果没有力影响它,它会直线飞离你的地图(en.wikipedia.org/wiki/Newton%27s_laws_of_motion)。如果您添加向心力(重力,或任何将其拉向地球的东西),直线矢量将被调整 dT(每一点时间都会将其转向地球)并且力的结果是您的旋转。我不是物理学家,所以我可能错了。
  • 对于这个问题,你真的想要做一个动力学模拟,使用作用力来计算加速度、速度和位置,或者你只是想要一个对象吗?是先做圆周运动,然后再做直线运动?模拟会给出相同的结果,但要困难得多,所以如果你只是想运动,就做运动。

标签: c# unity3d physics


【解决方案1】:

如果您只想让月球围绕地球旋转并使用一些触发器来释放月球,那么使用围绕中心的旋转而不是力更容易。给定以下 GameObject 层次结构:

中心(附MoonRotator
-- 月亮
-- 地球

public class MoonRotator : MonoBehaviour
{
    public bool cancelCentripetalForce = false;
    public Vector3 angularVelocity = new Vector3 (0f, 0f, 100f);

    public GameObject moon;

    void Update () {
        if (cancelCentripetalForce) {
            Vector3 radius = moon.transform.position - transform.position;
            Vector3 angularVelocityRadians = Mathf.Deg2Rad * angularVelocity;
            moon.rigidbody.velocity = Vector3.Cross (angularVelocityRadians, radius);
            moon.transform.parent = null;
            Destroy (this);
        } else {
            Vector3 rot = transform.rotation.eulerAngles + angularVelocity * Time.deltaTime;
            transform.rotation = Quaternion.Euler (rot);
        }
    }
}

如果cancelCentripetalForce 设置为真月球 将停止绕地球运行,但会以其当前的切向速度前进。这是给出的:
v = ω × r

EarthlocalPosition (0, 0, 0),而 Moon 在本例中位于围绕 z 轴旋转的 x-y 平面中。

【讨论】:

  • 嗨,我试图实现这一点,但我的月亮在按 cancelCentripalForce 后停止移动(在我的脚本中,它在 3 秒后更改为 true) - 你介意帮助我还是编辑脚本以便它一直以叉积给出的切向速度移动?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多