在单个时间间隔内对移动球模拟应用摩擦力但更新循环计数不同的问题

问题描述

我正在尝试编写一个移动球模拟,当速度达到 0 时,球将移动和停止。模拟在循环中运行,循环计数将根据每个循环的时间间隔而有所不同。例如,一个 10 秒的 sim 有 10 个循环,其中每个循环模拟 1 秒更新,或者 10 秒 sim 有 50 个循环,每个循环模拟 200 毫秒更新。

无论循环次数如何,球都需要停在相同的坐标处。我的想法是计算每个循环的摩擦量并应用它。摩擦每秒 = 0.003 每个循环所以摩擦 200 毫秒应该是 0.003 * (200/1000) = 0.0006。

然而,我现在得到的结果是不正确的。在 200ms sim 中,球停在比 1000ms sim 更近的地方。下面是我的代码

// 10 seconds simulation with 10 loops
interval_per_loop = 1000; //miliseconds
update_loop = 10;

// 10 seconds simulation with 50 loops
//interval_per_loop = 200; //miliseconds
//update_loop = 50;

ball.speed = 0.05;
friction_per_second = 0.003;

seconds_per_loop = interval_per_loop/1000;

for (i = 0; i < update_loop; i++)
{
    if (ball.speed > 0)
    {
        ball.x += ball.speed * interval_per_loop;
        ball.y += ball.speed * interval_per_loop;
        
        friction = friction_per_second * seconds_per_loop;
        
        ball.speed -= friction;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)