`
sxyplibo
  • 浏览: 6632 次
文章分类
社区版块
存档分类
最新评论

分形1号

    博客分类:
  • java
阅读更多

       说一说分形。

       大概分形是新手阶段最能简单直接的体现数学之美、编程之美的一个话题了,据说,它描述了大自然。

       百度一下分形图片,各种不可思议而又美轮美奂的图就会闪现出来,数目庞大,种类繁多,结构复杂。

       看起来确实很复杂。但是实际却很简单。一个数学公式的简单循环递归,就可以勾勒出一幅美丽的画卷。

       分形的著名实例:用“镂空”办法制成的康托三分集虚线、谢尔宾斯基三角形垫子(Waclaw Sierpinski,1882-1969,波兰数学家)及门格尔奶酪或称门格尔海绵(Menger,1902-1985,为著名经济学家门格尔之子),它们的非整数维数是渐增的,分别为0.63、1.58、2.72,而它们长度、面积、体积令人吃惊的皆为0;另一个用“凸起”办法制作的科赫雪花曲线(H.von Koch,1870-1924,瑞典数学家),其维数是1.26,它的长度则是无限的,可它围住的面积却有限!(来自百度百科~)

       上边的姑且不谈,我们从基础开始,这也是我对自己的总结,和温习。(今天都是全码,可以直接运行,大家执行着玩)

 

1、先做一个手镯。

     

import java.awt.Graphics;

import javax.swing.JFrame;
public class shape extends JFrame {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		shape a=new shape();
		a.draw();
	}
	public void draw(){
		this.setTitle("手镯");
		this.setSize(1200, 700);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}
	public void paint(Graphics g){
		//调用父类的重绘方法
		super.paint(g);
		double x=0,y=0,x0=0;
		double a=1.40,b=1.56,c=1.40,d=-6.56;
		for(int i = 0;i<70000;i++){
			x0=x;
			
			x=d*Math.sin(a*x)-Math.sin(b*y);
			y=c*Math.cos(a*x0)+Math.cos(b*y);
			int ix=(int)(x*30);
			int iy=(int)(y*30);
			
			g.drawLine(ix+300,iy+300,ix+300,iy+300);
		}
	}
}

		

 

 

       用x,y记录坐标,画点,一群点按照数学函数x=d*Math.sin(a*x)-Math.sin(b*y);y=c*Math.cos(a*x0)+Math.cos(b*y);练成线(循环),然后就画了出来。

2、现在是一条变色的线

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
public class shape3 extends JFrame {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		shape3 a=new shape3();
		a.draw();
	}
	public void draw(){
		this.setTitle("简单画板");
		this.setSize(1200, 700);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setVisible(true);		
	}
	public void paint(Graphics g){
		//调用父类的重绘方法
		super.paint(g);		
		for(int i=0;i<255;i++){			
			Color color=new Color(i%255,i%255,255);
			g.setColor(color);
			g.drawLine((int)i*3+200,(int)300,(int)i*3+300,(int)300);					
		}		
	}
}

 

 

 3、稍微升级一下

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;



public class shape2 extends JFrame {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		shape2 a=new shape2();
		a.draw();
	}
	public void draw(){
		this.setTitle("简单画板");
		this.setSize(1200, 700);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	
		
	}
	public void paint(Graphics g){
		//调用父类的重绘方法
		super.paint(g);
		
		for(int i=0;i<=700;i++){
			for(int j=0;j<=200;j++){
			 Color color=new Color(j%255,j%255,255);
			g.setColor(color);
			g.drawLine((int)i+200,(int)j+300,(int)i+300,(int)j+300);
		//长方形渐变
			}
		}
		
	}
}

		

 4、一个变色的通道,不过没有设置停止和线程,所以要等很久才能关掉,或者强关

 

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
public class shape1 extends JFrame {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		shape1 a=new shape1();
		a.draw();
	}
	public void draw(){
		this.setTitle("简单画板");
		this.setSize(1200, 700);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setVisible(true);		
	}
	public void paint(Graphics g){
		//调用父类的重绘方法
		super.paint(g);
		double x=0,y=0,x0=0;
		double a=-2,b=-2,c=-1.2,d=2;

		for(int aa = 0;aa<55;aa++){
			for(int bb = 20;bb<255;bb++){
				for(int cc = 1;cc<55;cc++){
				
						
						x0=x;
						x=Math.sin(a*y)-Math.cos(b*x);
						y=Math.sin(c*x0)-Math.cos(d*y);
						
						int ix=(int)(x*100);
						int iy=(int)(y*100);
						Color color=new Color(aa,bb,cc);
						g.setColor(color);
						g.drawLine(ix+300,iy+300,ix+300,iy+300);

				}
			}
		}
		for(int aa = 178;aa<255;aa++){
			for(int bb = 40;bb<90;bb++){
				for(int cc = 89;cc<255;cc++){
					
						
						x0=x;
						x=Math.sin(a*y)-Math.cos(b*x);
						y=Math.sin(c*x0)-Math.cos(d*y);		 
			
						int ix=(int)(x*100);
						int iy=(int)(y*100);
						Color color=new Color(aa,bb,cc);
						g.setColor(color);
						g.drawLine(ix+300,iy+300,ix+300,iy+300);
					
				}
			}
		}
	}
}

		

 

 

5、孔雀开屏

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;

public class beatuful extends JFrame {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		beatuful a=new beatuful();
		a.draw();
	}
	public void draw(){
		this.setTitle("简单画板");
		this.setSize(1200, 700);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	
		
	}
	public void paint(Graphics g){
		//调用父类的重绘方法
		super.paint(g);
		double x=0,y=0;
		double e=2.718,r;
		
		for(int i=0;i<=200000;i++){
			r=(Math.pow(e , Math.sin(i))+2*Math.cos(i)+Math.pow(Math.sin(49*i) , 4));
			 x=r*Math.cos(i);
			y=r*Math.sin(i);
			Color color=new Color(i%255,i%255,255);
			g.setColor(color);
			g.drawLine((int)(x*100)+300,(int)(y*100)+300,(int)(x*100)+300,(int)(y*100)+300);
					
			}
		}
		
	}
}

		

 

 

分享到:
评论

相关推荐

    分形维数MATLAB程序

    1. **分形维数**:分形维数(Fractal Dimension)是分形几何中的核心概念,它能够量化一个物体的复杂性和自相似性。与我们熟悉的线性、平面和空间维度不同,分形维数可以是任何实数值,反映出物体的内在复杂结构。 ...

    递归的应用:最简单分形图形实现

    // 在这里可以实现实际的绘图操作,例如打印星号表示点 cout (" ," ), "; cout (" ," ), (" ," )" ; } // 递归函数,用于创建Sierpinski三角形 void sierpinskiTriangle(int x1, int y1, int x2, int y2, int x3...

    MATLAB设计_matlab分形.zip

    1. **MatlabFractalWebInstall.exe**:这是一个MATLAB的Web安装程序,可能包含用于创建和展示分形图形的特定工具箱或扩展。用户可以通过运行这个程序来添加与分形相关的额外功能到MATLAB环境中。 2. **...

    基于分形压缩变换的数字水印技术

    1. **编码与解码**:在第二节中提到,对图像的值域块Ri进行编码实际上是寻找一个匹配的定义域块Dj和分形压缩变换ζ(i),以降低对图像质量的影响。 2. **子块池的选择**:为了嵌入水印信号的每一位,根据定义域块Dj的...

    Drception:分形生成器,功能强大。-开源

    1. **分形**:分形是具有自相似性质的几何形状,它们在不同尺度上重复相同的模式。在计算机图形学中,分形被用来创建逼真的自然景观,如云层、山脉、河流和树木。 2. **分形生成器**:这类软件通常使用各种分形算法...

    骨料级配对橡胶混凝土梁损伤分形分析的MATLAB实现.pdf

    1. MATLAB在数据处理和分析中的应用:文档标题和描述中提到使用MATLAB实现橡胶混凝土梁损伤分形分析,这表明MATLAB作为一种高级的数学软件,不仅在工程领域,而且在材料科学研究中也具有广泛的应用。它能够对图像...

    基于MATLAB和分形理论的复合材料第二相颗粒分布均匀性评价方法.pdf

    评价结果表明,对于颗粒均匀分布的图像,通过分形计算得到的盒维数为1.998,与理论值2之间的误差仅为0.077%,显示出了较高的准确性。此外,通过与传统的锐角比率法评价结果的比较,验证了盒维数评价法的有效性和区分...

    多重分形谱计算程序matlab

    1. **数据准备**:首先,我们需要获取股票价格的时间序列数据,这些数据可以是从交易所获取的历史交易数据。 2. **区间划分**:将时间序列分成多个子区间,每个子区间的长度可变,形成一个分箱结构。 3. **富集指数...

    Python-Pynamical是一个用于建模和可视化离散非线性动力系统混乱和分形的Python包

    这个版本号“7791d84”可能是Git仓库中的一个提交哈希,代表了Pynamical在特定时间点的状态。 Pynamical的使用通常涉及以下几个步骤: 1. **定义模型**:根据问题的需求,编写迭代函数。 2. **模拟系统**:使用...

    乌鲁木齐河东矿区煤储层渗流孔孔隙分形特征研究-论文

    为准确描述乌鲁木齐河东矿区煤储层渗流孔孔隙特性,结合压汞试验及煤质分析试验,采取分段分形方法定量探讨了煤储层渗流孔孔隙结构特征及其影响因素,将渗流孔孔隙度与孔隙结构参数进行耦合,并进行了煤岩渗透率预测...

    德兴铜矿2#尾矿坝透镜体的分形特性研究 (2003年)

    在本文中,研究者们探讨了德兴铜矿2号尾矿坝主剖面上透镜体的分布特征,并通过分形几何的方法研究了透镜体的分布规律。研究显示,尾矿坝透镜体的分布存在分形特性,其中分形维数为1.5024。接下来,将详细介绍尾矿坝...

    基于斜纹基本组织的回纹分形组织设计方法 (2015年)

    中图分类号TS105.1和文献标志码A则是学术论文常用的分类标识和标记方式。 通过上述方法和技术的运用,文章提出了一种创新的纺织品设计方法,不仅为纺织设计领域提供了新的思路,也为分形理论在实际工业产品中的应用...

Global site tag (gtag.js) - Google Analytics