java se画抛物线_android画抛物线代码

package com.test;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Rect;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

public class GameView extends View implements Runnable {

private

Paint mPaint = null;

double

maxS = 0;

double maxH

= 0;

double maxT

= 0;

double

dx;

double

dy;

double

d;

MovingObject

obj;

boolean

isDraw=false;

public

GameView(Context context)

{

super(context);

mPaint = new Paint();

// 计算物体的最大高度、运动时间及最大射程

obj = new MovingObject(30, Math.PI / 4, Color.RED);

// 运行时间

obj.T = 2 * obj.V0 * Math.sin(obj.Sita) / 9.8;

// 最大高度

obj.H = obj.V0 * obj.V0 * Math.sin(obj.Sita) *

Math.sin(obj.Sita)

/ (2 * 9.8);

// 最大射程

obj.Smax = 2 * obj.V0 * obj.V0 * Math.sin(obj.Sita)

* Math.cos(obj.Sita) / 9.8;

if (obj.Smax > maxS)

{

maxS = obj.Smax;

}

if (obj.H > maxH)

{

maxH = obj.H;

}

if (obj.T > maxT)

{

maxT = obj.T;

}

dx = (800 - 20) / maxS;

dy = (480 - 20) / maxH;

d = Math.min(dx, dy);

//最大运行时间

Log.v("TAG", String.valueOf(maxT));

//最大高度

Log.v("TAG", String.valueOf(maxH));

//最大射程

Log.v("TAG", String.valueOf(maxS));

}

public

void onDraw(Canvas canvas)

{

super.onDraw(canvas);

canvas.drawColor(Color.BLACK);

mPaint.setAntiAlias(true);

canvas.drawColor(Color.GREEN);

if(isDraw)

{

canvas.drawCircle((float)obj.X, (float)obj.Y, 10, mPaint);

}

}

//

触笔事件

public

boolean onTouchEvent(MotionEvent event)

{

switch (event.getAction())

{

case MotionEvent.ACTION_DOWN:

new Thread(this).start();

break;

}

return true;

}

public void

run()

{

for (double t = 0; t < maxT; t += 0.01)

{

Log.v("TAG", String.valueOf(t));

isDraw=true;

// 水平坐标

double x = obj.V0 * Math.cos(obj.Sita) * t;

// 竖直坐标

double y = obj.V0 * Math.sin(obj.Sita) * t - 9.8 * t * t / 2;

if (y < 0)

{

continue;

}

// 坐标转换

obj.X = 10 + d * x;

obj.Y = 480 - 10 - d * y;

try

{

Thread.sleep(10);

} catch (InterruptedException e)

{

Thread.currentThread().interrupt();

}

// 使用postInvalidate可以直接在线程中更新界面

postInvalidate();

}

}

}

class MovingObject

{

//

重力加速度

public final double G = 9.8;

// /

// /

构造函数

// /

// /

V0物体的初速度

// /

Sita物体初速度与水平方向的夹角

// /

Color颜色

public

MovingObject(double V0, double Sita, int red)

{

this.V0 = V0;

this.Sita = Sita;

this.Color = red;

}

// /

// /

物体的初速度

// /

public

double V0;

// /

// /

物体初速度与水平方向的夹角

// /

public

double Sita;

// /

// /

物体的横坐标

// /

public

double X;

// /

// /

物体的纵坐标

// /

public

double Y;

//

物体的颜色

public int

Color;

//

要绘制的物体的矩形

public Rect

GetObjectRectangle()

{

return new Rect((int) X - 3, (int) Y - 3, 6, 6);

}

// /

// /

最大射程

// /

public

double Smax;

// /

// /

最大高度

// /

public

double H;

// /

// /

运行时间

// /

public

double T;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值