目前笔者接触过的分形主要有一下几种:

1.类似Clifford的分形。这种分形的特点是:分形的初始坐标为(0,0),通过初始坐标经过大量的迭代,得到一系列的点,根据得到的点来绘制分形曲线。这类分形的参数有限,可以很简单的实现。

2.类似IFS fern这样的分形。这种分形比上一种分形具有更多的参数,值得注意的是IFS fern分形的参数列表中有一项P值,该值表示的是各组不同的参数应该出现的概率,如果这个值没用上是无法得到想要的图形的。

3.类似Mandelbrot这样的分形。这种分形涉及到了复数的知识,以及时间逃逸算法。本质上是复平面上一系列点的集合,用时间逃逸算法来确定点是否在集合内,得到一系列的点,根据这些点来绘制图形。

4.类似L-System Sticks这样的分形。这类的分形需要定义母串,以及演变的规则,通过不同的母串和演变规则的到的点来绘制图形。演变规则和母串等的理解并不难,主要是涉及了坐标之间的变换较为难以计算。

下面是一段关于Mandelbrot分形的代码。

/**
* 复数类
* @author CBS
*/
public class Complex { public double r;
public double i; public Complex(double real,double image){
this.r=real;
this.i=image;
}
//取复数的模
public double modulus(){
return Math.sqrt(r*r+i*i);
}
//复数的加法
public Complex add(Complex z){
double addr=r+z.r;
double addi=i+z.i;
return new Complex(addr,addi);
}
//复数的乘法
public Complex mul(Complex z){
double mulr=r*z.r-i*z.i;
double muli=i*z.r+r*z.i;
return new Complex(mulr,muli);
}
}
// 求最大的迭代次数的算法,时间逃逸算法
public int mand(Complex z, int maxIte) {
Complex curComp = new Complex(, );
for (int i = ; i < maxIte; i++) {
if (curComp.modulus() > )
return i;
curComp = curComp.mul(curComp).add(z);
}
return maxIte;
}
// 画图的算法
public void drawMand(Complex z, double scale, int MaxIte) {
double pixUnit = / ( * scale);
double startx = z.r - * pixUnit / ;
double starty = z.i - * pixUnit / ; for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
double x0 = startx + i * pixUnit;
double y0 = starty + j * pixUnit;
Complex curComplex = new Complex(x0, y0);
int time = mand(curComplex, MaxIte);
if (time == MaxIte) {
double x = x0 * + ;// 扩大出现方格
double y = y0 * + ;
g.drawLine((int) x, (int) y, (int) x, (int) y);
}
}
}
}

更多的分形请关注http://paulbourke.net/fractals/

Java分形的更多相关文章

  1. 很有趣的Java分形绘制

    部分与整体以某种形式相似的形,称为分形. 首先我们举个例子:        我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形.换句话说,较小的分支通过放大适当的比例后可 ...

  2. java分形树

    import java.awt.*; import java.awt.event.*; import java.util.Random; import javax.swing.*; /** * * @ ...

  3. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  4. 分形之概率学下的green tree

         今天做的是分形之随机概率,可以和以前做的那个抛色子的做法非常相似,抛色子是用随机点数控制图形,今天做的树叶图形只是用概率的做法去控制图形而已,做法是如出一辙的: //图形界面 package ...

  5. Java版简易画图板的实现

    Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现. 基本的思路是这样的:画板实现大致分三部分:一是画板界面的实现,二是画板的监听以及画图的实现,三是画板的重绘.(文 ...

  6. 【高精度&想法题】Count the Even Integers @ICPC2017HongKong/upcexam5563#Java

    时间限制: 1 Sec 内存限制: 128 MB Yang Hui's Triangle is defined as follow. In the first layer, there are two ...

  7. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  8. GeoHash核心原理解析及java代码实现(转)

    原文链接:http://blog.jobbole.com/80633/ 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西.某一天机机到北海公园游玩,肚肚饿了,于是乎 ...

  9. Java代码规范、基本类型和实例演练

    1.代码分段 当一个方法内部的代码超过7行时,就要考虑分成段落. 使用空行分隔代码 按照代码的功能进行分段 最终效果是一眼就能在宏观上把握代码的结构 (1)举例 Card 分成2段 第一段:定义变量保 ...

随机推荐

  1. Python的join()函数和split()函数

    join()方法 ------------------------------------------------------------------------------------------- ...

  2. 读Zepto源码之集合操作

    接下来几个篇章,都会解读 zepto 中的跟 dom 相关的方法,也即源码 $.fn 对象中的方法. 读Zepto源码系列文章已经放到了github上,欢迎star: reading-zepto 源码 ...

  3. EntityFramework6.X 之DbContex

    DbContext 数据库上下文DbContext是ObjectContext代表之一负责管理在运行时从数据库取数据.跟踪数据库的变更.对实体类映射到数据中持久化操作等,表示工作单元和存储库模式的组合 ...

  4. STM32串口控制步进电机(原创)

    用的42步进电机: 厂家可能不一样,两项四线步进电机,里面有两个线圈.在电机什么电都没有接的情况下,用万用表测量四个管脚:两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可 ...

  5. 使用Dockerfile构建镜像-Docker for Web Developers(5)

    1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...

  6. Java编程之反射中的注解详解

    "注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解&quo ...

  7. 【Python之基本数据类型 基本运算】

    一.基本数据类型 1.字符串 类:str 方法:选中str,按住command(ctrl)+左键跳转至对应的方法 字符串常用方法归纳如下: 1)capitalize 功能:实现字符串首字母大写,自身不 ...

  8. nodeJS之二进制buffer对象

    前面的话 在ES6引入TypedArray之前,JavaScript语言没有读取或操作二进制数据流的机制.Buffer类被引入作为Nodejs的API的一部分,使其可以在TCP流和文件系统操作等场景中 ...

  9. 简单vue项目脚手架(vue+webpack2.0+vuex+vue-router)

    github地址 使用技术栈 webpack(^2.6.1) webpack-dev-server(^2.4.5) vue(^2.3.3) vuex(^2.3.1) vue-router(^2.5.3 ...

  10. C语言和go语言之间的交互

    一.go代码中使用C代码 go代码中使用C代码,在go语言的函数块中,以注释的方式写入C代码,然后紧跟import "C" 即可在go代码中使用C函数 代码示例: go代码:tes ...