Java分形
目前笔者接触过的分形主要有一下几种:
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分形的更多相关文章
- 很有趣的Java分形绘制
部分与整体以某种形式相似的形,称为分形. 首先我们举个例子: 我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形.换句话说,较小的分支通过放大适当的比例后可 ...
- java分形树
import java.awt.*; import java.awt.event.*; import java.util.Random; import javax.swing.*; /** * * @ ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 分形之概率学下的green tree
今天做的是分形之随机概率,可以和以前做的那个抛色子的做法非常相似,抛色子是用随机点数控制图形,今天做的树叶图形只是用概率的做法去控制图形而已,做法是如出一辙的: //图形界面 package ...
- Java版简易画图板的实现
Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现. 基本的思路是这样的:画板实现大致分三部分:一是画板界面的实现,二是画板的监听以及画图的实现,三是画板的重绘.(文 ...
- 【高精度&想法题】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 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- GeoHash核心原理解析及java代码实现(转)
原文链接:http://blog.jobbole.com/80633/ 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西.某一天机机到北海公园游玩,肚肚饿了,于是乎 ...
- Java代码规范、基本类型和实例演练
1.代码分段 当一个方法内部的代码超过7行时,就要考虑分成段落. 使用空行分隔代码 按照代码的功能进行分段 最终效果是一眼就能在宏观上把握代码的结构 (1)举例 Card 分成2段 第一段:定义变量保 ...
随机推荐
- Longest Substring Without Repeating Characters2015年6月9日
Given a string, find the length of the longest substring without repeating characters. For example, ...
- 《Android进阶》之第二篇 launcher
public boolean addViewToCellLayout(View child, int index, int childId, LayoutParams params, boolean ...
- YYLabel 自动布局 富文本文字点击事件
YYLabel显示多行除了需要设置numberOfLines = 0以外,还需要设置preferredMaxLayoutWidth最大的宽度值才可以生效多行效果 YYLabel中的NSMutableA ...
- struts2.1.6教程四_2、ActionContext 、ValueStack 、Stack Context
ActionContext 一次Action调用都会创建一个ActionContext 调用:ActionContext context = ActionContext.getContext() Va ...
- 探讨SQL Server并发处理存在就更新七种解决方案
前言 本节我们来讲讲并发中最常见的情况存在即更新,在并发中若未存在行记录则插入,此时未处理好极容易出现插入重复键情况,本文我们来介绍对并发中存在就更新行记录的七种方案并且我们来综合分析最合适的解决方案 ...
- 基于查表的整数霍夫变换方法实现(matlab)
暂时先用matlab把算法弄一下,这是基于查表的整数霍夫变换方法实现及解释. 接着再实现FPGA的霍夫变换. 霍夫变换原理和算法这里不多说,可参考以下链接: http://blog.csdn.net/ ...
- 一般处理程序+htm C#l简单的增删查改
首先引用两个文件一个dll: 数据库表已创建 首先编写数据读取部分 /// <summary> /// 查询 /// </summary> /// <param name ...
- iOS中动态注入JavaScript方法。动态给html标签添加事件
项目中有这样一种需求,给html5网页中图片添加点击事件,并且弹出弹出点击的对应的图片,并且可以保持图片到本地 应对这样的需求你可能会想到很多方法来实现. 1. 最简单的方法就是在html5中添加图片 ...
- STM32CubeMX GPIO的使用
一.GPIO口配置1.GPIO的主要配置有输入和输出① 作为普通GPIO输入:根据需要配置该引脚为浮空输入.带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块.② 作为普通GPIO输 ...
- LINUX centos 7.2/7.3 搭建LANP环境
首先我们先查看下centos的版本信息 #适用于所有的linux lsb_release -a #或者 cat /etc/redhat-release #又或者 rpm -q centos-relea ...