Android编程绘制抛物线的方法示例

发布时间 - 2026-01-11 01:54:58    点击率:

本文实例讲述了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程序设计有所帮助。


# Android  # 绘制  # 抛物线  # Android自定义View实现绘制虚线的方法详解  # Android Path绘制贝塞尔曲线实现QQ拖拽泡泡  # Android 游戏开发中绘制游戏触摸轨迹的曲线图  # Android中贝塞尔曲线的绘制方法示例代码  # Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例  # Android编程之canvas绘制各种图形(点  # 直线  #   #   # 椭圆  # 文字  # 矩形  # 多边形  # 曲线  # 圆角矩形)  # android绘制几何图形的实例代码  # Android学习教程之2D绘图基础及绘制太极图  # Android自定义View实现shape图形绘制  # Android开发实现绘制淘宝收益图折线效果示例  # 进阶  # 重力加速度  # 相关内容  # 感兴趣  # 给大家  # 可以直接  # 更多关于  # 解决方法  # 所述  # 图像处理  # 程序设计  # 讲述了  # Runnable  # implements  # extends  # null  # mPaint  # private  # GameView  # View 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  怎么用AI帮你设计一套个性化的手机App图标?  网站制作壁纸教程视频,电脑壁纸网站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  BootStrap整体框架之基础布局组件  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  百度浏览器如何管理插件 百度浏览器插件管理方法  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  中山网站制作网页,中山新生登记系统登记流程?  Laravel怎么调用外部API_Laravel Http Client客户端使用  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Python文件异常处理策略_健壮性说明【指导】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  如何在服务器上配置二级域名建站?  Laravel如何为API编写文档_Laravel API文档生成与维护方法  如何在建站宝盒中设置产品搜索功能?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Android 常见的图片加载框架详细介绍  Bootstrap整体框架之JavaScript插件架构  香港服务器租用费用高吗?如何避免常见误区?  详解Android中Activity的四大启动模式实验简述  微信小程序 闭包写法详细介绍  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  音响网站制作视频教程,隆霸音响官方网站?  如何快速搭建高效可靠的建站解决方案?  如何续费美橙建站之星域名及服务?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Linux后台任务运行方法_nohup与&使用技巧【技巧】  如何快速搭建高效简练网站?  用yum安装MySQLdb模块的步骤方法  黑客入侵网站服务器的常见手法有哪些?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  如何挑选最适合建站的高性能VPS主机?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Laravel如何生成URL和重定向?(路由助手函数)  香港服务器选型指南:免备案配置与高效建站方案解析