`
19941021
  • 浏览: 5325 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论
  • ayaome: ...
    java
  • 19941021:     明白了!谢谢了!
    java
  • ayaome: head属于LinkList类的属性你加个static关键字, ...
    java
  • 19941021:      这是因为在主函数中调用遍历链表的方法时要传入链表头的 ...
    java
  • ayaome: public static LinkNode head=nul ...
    java
阅读更多
[b][size=medium]  函数的递归指的是:在一个函数中又调用该函数的方法。
     其作用是:根据递归公式和结束条件容易实现递归函数,易于解决一些看似复杂其实简单的问题。
     注意:递归必须要有使其结束的条件。
     优点:符合人们的思路,易于理解。
     缺点:在实现递归时时间和空间的开销大。

     分形:有的东西看似复杂,没有规律,其实只要认真分析其局部的特征,然后循环,放大,变换等就可得到全貌。

     下面和大家一起来看一下,利用递归函数绘制几个图形。
     在这里窗体等代码我就不赘述了,只写一下绘制的方法和运行结果。

     首先我们来看一下绘制的图形,大家自己先考虑一下,再看代码,最后我们一起来分析绘制图形的思路和关键步骤。

     1.三角形   

    
         public static void main(String args[]){
        //主函数中其他代码省略
               
           /**
          *x1,y1,x2,y2,x3,y3是初始三角形的三个顶点坐标
            *count控制递归函数调用的次数
            *在主函数中绘制初始三角形,再调用画三角形的方法
            */
          int x1=250,y1=100,x2=50,y2=350,x3=450,y3=350,count=6;
          g.drawLine(x1, y1, x2, y2);
          g.drawLine(x2, y2, x3, y3);
          g.drawLine(x1, y1, x3, y3);	
          drawTRI(x1, y1, x2, y2, x3, y3,count);            
          }
         
         //递归画三角新
	public void drawTRI(int x1, int y1, int x2, int y2, int x3, int y3,int count){
		count--;
		if(count==0)
			return;
		int x12=(x1+x2)/2,y12=(y1+y2)/2,
			x23=(x2+x3)/2,y23=(y2+y3)/2,
			x13=(x1+x3)/2,y13=(y1+y3)/2;
		g.drawLine(x12, y12, x13, y13);
		g.drawLine(x12, y12, x23, y23);
		g.drawLine(x13, y13, x23, y23);	
		
		drawTRI(x1, y1, x12, y12, x13, y13, count);
		drawTRI(x12,y12,x2,y2,x23,y23,count);
		drawTRI(x13,y13,x23,y23,x3,y3,count);		
	}
    

    //下面大家从这几个分解图形分析一下便容易得到绘制的方法  

    容易得到这样的结论,在绘制初始三角形后,接着每次都是找到三个边的中点,连接形成中点三角形,然后在含有初始顶点构成的三角形中找中点,再画!
     这绘制的方法是一样的,只是每次传入的参数不同。所以我们只需改变参数的值,利用递归调用绘制的方法即可。
     注意:每次每形成一个中点三角形,下次就会多3个新三角形。因此要考虑每次在递归函数中要递归的次数。
    
    下面绘制科赫曲线和二叉树我就给出图形和关键代码,初始图形的绘制我相信大家都会吧!
    2.科赫曲线
    图形

  
   //绘制科赫曲线
	public void drawKHX(int x1, int y1, int x2, int y2,int depth) {
		g.setColor(Color.BLUE);
        g.drawLine(x1, y1, x2, y2);  
        if (depth<=1)  
            return;  
        else {//得到三等分点  
            int x11 = (int)((x1*2+x2)/3.0);  
            int y11 = (int)((y1*2+y2)/3.0);  
 
            int x22 =(int)((x1+x2*2)/3.0);  
            int y22 =(int)((y1+y2*2)/3.0);  
 
            int x33 =(int)((x11+x22)/2.0)-(int)((y11 - y22) * Math.sqrt(3)/2);  
            int y33 =(int)((y11 + y22)/2.0) -(int)((x22 - x11)*Math.sqrt(3)/2);  
 
            g.setColor(this.getBackground()); //删除这部分的直线
            g.drawLine( x1,y1,x2,y2);  
            g.setColor(Color.black);  //恢复画布的颜色
            drawKHX(x1,y1,x11,y11,depth-1);  
            drawKHX(x11,y11,x33,y33,depth-1);  
            drawKHX(x22,y22,x2,y2,depth-1);  
            drawKHX(x33,y33,x22,y22,depth-1);  
        }  
    }
   

    //计算线的长度时为了较少误差,利用实型计算后转化为整型,因为像素均为整数。
    思路:大家从分解图形一看便知。  

   3.二叉树
    图形:

  
   //利用递归画圆,两元之间的连线
          //其他代码省略
           private int x1=80,y1=500;
	private int size=40;  //球的直径大小
	private int d=80;   //两球心之间的距离
	public void DrawYuan(int x1,int y1){
		if(x1+size>=this.getWidth()||y1<size)
		   return;
		int x2=x1+d,y2=y1;
		int x3=x1+d/2,y3=y1-(int)(d*Math.sqrt(3.0)/2.0);
	    /**
	     * 绘制图形的顺序
	     * 右边的圆,右边的线,上面的圆,左边的的线
	     */
		g.drawOval(x2, y2, size, size);  
		g.drawLine(x2+size/2,y2+size/2,x3+size/2,y3+size/2);
		g.drawOval(x3, y3, size, size);
		g.drawLine(x1+size/2,y1+size/2,x3+size/2,y3+size/2);
		
		DrawYuan(x3,y3);
		
	}
   

   分解单元:
  

   
    利用递归绘制图形的步骤:
     你可以把目标图形看成一个数列,初始图形认为是数列的首项,图形分解单元的规律就是数列的地推规律,那么数列就可呈现了。绘制时在在定义一个变量控制绘制的次数就可以了。

[/size][/b]
  • 大小: 4.1 KB
  • 大小: 24.6 KB
  • 大小: 10.8 KB
  • 大小: 3.3 KB
  • 大小: 32.5 KB
  • 大小: 3.8 KB
分享到:
评论
1 楼 ayaome 2014-03-22  

相关推荐

    JAVA_API1.6文档(中文)

    java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类...

    Java 面经手册·小傅哥.pdf

    这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java api最新7.0

    JAVA开发人员最新版本7.0 api文档!本文档是 Java Platform Standard Edition 7 的 API !Java 1.7 API的中文帮助文档。 深圳电信培训中心 徐海蛟博士教学用api 7.0中文文档。支持全文检索,在线即时查询。 里面列...

    java开源包11

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包4

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包6

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包9

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包5

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包8

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包10

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    java开源包1

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包3

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    Java 中文入门学习手册合集[chm版]

    第一章 Java语言的产生及其特点 第二章 Java程序开发与运行环境 第三章 Java程序设计基础 第四章 Java应用程序的基本框架 第五章 Java的类 第六章 Java图形用户接口 第七章 多线程 第八章 Java的"异常" 第九...

Global site tag (gtag.js) - Google Analytics