Something about Fractal(分形)
最初看到分形两个字的时候,感觉这个词是如此的陌生又熟悉,这根形状一定有关,是不是一些有规律的形状呢?带着这个问题我总结了我在认识和学习分形的过程中所学到的一些知识。
PS:学习分形的时间很短,所以不是很深入,只是结合Java swing中的画笔graphics进行画图,望大家轻喷!
一、分形的含义:是用来描述对称性自然物的数学方法,主要描述工具是电脑图形,具有强烈的美感震撼力。
二、怎么画分形图形:
就我的理解,分形就是一些创意图形,但是本质上是有规律可循的图形。比如厉害的科学家们已经总结出分形图形的坐标之间的关系,而我们现在要做的是利用巨人探讨出来的数学关系式去绘制出分形图形来。
基于Java swing 界面:
1.创建窗体JFrame
2.设置窗体的属性
3.加鼠标监听器方法addMouseListener,它将实现在窗体上任意点击一下,就可以显示出分形图形来
4.写一个监听器类来实现MouseListener接口。重写其中的释放方法,在里面绘制分形图形
5.画分形图形,需要传入画笔Graphics g,用g的方法drawline来实现(当然必须要结合for循环或者递归)
6.最终分形就可以完成了
以下附上我写的一些分形图形的源代码
package com.hnu.danny1011;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Fenxing extends JFrame{
/**
* @param args
*/
public static void main(String[] args) {
Fenxing fx=new Fenxing();
fx.initUI();
}
public void initUI()
{
this.setTitle("分形递归");
this.setSize(700, 700);
this.setLocationRelativeTo(null);
//this.setResizable(false);
this.setDefaultCloseOperation(3);
this.setLayout(new java.awt.FlowLayout());
this.setVisible(true);
javax.swing.JButton jb1=new JButton();
javax.swing.JButton jb2=new JButton();
javax.swing.JButton jb3=new JButton();
javax.swing.JButton jb4=new JButton();
jb1.setText("香蕉");
jb2.setText("环形");
jb3.setText("细胞");
jb4.setText("花环");
this.add(jb1);
this.add(jb2);
this.add(jb3);
this.add(jb4);
//this.getContentPane().setBackground(Color.black);
}
//Graphics g=this.getGraphics();
public void paint(Graphics g)
{
super.paint(g);
drawfenxing(0,0,1000);
}
public void drawfenxing(double x,double y, int p)
{
Graphics g=this.getGraphics();
// draw1(g,x,y,p);
// draw2(g,x,y,p);
draw3(g,x,y,p);
}
public void draw1(Graphics g,double x,double y,int p)
{
//double x=1,y=1;
double a=-2,b=-2,c=1,d=2,temp;
for(int i=0;i<100;i++){
temp=x;
x=Math.cos(a*x)-Math.sin(b*y);
y=Math.cos(c*temp)-Math.sin(d*y);
//System.out.println(x+" "+y);
g.setColor(Color.YELLOW);
g.drawLine((int)(x*200+300),(int) (y*200+300),(int)( x*200+300),(int)( y*200+300));
}
if(p>0)
drawfenxing(x,y,p-1);
//this.getGraphics().drawLine(50, 50, 100, 100);
}
public void draw2(Graphics g,double x,double y,int p)
{
//double x=1,y=1;
double a=1.4,b=1.56,c=1.40,d=-6.56,temp;
for(int i=0;i<300;i++){
temp=x;
x=d*Math.sin(a*x)-Math.sin(b*y);
y=c*Math.cos(a*temp)+Math.cos(b*y);
//System.out.println(x+" "+y);
g.setColor(Color.darkGray);
g.drawLine((int)(x*50+350),(int) (y*50+350),(int)( x*50+350),(int)( y*50+350));
}
if(p>0)
drawfenxing(x,y,p-1);
//this.getGraphics().drawLine(50, 50, 100, 100);
}
public void draw3(Graphics g,double x,double y,int p)
{
//double x=1,y=1;
double a=0.4,b=1,c=0,temp;
// double a=1,b=4,c=60,temp;
for(int i=0;i<400;i++){
temp=x;
x=y-Math.signum(x)*Math.sqrt(Math.abs(b*x-c));
y=a-temp;
//System.out.println(x+" "+y);
g.setColor(Color.darkGray);
g.drawLine((int)(x*100+350),(int) (y*100+350),(int)( x*100+350),(int)( y*100+350));
}
if(p>0)
drawfenxing(x,y,p-1);
//this.getGraphics().drawLine(50, 50, 100, 100);
}
public void draw4(Graphics g,double x,double y,int p)
{
//double x=1,y=1;
// double a=0.4,b=1,c=0,temp;
double a=1,b=4,c=60,temp;
for(int i=0;i<400;i++){
temp=x;
x=y-Math.signum(x)*Math.sqrt(Math.abs(b*x-c));
y=a-temp;
//System.out.println(x+" "+y);
g.setColor(Color.darkGray);
g.drawLine((int)(x+350),(int) (y+350),(int)( x+350),(int)( y+350));
}
if(p>0)
drawfenxing(x,y,p-1);
//this.getGraphics().drawLine(50, 50, 100, 100);
}
}
注:以上代码,画分形是直接在paint重绘中画的。两种方法均可~
<!--EndFragment-->
相关推荐
Ultra Fractal分形软件 UltraFractal出品,长于自定义公式,创建新的分形,色彩设置很有特色,特别是zoom的时候,非常平滑,非常有特色。另外软件的外观也很舒服。目前最新的版本是3.05。
该文章与Fractal算法对应学习,毕业设计必备,核心期刊论文
1、实现了所有图像处理基本算法; 2、实现了所有分形算法,可供专业论文参考使用。 3,需源码或论文,联系43677656
1、实现了所有图像处理基本算法; 2、实现了所有分形算法,可供专业论文参考使用。 3,需源码或者论文,联系43677656 ,
Ultra Fractal 6 是一款优秀且易于使用的专业电脑分形艺术软件,无需任何数学基础就可以从数以千计的分形类型和着色算法中进行选择,根据需要进行放大,使用渐变添加颜色,并应用多个图层以将不同的分形组合在一张...
Ultra Fractal 6 是一款优秀且易于使用的专业电脑分形艺术软件,无需任何数学基础就可以从数以千计的分形类型和着色算法中进行选择,根据需要进行放大,使用渐变添加颜色,并应用多个图层以将不同的分形组合在一张...
分形维数计算,fractal dimensions
计算图片不同窗口下的分形值,通过分形值获得特征
分形方法工具箱。分形方法是非平稳信号的有效处理方法。
图形分形代码 分形树,分形草,垫片,地毯等
绘制一个简单的分形树: 如下图所示,先垂直绘制一根线段,然后在线段长度的三分之一处和三分之二处分别以固定夹角绘制另外两根线段,长度分别为原线段的2/3. 如此反复,直至线段长度小于某个较小的值。其中,线条...
在我的博客有说明,研究这方面的别错过了 ...5月19日更新 修改文本框的位置 调整算法配色方案,使得“多彩Julia”和“多彩Mand”算法更加漂亮! 添加“最大迭代次数”参数设置,使得程序产生图像更加灵活
我们会遇到一些很特别的函数,用MATLAB画出最美图形
树枝分性图案的生成代码,用的是matlab软件。
基于分形理论的改进的一种图像分割算法,用matlab语言实现
C入门的练习:根据分形几何公式生成图像小程序,multi-thread的使用
分形程序,一般的分形程序,分形程序,一般的分形程序
在我的博客有说明,研究这方面的别错过了 ...6月6日更新 最新添加“高精度Julia”和“高精度Mand”算法,突破10的27次方放大倍数极限,现在很轻松到50次方倍,只是运算速度很慢,所以一般情况建议用 普通的算法,只是...
用Ultra Fractal制作简单的分形图方法。分形图台湾称为碎片图,是分数维在自然中的应用,是数学与电脑的结合,使用起来有点象万花筒,但图形确很有艺术感。原载《计算机光盘软件与应用:COMPUTER ARTS数码艺术》2007...
盒子法分形分析图像,很实用,可以直接实现。