`
笑_话
  • 浏览: 4543 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

分形(二)

    博客分类:
  • JAVA
阅读更多

在代码运行起来是各种诡秘的结果的时候,真是强烈觉得分形是一个奇妙的东西,虽然无比希望可以意外画出特好看的图形,可惜貌似运气不怎么样,或者在改了代码之后才反应过来没有保存。。。

谢宾斯基三角形,运行结果如下:

 

 

显然,是用一个循环或者递归来实现的,每次都在一个大的三角形里取中点,再将三点连起来,又会形成三个小号的顶点向上的三角形,然后继续连接其三边的中点,以此类推。

首先,肯定得先把那个最大的三角形单独给画出来了。接下来计算中点是必须的,然后直接把三个点连起来就可以了,由于三角形已经被划分成了四个部分,而我们又要继续在其中三个三角形中再画,所以之后必定得要根据情况传入不同参数,三次调用它本身,于是就可以一直画相同的图形了。

 

代码如下:

 

public class TriangleFrame extends  JFrame{
	public static void main(String [] args){
		TriangleFrame Tri=new TriangleFrame();
		Tri.showGUI();
}
	
Graphics g;

public void showGUI(){
			this.setSize(600, 600);
			this.setTitle("三角形");
			this.setDefaultCloseOperation(3);
			this.setVisible(true);
			//获取画布
			g=this.getGraphics();
			paint(g);
	}

public void pa(int x1,int x2,int x3,int y1,int y2,int y3,int i){
		if(i>0){
		i--;
	    int px1=(x1+x2)/2;
	    int px2=(x1+x3)/2;
	    int px3=(x2+x3)/2;
	    int py1=(y1+y2)/2;
	    int py2=(y1+y3)/2;
	    int py3=(y2+y3)/2;
	    
	    g.drawLine(px1, py1,px2, py2);   
            g.drawLine(px1, py1, px3,py3);   
	    g.drawLine(px2, py2, px3, py3);  
		 try{
				 Thread.sleep(1);
			 }catch(Exception ef){}
		pa(x1,px2,px1,y1,py2,py1,i);
		pa(px1,x2,px3,py1,y2,py3,i);
		pa(px3,px2,x3,py3,py2,y3,i);
		}
}

public void paint(Graphics g){
	super.paint(g) ;
	int x1,x2,x3;
	int y1,y2,y3;
	int i=8;
	x1=250;x2=0;x3=500;y1=100;y2=400;y3=400;

	g.drawLine(x1, y1, x2, y2);   
        g.drawLine(x2, y2, x3, y3);   
        g.drawLine(x1, y1, x3, y3);   
  
        Color co = new Color(116,116,116);
        g.setColor(co);
        pa(x1,x2,x3,y1,y2,y3,i);
    }
}

 

 

科赫曲线,好吧,这个是貌似是变种的,不知为何每条线都只画出来一半,话说其实我觉得这个比较好看,如图:

 

 

首先得搜那个计算三分点的公式,然后就是分情况讨论了,它有三种画法,一种是底是平的,另两种分别是向左倾斜和向右倾斜。画一次就是四个三角形,两条边上和距离三分之一个边长的地方各一个,也就是四个递归了。然后是连线,重点就是必须只画一次,到最后找到所有点了再画。开始很奇怪原本自己就是斜的的三角形再在两边上画三角形要不要多分几种情况,莫名其妙画出来了,觉得古怪又改回每次画线,再去掉那些线的时候就出现了上图的状况,好吧,代码是个神奇的东西。。。          

 

代码如下:

public class ExamFrame extends JFrame{

	public static void main(String[] args) {
		ExamFrame df = new ExamFrame();
		df.initGUI();
	}
	
	private int count=4;  
	Graphics g;

	public void initGUI() {
		// 窗体的属性
		this.setTitle(" ");
		this.setSize(900,600);
		this.setLocation(100, 100);
		this.setDefaultCloseOperation(3);
		this.setVisible(true);
	
		//获取事件源上的画布对象
		g = this.getGraphics();
		
	}
	//重绘的方法 
    public void paint(Graphics g) {  
        // TODO Auto-generated method stub  
        super.paint(g);  
        int x1=100,x2=400,y1=600,y2=400;
       // g.drawLine(x1,y1,x2,y2);  
        draw(100,400,600,400,count);  
    }  
  
   
    public void draw(int x1,int y1,int x2,int y2,int count){  
    
    	if(count>0){
            //三分点

            double x3=(2*x1+x2)/3;  
            double y3=(2*y1+y2)/3;  
              
            double x4=(x1+2*x2)/3;  
            double y4=(y1+2*y2)/3;  
            
            double x5=0;
            double y5=0;   
            //System.out.println("yes");
            
            double k=(y4-y3)/(x4-x3);   
         
            if(k==0){  
                x5=(x3+x4)/2;  
                y5=y3-(x4-x3)*Math.sqrt(3)/2;  
            }else if(k>0){  
                y5=y3;  
                x5=2*x4-x3;  
            }else if(k<0){
                y5=y4;  
                x5=2*x3-x4;  
           }
   
            int tx1=(int)x1;  
            int tx2=(int)x2; 
            int ty1=(int)y1; 
            int ty2=(int)y2; 
            int tx3=(int)x3;  
            int tx4=(int)x4; 
            int ty3=(int)y3; 
            int ty4=(int)y4; 
            int tx5=(int)x5;  
            int ty5=(int)y5; 

          
            draw(tx1,ty1,tx3,ty3,count-1);
            draw(tx3,ty3,tx5,ty5,count-1);
            draw(tx5,ty5,tx4,ty4,count-1);
            draw(tx4,ty4,tx2,ty2,count-1);  
          
      	  //递归调用;  
        	if(count==1)
        		g.drawLine(tx1,ty1,tx3,ty3);
    		}
        }  
    }  

 

  • 大小: 35.7 KB
  • 大小: 13.2 KB
分享到:
评论

相关推荐

    二维迭代函数系统分形源代码.zip_zip_分形 二维_分形函数_迭代

    二维迭代函数系统(2D Iterated Function System, 简称2D IFS)是一种在计算机图形学中创建复杂自相似形状的数学方法,尤其在生成分形图像方面有着广泛应用。分形,顾名思义,是具有自相似性的几何形态,即在不同...

    matlab代码实现分形维数计算_二值图像_分形维数_分形图像

    本主题将深入探讨如何使用MATLAB来计算分形维数,特别是针对二值图像的情况。 首先,我们需要理解什么是分形。分形是具有自相似性的几何对象,即使在不同尺度下观察,其形态仍然保持相似。它们通常具有非整数的维度...

    二维图像分形维数计算

    二维图像的分形维数计算是数学和计算机科学中的一个重要概念,它涉及到图像处理、复杂系统分析以及分形几何等领域。MATLAB作为一种强大的数值计算工具,提供了方便的环境来进行这样的计算。在这里,我们将深入探讨...

    基于matlab的分形插值程序(二维和三维都有)

    在MATLAB环境中,分形插值是一种用于处理不规则数据分布和复杂几何形状的技术,它在二维和三维空间中都得到了广泛应用。本程序集包含了针对这两种情况的实现,旨在帮助用户理解和应用分形插值算法。 一、分形插值...

    二维分形树

    二维分形树是一种基于数学规则的复杂图形,它在计算机图形学、艺术设计以及科学研究中都有广泛应用。在本话题中,我们将重点讨论如何利用L系统(Lindenmayer系统)在Visual C++(简称VC)环境下生成这类迷人的分形...

    openGL实现分形树

    在这个主题中,我们将探讨如何使用OpenGL来实现分形树。分形树是一种基于数学规则的自相似图形,它通过递归过程生成,具有高度的细节和复杂性。这种图形在计算机图形学中经常被用来创建逼真的自然环境。 首先,我们...

    multifractal 二值(或三维)图像 的多重分形谱

    在二值图像中,多重分形谱提供了关于图像局部密度变化的丰富信息,可以帮助识别图像的细微结构和不规则性。 计算二值图像的多重分形谱主要包括以下步骤: 1. **预处理**:首先,对图像进行必要的预处理,如去除噪声...

    fenxinghanshu_分形函数的二维matlab代码_分形函数_

    本文将深入探讨标题和描述中提到的“分形函数的二维MATLAB代码”,以及如何在MATLAB环境中实现和理解这些分形函数。 分形(Fractal)一词由马尔科姆·布尔巴基在1975年提出,它描述了一类具有自相似性的几何形状。...

    matlab代码实现分形维数计算,matlab绘制分形图形,matlab

    1. **预处理**:首先,可能需要将原始图像转化为二值图像,因为分形维数通常在二值或阈值化的图像上计算。MATLAB中的`imbinarize`函数可以实现这一转化。 2. **构建盒子**:选择一系列递减的尺寸作为盒子大小,例如...

    二维或三维图像分形维数计算.rar_GA5_hasfno_三维 分形维_三维分形维数_二维分形维数

    本资源提供了一个使用Java编写的程序,用于计算二维和三维图像的分形维数,这对于理解和研究图像的复杂性、自相似性以及模式识别等具有极大的帮助。 首先,我们要理解什么是分形维数。在传统的欧几里得几何中,我们...

    分形几何——数学基础及其应用

    本书《分形几何——数学基础及其应用》(第二版)由英国数学家Kenneth Falconer编写,是一部经典的教材和参考资料。该书首次出版于2003年,并由John Wiley & Sons, Inc.出版。中文版由人民邮电出版社出版,译者为曾...

    分形2 二十面体的分形

    本篇我们将深入探讨标题为“分形2 二十面体的分形”的主题,结合描述中的交互方式,以及与“三维”、“分形”、“Icosahedron(二十面体)”相关的标签,来解析这一知识领域。 首先,我们来看“三维分形”。三维...

    matlab开发-二值图像的多重分形谱

    在MATLAB环境中,二值图像的多重分形谱分析是一种高级的图像处理技术,它能够揭示图像在不同尺度上的复杂性和自相似性。这个开发项目是针对二值图像的,这意味着图像只包含两种像素值,通常为0和1,分别代表背景和...

    二维图像分形维数计算软件

    二维图像的分形维数是描述复杂几何形状的重要数学概念,它超越了传统的欧几里得几何,能够捕捉到图像的粗糙度、不规则性和自相似性。在本软件"二维图像分形维数计算软件"中,用户可以利用MATLAB环境对各种二维图形...

    利用MATLAB计算分形维数

    本文将介绍如何使用 MATLAB 计算二维图像的分形维数,并对分形维数的计算过程进行详细解释。 分形维数的定义 分形维数(Fractal Dimension)是衡量图像复杂度的指标,它描述了图像的自相似性和非整体性。分形维数...

    图像分割分形算法

    分形算法是一种独特的方法,利用分形几何理论来处理图像分割问题。分形,简单来说,是指在不同尺度上具有自相似性的几何形态,这种特性在自然界中广泛存在,如海岸线、云朵、树木等。在图像处理中,分形算法可以捕捉...

    二维图像的分形维数编程

    基于MATLAB软件实现二维图像的分形维数的求取,A quantitative analysis of perimeter roughness is carried out to illustrate the degree of roughness of input images.

    分形维数MATLAB程序

    分形维数不仅适用于一维对象,还适用于二维甚至更高维度的复杂形状。它提供了一种衡量物体复杂性的方法,即使这些物体不是传统意义上的几何体。分形维数D通常介于0和2之间,其中0代表离散点集,1代表线性结构,2代表...

    分形维数计算的matlab_matlab_分形维数;差分盒维数;功率谱;结构函数_

    对于二维图像,结构函数可以帮助我们理解图像的局部变化特性。在`structure_function_of_specimen_1.m`文件中,很可能实现了结构函数的计算并可能进行了相关分析。 综上所述,这些MATLAB脚本共同构成了一个分形维数...

    MATLAB计算分形维数的2种方法.docx

    第二种方法则是借助于Fraclab工具箱来计算二值化图像的分形维数。这种方法更适合于处理具有明显二值化特征的图像。在开始使用Fraclab之前,我们需要对图像进行预处理,通过二值化处理将图像转化为黑白二值图像。这一...

Global site tag (gtag.js) - Google Analytics