模拟抛物线的轨迹

见如下代码:

 

定义MathTool.MULTIPLE = 8;

 

Parabola.java

public class Parabola {
    private static Parabola instance = new Parabola();
    private static int initX = Const.SCREEN_WIDTH>>1;//0;
    private static int initY = Const.SCREEN_HEIGHT>>1;
    private static final int ANGLE = 30;
    private static final int VELOCITY = 12;
    private static final int ACCLY = 2<<MathTool.MULTIPLE;//Y方向上加速度
    
    //circle
    private int cycleW = 10;
    private int cycleH = 10;

    private int time = 0;
    private int vx;
    private int vy0;
    private int vy;    
    private int px;
    private int py;
    
    private int angle;
    private int v0;
    
    private Parabola(){
        init(ANGLE,VELOCITY);
    }
    
    public static Parabola getInstance(){
        return instance;
    }
    
    public void init(int angles,int v){
        angle = angles;
        v0 = v;
        time = 0;
        vx = v0*MathTool.getInstance().Cos(angle);
        vy0 = v0*MathTool.getInstance().Sin(angle);
        Const.println("vx="+vx);
        Const.println("vy="+vy);
        vy = -vy0+ACCLY*time/2;
        px = (vx*time)>>MathTool.MULTIPLE;
        py = (vy*time)>>MathTool.MULTIPLE;
    }
    
    public void updateData(){
        vy = -vy0+ACCLY*time/2;
        px = (vx*time)>>MathTool.MULTIPLE;
        py = (vy*time)>>MathTool.MULTIPLE;
        time++;
    }
    
    public void drawParabolaTrace(Graphics g){
        g.setColor(0);
        g.fillRect(0, 0, Const.SCREEN_WIDTH, Const.SCREEN_HEIGHT);
        g.setColor(0xFF0000);
        updateData();
        int dx = initX+px;
        int dy = initY+py;
        g.fillArc(dx, dy, cycleW, cycleH, 0, 360);
        if(dx<0||dx>=Const.SCREEN_WIDTH||dy>=Const.SCREEN_HEIGHT||dy<0)
            init(ANGLE,VELOCITY);
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值