很有趣的Java分形绘制
public void draw1(int x1, int y1, int x2, int y2,int depth) {//科赫曲线 keleyi.com
g.drawLine(x1, y1, x2, y2);
if (depth<=1)
return;
else {//得到三等分点
double x11 = (x1 * 2 + x2) / 3;
double y11 = (y1 * 2 + y2) / 3; double x22 = (x1 + x2 * 2) / 3;
double y22 = (y1 + y2 * 2) / 3; double x33 = (x11 + x22) / 2 - (y11 - y22) * Math.sqrt(3) / 2;
double y33 = (y11 + y22) / 2 - (x22 - x11) * Math.sqrt(3) / 2; g.setColor(j.getBackground());
g.drawLine((int) x1, (int) y1, (int) x2, (int) y2);
g.setColor(Color.black);
draw1((int) x1, (int) y1, (int) x11, (int) y11,depth-1);
draw1((int) x11, (int) y11, (int) x33, (int) y33,depth-1);
draw1((int) x22, (int) y22, (int) x2, (int) y2,depth-1);
draw1((int) x33, (int) y33, (int) x22, (int) y22,depth-1);
}
}
正方形:
public void draw2(int x1, int y1, int m,int depth) {//正方形 keleyi.com
g.fillRect(x1, y1, m, m);
m = m / 3;
if (depth<=1)
return;
else{
double x11 = x1 - 2 * m;
double y11 = y1 - 2 * m; double x22 = x1 + m;
double y22 = y1 - 2 * m; double x33 = x1 + 4 * m;
double y33 = y1 - 2 * m; double x44 = x1 - 2 * m;
double y44 = y1 + m; double x55 = x1 + 4 * m;
double y55 = y1 + m; double x66 = x1 - 2 * m;
double y66 = y1 + 4 * m; double x77 = x1 + m;
double y77 = y1 + 4 * m; double x88 = x1 + 4 * m;
double y88 = y1 + 4 * m; draw2((int) x11, (int) y11, (int) m,depth-1); draw2((int) x22, (int) y22, (int) m,depth-1); draw2((int) x33, (int) y33, (int) m,depth-1); draw2((int) x44, (int) y44, (int) m,depth-1); draw2((int) x55, (int) y55, (int) m,depth-1); draw2((int) x66, (int) y66, (int) m,depth-1); draw2((int) x77, (int) y77, (int) m,depth-1); draw2((int) x88, (int) y88, (int) m,depth-1);
} }
谢冰斯基三角形:
public void draw3(int x1,int y1,int x2,int y2,int x3,int y3,int depth){//三角形 keleyi.com double s = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
g.drawLine(x1,y1,x2,y2);
g.drawLine(x2,y2,x3,y3);
g.drawLine(x1,y1,x3,y3);
// if(s<3)
// return;
if (depth<=1)
return;
else
{
/*
* 上面的三角形
*/
double x11=(x1*3+x2)/4;
double y11=y1-(s/4)*Math.sqrt(3); double x12=(x1+x2*3)/4;
double y12=y11; double x13=(x1+x2)/2;
double y13=y1; /*
* 左边的三角形
*/
double x21=x1-s/4;
double y21=(y1+y3)/2; double x22=x1+s/4;
double y22=y21; double x23=x1;
double y23=y3; /*
* 右边的三角形
*/
double x31=x2+s/4;
double y31=(y1+y3)/2; double x32=x2-s/4;
double y32=y21; double x33=x2;
double y33=y3; draw3((int)x11,(int)y11,(int)x12,(int)y12, (int)x13, (int)y13, depth-1);
draw3((int)x21,(int)y21,(int)x22,(int)y22, (int)x23, (int)y23, depth-1);
draw3((int)x31,(int)y31,(int)x32,(int)y32, (int)x33, (int)y33, depth-1);
}
}
科赫曲线是一种外形像雪花的几何曲线,所以又称为雪花曲线,它是分形曲线中的一种,具体画法如下:
1、任意画一个正三角形,并把每一边三等分;
2、取三等分后的一边中间一段为边向外作正三角形,并把这“中间一段”擦掉;
3、重复上述两步,画出更小的三角形。
4、一直重复,直到无穷,所画出的曲线叫做科赫曲线。
小结:分形是个很好玩的东西,根据自己的奇妙想象可以画出很多很好看的图形,不仅仅是已经存在的,你可以创造出属于你自己的图形!
很有趣的Java分形绘制的更多相关文章
- 一个很有趣的示例Spring Boot项目,使用Giraphe CMS和Spring Boot
6: 这是一个很有趣的示例Spring Boot项目,使用Giraphe CMS和Spring Boot. Giraphe是基于Spring Boot的CMS框架. https://github.co ...
- (转) 机器学习很有趣Part6:怎样使用深度学习进行语音识别
本文转自:http://www.jiqizhixin.com/article/2321 机器学习很有趣Part6:怎样使用深度学习进行语音识别 2017-02-19 13:20:47 机器学习 ...
- Java 窗口 绘制图形 #2
写在前面: 高考结束咧,爽到啊,好耶 完善了Java 窗口 绘制图形 #1里面的程序 加入了缩放平移功能,给代码加了注释 1 package my_package; 2 3 import java.a ...
- java 基础题 很基础, 很有趣
都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们, ...
- Java之绘制方法
绘制图形所用的函数类别分别为视图类.图形单元类和页面类. 对视图类,设置窗口的位置和大小: 对图形单元类,设置图形边界: 对页面类,只有当页面作为元件,该函数才起作用,设置元件边界. 一般构建窗口我们 ...
- Java分形
目前笔者接触过的分形主要有一下几种: 1.类似Clifford的分形.这种分形的特点是:分形的初始坐标为(0,0),通过初始坐标经过大量的迭代,得到一系列的点,根据得到的点来绘制分形曲线.这类分形的参 ...
- 怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏
这么说吧,在我眼里,Java 就是最流行的编程语言,没有之一(PHP 往一边站).不仅岗位多,容易找到工作,关键是薪资水平也到位,不学 Java 亏得慌,对吧? 那可能零基础学编程的小伙伴就会头疼了, ...
- 荒废了很久的java以及微信公众平台今天拿起来看了看:这里有很好的教程
我的微信公众号刚刚起步: ,感兴趣可以关注一下. 关于java开发微信公众号有一个很好的教程博客:推荐一下:http://blog.csdn.net/lyq8479/article/details/8 ...
- 我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的独家报告!
声明: 1.目前程序已停止运行!QQ空间也已升级访问安全机制. 2.本“分析”数据源自部分用户的公开信息,并未触及隐私内容,广大网友无需担心. 3.QQ空间会不定期发布大数据分析报告,感兴趣的朋友关注 ...
随机推荐
- UiAutomator源代码分析之UiAutomatorBridge框架
上一篇文章<UIAutomator源代码分析之启动和执行>我们描写叙述了uitautomator从命令行执行到载入測试用例执行測试的整个流程.过程中我们也描写叙述了UiAutomatorB ...
- Win7 安装Apache 2.2.4报错:<OS 5>拒绝访问. :Failed to open the WinNT service manager
Apache 2.2安装档与win7的“用户账户控制”冲突,所以只要先关闭,安装完后再开启即可. 重启,然后再重新安装Apache2.2.4,没有出现错误.然后再把上述设置改回去. 参考:http:/ ...
- 基于Multisim的buck降压斩波电路仿真
和boost电路相反,buck电路为DC-DC降压电路,搞了一下仿真发现低压情况下降压效率比較高,电压略微高一点降压效率就不敢恭维了. .不知道是怎么回事 仿真电路: 占空比D设置了0.5, U0=U ...
- windows下使用vim+ctags+taglist
最近在公司的同事指导下,学会使用这个东西编写代码,效率提高了不少.所以记录下来,方便大家使用. 1. 下载gvim74.exe文件,并安装.注意一般安装的路径中不要存在空格 2. 下载taglist_ ...
- android 抓包 使用 tcpdmp + Wireshark
下载地址tcpdump: http://www.androidtcpdump.com/ 使用su用户, 给/system/可写的权限 mount -o remount,rw -t ...
- ITF Demo代码(用VBScript构建的接口测试框架)
ITF Demo代码(用VBScript构建的接口测试框架) http://blog.csdn.net/testing_is_believing/article/details/20872629
- php读取csv文件,在linux上出现中文读取不到的情况 解决方法
今,php读取csv文件,在linux上出现中文读取不到的情况,google,后找到解决办法<?phpsetlocale(LC_ALL, 'zh_CN');$row = 1;$handle = ...
- 魔兽争霸3 replay 格式
******************************************************************************* * WarCraft III Repla ...
- 数据库时间createtime字段 数据类型的选取
之前是一直在用datetime类型(db)精度到yyyy-MM-dd HH:mm:ss 或者 date类型 精度到 yyyy-MM-dd 用了框架自动注入功能,自己也没去深入没去管他的set赋值值等等 ...
- [原]Android打包之Gradle打包
最近尝试了一下Android的Gradle打包,发现确实比Ant打包会方便很多,特此记录下来. 注:android的gradle现在插件的版本已经是0.14.3了,对于一些老的方法和api,有一些已经 ...