很有趣的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空间会不定期发布大数据分析报告,感兴趣的朋友关注 ...
随机推荐
- Eclipse远程调试HDP源代码
使用的是自己编译的HDP2.3.0的源代码编译的集群,此文介绍如何使用Eclipse远程调试Hadoop内核源代码,以调试namenode为例进行介绍. 在/usr/hdp/2.3.0.0-2557/ ...
- LCLFramework框架之Repository模式
Respository模式在示例中的实际目的小结一下 Repository模式是架构模式,在设计架构时,才有参考价值: Repository模式主要是封装数据查询和存储逻辑: Repository模式 ...
- Flink 案例整合
1.概述 Flink 1.1.0 版本已经在官方发布了,官方博客于 2016-08-08 更新了 Flink 1.1.0 的变动.在这 Flink 版本的发布,添加了 SQL 语法这一特性.这对于业务 ...
- Web 技术人员需知的 Web 缓存知识(转)
最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...
- JavaMelody应用监控使用指南
原文链接:http://www.cnblogs.com/xing901022/p/4116430.html 前言 本文参考JavaMelody的UserGuide编写,部分文字均来自文档,添加有个人理 ...
- DiskGenius无损调整分区大小
一般情况下,调整分区的大小,通常都涉及到两个或两个以上的分区.比如,要想将某分区的大小扩大,通常还要同时将另一个分区的大小缩小:要想将某个分区的大小缩小,则通常还要同时将另一个分区的大小扩大. ...
- WebKit内核分析之Page
参考地址:http://blog.csdn.net/dlmu2001/article/details/6213377 注:本系列博客是在原博主博客基础上增加了自己的理解和片段,可以看源博文获得清晰的结 ...
- Enjoy Android
大趋势所迫,开始学习Android, @mark一下
- EditorWindow中手动控制焦点
在Unity3D中制作编辑器的时候,有时候会需要手动控制界面上控件的焦点,与此相关的有三个函数都在下面的示例代码中了: public void Test() { // 给控件命名 GUI.SetNex ...
- Communication - 01.Foreword
冷落博客已有一年,理由种种,想来是腾出了些时间,但未见得其他方面有了什么可观的进步.打理博客犹如健身,每天不抬几次杠铃活动活动筋骨则憋的荒.消耗了大量的体力,一天下来却倍感清爽,人清爽了做什么都很来劲 ...