Java Cardioid 心脏形曲线 (整理)
1 package demo; 2 3 import java.awt.Color; 4 import java.awt.Graphics; 5 6 import javax.swing.JFrame; 7 import javax.swing.JPanel; 8 9 /** 10 * Java Cardioid 心脏形曲线 (整理) 11 * 这是以前看到有关Cardioid一个故事之后,觉得好玩,那时把它实现了。 12 * 13 * 2016-1-2 深圳 南山平山村 曾剑锋 14 */ 15 public class Cardioid extends JPanel{ 16 /** 17 * <ol> 18 * <li>centerX:代表x轴中心点坐标 19 * <li>centerY:代表y轴中心店坐标 20 * </ol> 21 * 整个窗口的长、宽等于2*centerX、2*centerY,这么做的目的是保证数据的统一性修改 22 * 当然你也可以考虑使用长、宽来表示,然后对他们进行取一半得到中心店坐标。 23 * 24 */ 25 static int centerX = 600/2; 26 static int centerY = 600/2; 27 /** 28 * angle:主要用于角度计算,下面程序中的for循环里的变量,360一个周期 29 */ 30 int angle; 31 /** 32 * <ol> 33 * <li>a:窗口中有2个心形图,a是其中一个的幅值 34 * <li>b:窗口中有2个心形图,b是其中一个的幅值 35 * </ol> 36 * 2个心形图,2个幅值,但初始值是不一样的。 37 */ 38 int a = 0; 39 int b = 50; 40 /** 41 * 构造函数调用start()函数。<br> 42 * 作用:开启一个线程,主要用于调整a、b的值,并刷新界面。 43 */ 44 public Cardioid() { 45 start(); 46 } 47 /** 48 * 重写paint()<br> 49 * 程序流程:<ol> 50 * <li>调用父类paint方法、并设置背景颜色为黑色 51 * <li>用for循环画两个发散的心形图 52 * </ol> 53 */ 54 @Override 55 public void paint(Graphics graphics) { 56 super.paint(graphics); 57 this.setBackground(Color.black); 58 graphics.setColor(Color.red); 59 /* 60 * 这里是难点,主要是因为需要对坐标进行定位,下面是获取x、y的坐标公式,你可以在网上查到 61 * x=a*(2*sin(t)-sin(2*t)) 62 * y=a*(2*cos(t)-cos(2*t)) 63 * 这里的x、y和网上的公式对调了,主要是因为需要进行y=x对称,网上的图是横着的,这个图是正着的。 64 * sin()函数传入的是弧度制,所以需要通过angle*Math.PI/180,将角度值换成幅度值 65 * 其中的500主要是用于坐标调整的,没有理由,是我自己试出来的,我也没有去深究为什么,因为功能完成了。 66 */ 67 for (angle = 0; angle < 360; angle++) { 68 graphics.drawLine( 69 centerY+(int)(a*(2*Math.sin(angle*Math.PI/180)-Math.sin(2*angle*Math.PI/180))), 70 500 -(centerX+(int)(a*(2*Math.cos(angle*Math.PI/180)-Math.cos(2*angle*Math.PI/180)))), 71 centerY+(int)((a+3)*(2*Math.sin((angle)*Math.PI/180)-Math.sin(2*(angle)*Math.PI/180))), 72 500 -(centerX+(int)((a+3)*(2*Math.cos((angle)*Math.PI/180)-Math.cos(2*(angle)*Math.PI/180))))); 73 } 74 for (angle = 0; angle < 360; angle++) { 75 graphics.drawLine( 76 centerY+(int)(b*(2*Math.sin(angle*Math.PI/180)-Math.sin(2*angle*Math.PI/180))), 77 500 -(centerX+(int)(b*(2*Math.cos(angle*Math.PI/180)-Math.cos(2*angle*Math.PI/180)))), 78 centerY+(int)((b+3)*(2*Math.sin((angle)*Math.PI/180)-Math.sin(2*(angle)*Math.PI/180))), 79 500 -(centerX+(int)((b+3)*(2*Math.cos((angle)*Math.PI/180)-Math.cos(2*(angle)*Math.PI/180))))); 80 } 81 } 82 /** 83 * 创建一个匿名线程,线程主要完成以下事情:<ol> 84 * <li>改变a、b的值,相当于改变心形线的幅值; 85 * <li>延时20ms; 86 * <li>刷新界面repaint(); 87 * </ol> 88 */ 89 public void start() { 90 new Thread(new Runnable() { 91 92 @Override 93 public void run() { 94 while (true) { 95 try { 96 if (a++ >100) { 97 a = 0; 98 } 99 if (b++ >100) { 100 b = 0; 101 } 102 Thread.sleep(20); 103 repaint(); 104 } catch (InterruptedException e) { 105 e.printStackTrace(); 106 } 107 } 108 109 } 110 }).start(); 111 } 112 /** 113 * 主函数完成以下内容:<ol> 114 * <li>初始化jframe窗口; 115 * <li>创建cardioid,并将cardioid填充到jFrame中; 116 * <li>设置jFrame可见。 117 * </ol> 118 */ 119 public static void main(String[] args) { 120 JFrame jFrame = new JFrame(); 121 jFrame.setTitle("Cardioid"); 122 jFrame.setSize(centerX*2, centerY*2); 123 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 124 jFrame.setLocationRelativeTo(null); 125 126 Cardioid cardioid = new Cardioid(); 127 jFrame.add(cardioid); 128 jFrame.setVisible(true); 129 } 130 }
转载于:https://www.cnblogs.com/zengjfgit/p/5094721.html
Java Cardioid 心脏形曲线 (整理)相关推荐
- 零基础快速学习Java技术的方法整理
在学习java技术这条道路上,有很多都是零基础学员,他们对于java的学习有着很多的不解,不知怎么学习也不知道如何下手,其实Java编程涉及到的知识点还是非常多的,我们需要制定java学习路线图这样才 ...
- Java 动态写轮眼 SharinganJPanel (整理)
1 /** 2 * Java 动态写轮眼 SharingganJPanel (整理) 3 * 4 * 2016-1-2 深圳 南山平山村 曾剑锋 5 * 设计声明: 6 * 1.虽然岸本是日本人,而我 ...
- Java经典面试题整理及答案详解(八)
简介: Java经典面试题第八节来啦!本节面试题包含了进程.线程.Object类.虚拟内存等相关内容,希望大家多多练习,早日拿下心仪offer- 了解更多: Java经典面试题整理及答案详解(一) J ...
- Java经典面试题整理及答案详解(三)
简介: 以下是某同学面试时,面试官问到的问题,关于面试题答案可以参考以下内容- 上一篇:Java经典面试题整理及答案详解(二) Java面试真题第三弹接住!相信通过前两节的学习,大家对于Java多少有 ...
- 高级 Java 面试通关知识点整理
转载自 高级 Java 面试通关知识点整理 1.常用设计模式 单例模式:懒汉式.饿汉式.双重校验锁.静态加载,内部类加载.枚举类加载.保证一个类仅有一个实例,并提供一个访问它的全局访问点. 代理模式: ...
- php的web表单系统源码毕设_从业十多年看了千百套Java毕设项目,整理出100个精品!免费分享...
加班无数个昼夜看了千百套Java毕设项目,发现这100个精品!今天免费分享给大家!再给大家推荐一条由浅入深的JAVA学习路径,首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 ...
- JAVA刷题方法整理
JAVA刷题方法整理 一.String->String[] 利用String.split()实现 注:在使用String.split 方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我 ...
- java面试基础题整理(二)
java面试基础题整理 文章目录 java面试基础题整理 前端技术(HTML.CSS.JS.JQuery等) 在js中怎么样验证数字? js中如何给string这个类型加方法? 谈谈js的定时器? 请 ...
- java爬虫知识盲区整理
java爬虫知识盲区整理 HttpClient重定向处理 HttpClient获取Cookie的两种方式 根据关键字,Java抓取百度图片 Java网络爬虫(二)--HttpClient设置头部信息与 ...
最新文章
- 查看.net frameword版本
- mongodb性能分析方法:explain()
- SAP Spartacus org unit list当前行is-current的判定逻辑
- 作者:李海昌(1984-),男,中国科学院软件研究所助理研究员
- 4米乘以12米CAD图_CAD做钣金件展开的原理你知道吗?
- Mybatis mapper代理Dao开发
- toad库进行分箱操作
- ejb2.0详细开发过程
- c语言单片机矩阵键盘,51单片机矩阵键盘的C语言程序与分析
- 《区块链+》读书感想
- “最难就业季“中的大学生就业:本硕过半有着落 高职生成香饽饽
- AWVS安装(Windows)
- (三)dubbo工作原理
- 按条件隐藏bootstrapTable某一列
- MCMC和贝叶斯统计在宇宙微波背景辐射(CMB)中应用
- Javascript学习笔记(13_2) --js事件案例(小人快跑)
- you-get下载b站选集_Flash选集:酷炫效果和实用的ActionScript-第1章:Flash基本知识
- 要习惯同时兼顾几个学习项目
- 麻雀搜索算法matlab代码
- 谷歌联合创始人谢尔盖·布林(Sergey Brin):儿子引发了我对区块链技术的浓厚兴趣
热门文章
- stata安装_Stata自带的代码编辑器太丑了,那为何不使用Jupyter Notebook?
- 安装与使用 Trac 来管理项目
- 微信小程序(11)--购物车
- MySQL的存储引擎与日志说明
- JQuery系列(8) - JQuery插件开发
- 整型(int)转时间格式字符串及页面long型转时间格式字符串
- java.math.BigDecimal()的用法
- LeetCode:104_Maximum Depth of Binary Tree | 二叉树的最大深度 | Easy
- SIMD(MMX/SSE/AVX)变量命名规范心得
- Web后台服务开发——数据库查询之引入TypeORM