很有趣的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空间会不定期发布大数据分析报告,感兴趣的朋友关注 ...
随机推荐
- Living one day at a time (update for a long time)
1, http://acm.hdu.edu.cn/showproblem.php?pid=1228 2014-04-14 10:39:52 分析:字符串处理题... #include<iost ...
- 计算空间直线与平面的交点 (C#)
public class NGlbVec3d {// 三维点 public double x, y, z; public NGlbVec3d() { ...
- centos7 linux 安装jdk8
1.下载64位jdk8 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.在 ...
- Snippet: align a TextView around an image
A few weeks ago I discovered the Spans on Android,after reading the wonderful post by Flavien Lauren ...
- Retrofit
Retrofit 标签(空格分隔): 第三方&开源 Retrofit是一套RESTful架构的Android(Java)客户端实现,基于注解,提供JSON to POJO(Plain Ordi ...
- SymmetricDS 数据库双向同步开源软件入门
一句话概括该软件:SymmetricDS是一个文件和数据库同步软件,开源的,支持多主复制,同步时过滤和在异构的网络环境中进行数据转换传输.它支持单向和双向上的多个订阅者,异步的数据复制. 以下是从CS ...
- 99 Lisp Problems 二叉树(P54~P69)
P54A (*) Check whether a given term represents a binary tree Write a predicate istree which returns ...
- Microsoft.CSharp.CSharpCodeProvider
Microsoft.CSharp.CSharpCodeProvider MSDN 提供对 C# 代码生成器和代码编译器的实例的访问.类提供可用来检索 C# ICodeGenerator 和 ICode ...
- Android JNI 之 JNIEnv 解析
jni.h文件 : 了解 JNI 需要配合 jni.h 文件, jni.h 是 Google NDK 中的一个文件, 位置是 $/android-ndk-r9d/platforms/android-1 ...
- linux下 C++ 读取mat文件 MATLAB extern cyphon scipy 未完待续
1.使用Matlab的C扩展,需要用户安装matlab. g++ -L/media/exsoftware/MATLAB/R2013b/bin/glnxa64 -Wl,-rpath,/media/exs ...