微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在尝试编写一个移动球模拟,当速度达到 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 举报,一经查实,本站将立刻删除。