gpt4 book ai didi

math - 余弦加速曲线的潜在浮点问题

转载 作者:行者123 更新时间:2023-12-05 01:06:23 25 4
gpt4 key购买 nike

我正在使用余弦曲线对范围 [0, pi] 之间的对象施加力。根据我的计算,这应该给我一个速度的正弦曲线,在 t=pi/2 处的速度应该是 1.0f

但是,对于最简单的示例,我的最高速度为 0.753。

现在,如果这是一个浮点问题,那很好,但这是一个非常严重的错误,所以我很难接受它(如果是,为什么计算这些值会出现如此巨大的错误)。

一些代码:

// the function that gives the force to apply (totalTime = pi, maxForce = 1.0 in this example)
return ((Mathf.Cos(time * (Mathf.PI / totalTime)) * maxForce));


// the engine stores this value and in the next fixed update applies it to the rigidbody
// the mass is 1 so isn't affecting the result
engine.ApplyAccelerateForce(applyingForce * ship.rigidbody2D.mass);

更新

没有重力施加到物体上,世界上没有其他物体可以与之交互,也没有阻力。我还使用了 RigidBody2D,因此对象仅在平面上移动。

更新 2

好的,已经尝试了一个 super 简单的例子,我得到了我期望的结果,所以我的代码中一定有一些东西。一旦我隔离了不同的东西,就会更新。

为了记录, super 简单的代码:
float forceThisFrame;
float startTime;

// Use this for initialization
void Start () {
forceThisFrame = 0.0f;
startTime = Time.fixedTime;
}

// Update is called once per frame
void Update () {
float time = Time.fixedTime - startTime;

if(time <= Mathf.PI)
{

forceThisFrame = Mathf.Cos (time);

if(time >= (Mathf.PI /2.0f)- 0.01f && time <= (Mathf.PI /2.0f) + 0.01f)
{
print ("Speed: " + rigidbody2D.velocity);
}
}
else
{
forceThisFrame = 0.0f;
}
}

void FixedUpdate()
{
rigidbody2D.AddForce(forceThisFrame * Vector2.up);
}

更新 3

我已经更改了我的原始代码以尽可能地匹配上面的示例(下面列出了剩余的差异),但我仍然得到了差异。

这里是 are my results of velocity against time 。它们对我来说都没有意义,恒定力为 1N,这应该导致线速度函数 v(t) = t 但这并不是两个例子产生的。

其余差异:
  • 正在“计算”力的代码(现在只返回 1)正在通过非统一 DLL 运行,尽管代码本身驻留在 Unity DLL 中(可以解释更多,但不能相信这是相关的!)
  • 向刚体施加力的行为是一个单独的行为。
  • 一个是在空的环境中移动一个立方体,另一个是移动一个 Model3D 并且附近有一个平面 - 在损坏的项目中尝试了一个具有相同代码的立方体,同样的问题

  • 除此之外,我看不出任何区别,我当然看不出为什么这些事情会影响它。它们在每次固定更新时都对对象施加 1 的力。

    最佳答案

    对于余弦情况,这本身不是浮点问题,而是积分问题。

    [在您的“固定”加速情况下,显然也存在轻微的浮点问题]。

    显然加速度与力成正比( F = ma ),但您不能简单地添加加速度来获得速度,特别是如果帧之间的时间间隔不是恒定的。

    通过假设帧间加速度是常数来简化事情,因此遵循 v = u + at (或者 ∂v = a.∂t )您需要与自上一帧以来耗时成比例地缩放加速度的影响。因此,较小的 ∂t是,您的积分越准确。

    关于math - 余弦加速曲线的潜在浮点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20683365/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com