首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将重力转化为简单的二维抛球模拟器

将重力转化为简单的二维抛球模拟器
EN

Stack Overflow用户
提问于 2018-01-22 01:24:16
回答 1查看 350关注 0票数 0

我正在创建一个简单的模拟器,用于基本的投掷球形物体(我被巧妙地称为球)。当用户点击屏幕时,球将以(从球到鼠标的距离)的速度开始朝这个方向移动。球会受到重力的影响,因此会以抛物线的形式运动。

最初的计划是按照以下方式实现这一点(伪代码,为了清晰起见删除了动态滴答校正):

代码语言:javascript
复制
on click:
    ball.forwardTheta = atan2(mouseY - ball.y, mouseY - ball.x)
    ball.speed = sqrt((mouseX - ball.x)^2 + (mouseY - ball.y)^2) / 50

tick:
    ball.x += ball.speed * cos(ball.forwardTheta),
    ball.y += ball.speed * sin(ball.forwardTheta);
    ball.forwardTheta += Math.PI / constGravity;

这导致了一个与我想要的系统类似的系统,然而,我担心这会引起更多的问题,例如,一旦我尝试实现球在反射角度上弹跳等等,因为目前大多数情况下,一个球以Pi/2的角度(直线向下)与一个表面发生碰撞,这意味着没有反射角。

经过一些研究,引力的一个常见的简单实现方法是从运动物体的y坐标中减去一个恒定的重力值,然而这对我来说似乎不合适,但更像是欺骗,所以我的问题是,在二维空间中,物体抛物线运动的重力实现的“适当”方法。

EN

回答 1

Stack Overflow用户

发布于 2018-01-22 05:56:05

重力会加速,所以速度(而不是明确的坐标)会改变每一个滴答。

一般情况下

代码语言:javascript
复制
ball.speed.x = ball.speed.x + acceleration.x * timequant
ball.speed.y = ball.speed.y + acceleration.y * timequant

对于y-定向重力的情况

代码语言:javascript
复制
ball.speed.y = ball.speed.y + g * timequant

速度的x分量没有变化

并不是按组件的速度表示可以帮助您进行反射计算(例如,垂直边框的反射否定x分量)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48373552

复制
相关文章

相似问题

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