Android编程绘制抛物线的方法示例
程序员文章站
2023-10-19 20:36:07
本文实例讲述了android编程绘制抛物线的方法。分享给大家供大家参考,具体如下:
package com.yarin.android.examples_05_0...
本文实例讲述了android编程绘制抛物线的方法。分享给大家供大家参考,具体如下:
package com.yarin.android.examples_05_04; import java.util.hashset; import java.util.iterator; import java.util.linkedlist; import java.util.list; import java.util.set; 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.keyevent; import android.view.motionevent; import android.view.view; import android.widget.toast; public class gameview extends view implements runnable { /* 声明paint对象 */ 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; // / <summary> // / 构造函数 // / </summary> // / v0物体的初速度 // / sita物体初速度与水平方向的夹角 // / color颜色 public movingobject(double v0, double sita, int red) { this.v0 = v0; this.sita = sita; this.color = red; } // / <summary> // / 物体的初速度 // / </summary> public double v0; // / <summary> // / 物体初速度与水平方向的夹角 // / </summary> public double sita; // / <summary> // / 物体的横坐标 // / </summary> public double x; // / <summary> // / 物体的纵坐标 // / </summary> public double y; // 物体的颜色 public int color; // 要绘制的物体的矩形 public rect getobjectrectangle() { return new rect((int) x - 3, (int) y - 3, 6, 6); } // / <summary> // / 最大射程 // / </summary> public double smax; // / <summary> // / 最大高度 // / </summary> public double h; // / <summary> // / 运行时间 // / </summary> public double t; }
更多关于android相关内容感兴趣的读者可查看本站专题:《android图形与图像处理技巧总结》、《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。