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-->
相关推荐
Fractal分形算法是一种在计算机科学和图像处理领域中广泛应用的技术,它源于数学中的分形理论。分形,顾名思义,就是“自我相似”的几何结构,即使在不同尺度下观察,其形状特征仍然保持一致。在图像处理中,分形...
Ultra Fractal分形软件 UltraFractal出品,长于自定义公式,创建新的分形,色彩设置很有特色,特别是zoom的时候,非常平滑,非常有特色。另外软件的外观也很舒服。目前最新的版本是3.05。
1、实现了所有图像处理基本算法; 2、实现了所有分形算法,可供专业论文参考使用。 3,需源码或论文,联系43677656
1、实现了所有图像处理基本算法; 2、实现了所有分形算法,可供专业论文参考使用。 3,需源码或者论文,联系43677656 ,
在IT领域,分形(Fractal)是一种独特的数学概念,它揭示了自然界中许多看似无规律的复杂形状和模式的内在秩序。分形理论在多种学科中都有应用,包括计算机科学、图像处理、数据压缩、通信工程以及信号处理等。在本...
Ultra Fractal 6 是一款优秀且易于使用的专业电脑分形艺术软件,无需任何数学基础就可以从数以千计的分形类型和着色算法中进行选择,根据需要进行放大,使用渐变添加颜色,并应用多个图层以将不同的分形组合在一张...
Ultra Fractal 6 是一款优秀且易于使用的专业电脑分形艺术软件,无需任何数学基础就可以从数以千计的分形类型和着色算法中进行选择,根据需要进行放大,使用渐变添加颜色,并应用多个图层以将不同的分形组合在一张...
标题中的"fractal.rar_fractal_分形 数值分析"提到了“分形”和“数值分析”,这表明我们即将探讨的是与数学中的分形几何学以及使用数值方法来研究和绘制分形图形相关的主题。分形是自然界中普遍存在的一种自相似、...
在“fenxing.rar_fenxing_fractal_分形图形_分形树”这个压缩包中,我们可以推测其中包含了关于创建分形图形,特别是分形树和其它如分形草、垫片、地毯等的代码和资源。 分形图形的美在于它们的复杂性和无限细节,...
计算图片不同窗口下的分形值,通过分形值获得特征
本资源"matlab.rar_segmentation fractal_分形分割_分形理论_理论 分割_理论分割"是一个利用MATLAB语言实现的基于分形理论的图像分割算法。这个压缩包包含了一个程序,旨在展示如何运用分形理论来改善图像分割的效果...
分形维数是数学中的一个概念,特别是在分形几何学中占据着核心地位。它用于量化和描述分形对象的复杂性,这些对象通常具有不规则、自相似的特性。在传统的欧几里得几何中,我们用一维、二维或三维等整数维度来描述...
在我的博客有说明,研究这方面的别错过了 ...5月19日更新 修改文本框的位置 调整算法配色方案,使得“多彩Julia”和“多彩Mand”算法更加漂亮! 添加“最大迭代次数”参数设置,使得程序产生图像更加灵活
分形(Fractal)是一种在数学、几何学和计算机科学中具有广泛应用的概念,它具有自相似性和精细结构。在自然界中,我们也能发现许多分形的例子,如云朵、海岸线、山脉等。分形在计算机图形学、图像处理、信号分析等...
**分形几何与C语言编程** 分形几何是一种非传统几何学,它研究那些在不同尺度上具有相同或相似结构的复杂形状。这种几何形态在自然界中无处不在,如海岸线、云朵、雪花、树木等。"Fract-ol.zip"是一个关于分形几何...
绘制一个简单的分形树: 如下图所示,先垂直绘制一根线段,然后在线段长度的三分之一处和三分之二处分别以固定夹角绘制另外两根线段,长度分别为原线段的2/3. 如此反复,直至线段长度小于某个较小的值。其中,线条...
树枝分性图案的生成代码,用的是matlab软件。
在探讨如何使用Ultra Fractal来制作简单的分形图之前,首先需要明确什么是分形图以及它在艺术领域中的意义。分形图,亦称碎片图,是一种运用分数维理论产生的图形,这种图形在视觉上呈现出复杂的层次和无限的细节。...
在这个上下文中,"fractal.rar" 包含了一个名为 "fractal.m" 的MATLAB脚本,该脚本用于计算输入灰度图像的分形维数,采用的是分形盒维数算法。 分形盒维数(Fractal Box Dimension)是一种估算物体或图像复杂性的...
在图像处理领域,分形(Fractal)是一个重要的概念,它源自数学,特别是在几何学和混沌理论中。分形图像通常具有自相似性,即在不同尺度上观察,图像的结构保持一致或近似一致。这种特性使得分形在自然景观、生物...