我正在尝试在Libgdx中制作类似于this的模拟器,并且已经使用以下公式完成了位移x的计算:

java - 如何计算初始高度的弹丸位移?-LMLPHP

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;

    }

10-05 18:32