我正在尝试在Libgdx中制作类似于this的模拟器,并且已经使用以下公式完成了位移x的计算:
Java格式:
theta = Parameter.angle * 2;
range = ((float) Math.pow(Parameter.speed, 2) / Constant.GRAVITY) * (float) Math.sin(Math.toRadians(theta));
但是问题是我的弹丸总是从0.0m高开始,我希望能够设置弹丸的初始高度,那么我需要什么公式?还如何计算位移y?
最佳答案
我也做了这个程序。您需要考虑四个主要组成部分:
VelocityX-保持恒定,除非您考虑了空气摩擦,它的计算方式是Velocity * cos(theta)
VelocityY-随时间变化,遵循公式Vy =Velocitysinθ-gtime
X位置-速度X *时间;
Y位置-速度Y * time-0.5 * g * time ^ 2
如果您希望弹丸从某个给定的高度开始,则需要将Y位置公式更改为:
Y位置-起始高度+速度Y *时间-0.5 * g *时间^ 2
弹丸运动(即飞行)所花费的时间实际上是将“速度Y”设置为零时所获得的时间(因为弹丸达到其峰值高度时是静止的)
速度Y = 0
(速度*sinθ)/ g
弹丸达到峰值所需的时间与它从地面跌落所需的时间相同(如果是从地面发射的,则起始高度为零)
峰高是“速度Y”乘以达到该峰所需的时间
PeakHeight =起始高度+(Velocitysinθ-gtime)(Velocitysinθ)/ g
这是我尝试做相同工作之前的一段代码。我使用javafx折线来绘制它,因为它具有亚像素精度(它以double作为参数)
编辑:
public void getYPoints(){
int counter=0;
double time=0.0;
double yCoord=y;
while(yCoord>=0){
yCoord=yCoord+(ySpeed*time+0.5*g*time*time);
yPoints.add(yCoord);
counter++;
time+=0.01;
//System.out.printf("Y coord for time %f is %f and in arraylist is %d\n",time,yCoord,yPoints.get(counter-1));
this.time=time;
this.counter=counter;
}
//return yPoints;
}
public void getXPoints(){
double xCoord=x;
double newTime=0.0;
while(newTime<this.time){
xCoord=xCoord+xSpeed*this.time;
xPoints.add(scale*xCoord);
newTime+=0.01;
}