- 浏览: 10650 次
- 性别:
文章分类
简单的说就是部分与整体以某种方式相似的形体,具有三个特性
1. 自相似性,部分是整体的缩影,2.自仿射性:局部到整体是在不同方向上的不等比例
3.精细结构,即在任意小的比例尺度包含整体
以下是编的一个分形树效果:
如果加入随机变化的颜色,就可以做成礼花效果图:
上图中的参数,没大多奥秘,其含义如下图所示,单元长度即AC,树枝伸展角度即W(程序中用A),主干生长角度即Theta(程序中用B表示),但测试结果好像树枝生长角度没多大意义,只是控制在屏幕中的旋转角度而已,分支长度系数即BE、BD、CG或者CF这四条相等线段与AC的比,主干长度系数即下一生长单元的长度与当前生长单元长度AC的比值。
下面是程序代码:
另外一个按钮监听器类:
很遗憾,长大效果还没做出来,有待研究。
1. 自相似性,部分是整体的缩影,2.自仿射性:局部到整体是在不同方向上的不等比例
3.精细结构,即在任意小的比例尺度包含整体
以下是编的一个分形树效果:
如果加入随机变化的颜色,就可以做成礼花效果图:
上图中的参数,没大多奥秘,其含义如下图所示,单元长度即AC,树枝伸展角度即W(程序中用A),主干生长角度即Theta(程序中用B表示),但测试结果好像树枝生长角度没多大意义,只是控制在屏幕中的旋转角度而已,分支长度系数即BE、BD、CG或者CF这四条相等线段与AC的比,主干长度系数即下一生长单元的长度与当前生长单元长度AC的比值。
下面是程序代码:
package FractalTree; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.plaf.SliderUI; public class Test { //用于存放文本框中字符串 //分别对应于"单元长度","树枝伸展角度","主干生长角度","分支长度系数","顶点长度系数"的值 private JTextField [] jtf=new JTextField[5]; //给对应文本框内容赋初值 private String [] jtf_str= new String[]{"120","35","15","0.6","0.4"}; JRadioButton jrb1;//选中礼花效果的单选框 JRadioButton jrb2;//选中长大效果的单选框 private boolean flag=false;//是否进入效果标志 Mylistener my;//监听器对象 Graphics g;//中间面板的画布对象 JPanel centerpal;//中间面板对象 private Random random=new Random();//新建随机数类 public static void main(String [] args){ Test test=new Test(); test.initUI(); } //初始化界面 public void initUI(){ //新建窗体,并赋属性 JFrame jf = new JFrame(); jf.setSize(700,600); jf.setTitle("分形树"); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(3); jf.setResizable(false); //创建东边面板用于参数设置,中间面板画图 centerpal=new JPanel(){ // Graphics g; public void paint(Graphics g){ super.paint(g); int length=0; float a=0,b=0,z=0,c=0;//定义树枝伸展角度,主干生长角度,树枝长度系数,顶点长度系数 //将文本框的内容取出 for(int i=0;i<jtf_str.length;i++){ jtf_str[i]=jtf[i].getText(); } //各文本框的内容转换为对应数值 a=Integer.parseInt(jtf_str[1]); b=Integer.parseInt(jtf_str[2]); a=(float) (a*Math.PI/180); b=(float) (b*Math.PI/180); length=Integer.parseInt(jtf_str[0]); z=Float.parseFloat(jtf_str[3]); c=Float.parseFloat(jtf_str[4]); // if(jrb2.isSelected()){ // //选中长大效果 // if(!flag){ // flag=true; // z=z/10; // c=c/10; // length=50+(length-50)/10; // for(int i=0;i<10;i++){ // z=z+z*i; // c=c+c*i; // length=50+(length-50)/10*(i+1); // try { // Thread.sleep(100); // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // this.draw(250, 600, length,a,b,z,c,g); // this.repaint(); // } // } // } //this.draw(300, 600, 120,35*Math.PI/180, 5*Math.PI/180,0.6,0.4,g); this.draw(250, 600, length,a,b,z,c,g); //如果礼花效果被选中 if(jrb1.isSelected()){ for(int i=0;i<10;i++){ //休眠200ms try { Thread.sleep(20); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //重绘 this.repaint(); } } } //画生长单元的递归方法 public void draw(int X,int Y,int LEN,double A,double B,double Z,double C,Graphics g){ int len=0,x=0,y=0,x1=0,y1=0,x1l=0,y1l=0,x1r=0,y1r=0,x2=0,y2=0,x2l=0,y2l=0,x2r=0,y2r=0; if(LEN>7){ len=(int)(LEN*Z);//获得树枝长度 //获得B点(x1,y1)坐标 x1=(int)(X+len*Math.sin(B)); y1=(int)(Y-len*Math.cos(B)); //获得B点(x1,y1)左右分支点坐标 x1l=x1+(int)(len*Math.sin(B-A)); y1l=y1-(int)(len*Math.cos(B-A)); x1r=x1+(int)(len*Math.sin(B+A)); y1r=y1-(int)(len*Math.cos(B+A)); //获得C点(x2,y2)坐标 x2=(int)(X+LEN*Math.sin(B)); y2=(int)(Y-LEN*Math.cos(B)); //获得C点(x2,y2)左右分支点坐标 x2l=x2+(int)(len*Math.sin(B-A)); y2l=y2-(int)(len*Math.cos(B-A)); x2r=x2+(int)(len*Math.sin(B+A)); y2r=y2-(int)(len*Math.cos(B+A)); //如果礼花效果选中,颜色为随机 if(jrb1.isSelected()){ g.setColor(new Color(random.nextInt(256), random.nextInt(256),random.nextInt(256))); } //否则,颜色固定为绿色 else { g.setColor(Color.green); } g.drawLine(X, Y, x2, y2);//主干线 //B点(x1,y1)坐标处的两条分支 g.drawLine(x1, y1, x1l, y1l); g.drawLine(x1, y1, x1r, y1r); //C点(x2,y2)坐标处的两条分支 g.drawLine(x2, y2, x2l, y2l); g.drawLine(x2, y2, x2r, y2r); //递归 this.draw(x2, y2, (int)(LEN*C), A, B+B, Z, C,g); this.draw(x1l, y1l, len, A, B-A, Z, C,g); this.draw(x1r, y1r, len, A, B+A, Z, C,g); this.draw(x2l, y2l, len, A, B-A, Z, C,g); this.draw(x2r, y2r, len, A, B+A, Z, C,g); } } }; //中间面板背景颜色 centerpal.setBackground(new Color(0,0,0)); //创建监听器,传入中间面板 my=new Mylistener(centerpal); //创建东边面板 JPanel eastpal=this.creat_eastpal(); jf.add(eastpal,BorderLayout.EAST); jf.add(centerpal,BorderLayout.CENTER); jf.setVisible(true);//窗体可见 } //创建东边面板方法 public JPanel creat_eastpal(){ JPanel eastpal=new JPanel(); eastpal.setPreferredSize(new Dimension(100,0)); eastpal.setBackground(new Color(222,222,222)); eastpal.setLayout(null); //5个标签和5个文本框 String [] str_lab=new String[]{"单元长度:","树枝伸展角度:","主干生长角度:","分支长度系数:","顶点长度系数:"}; for(int i=0;i<str_lab.length;i++){ JLabel lab=new JLabel(str_lab[i]); lab.setBounds(5, 30+50*i, 90, 20); //每个标签下对应的文本框存入数组,方便取数 jtf[i]= new JTextField(); jtf[i].setBounds(5, 55+50*i, 90, 25); jtf[i].setText(jtf_str[i]); eastpal.add(lab); eastpal.add(jtf[i]); } //创建单选框,选中为礼花效果,并加入东边面板中 //jcb=new JCheckBox("礼花效果"); jrb1=new JRadioButton("礼花效果"); jrb1.setBounds(5, 310, 90, 30); jrb1.addActionListener(my); eastpal.add(jrb1); //创建单选框,选中为长大效果,并加入东边面板中 //jcb=new JCheckBox("长大效果"); jrb2=new JRadioButton("长大效果"); jrb2.setBounds(5, 360, 90, 30); //jrb2.addActionListener(my); eastpal.add(jrb2); //确定按钮,开始绘制 JButton jb=new JButton("确定"); jb.setBounds(15, 420, 70, 30); jb.addActionListener(my); eastpal.add(jb); return eastpal; } }
另外一个按钮监听器类:
package FractalTree; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JCheckBox; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; public class Mylistener implements ActionListener{ private JPanel panel; public Mylistener (JPanel panel){ this.panel=panel; } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("确定")){ panel.repaint(); } } }
很遗憾,长大效果还没做出来,有待研究。
发表评论
-
五子棋项目总结
2014-03-22 17:23 2447其实上个学期接触了 ... -
哈夫曼编码小结
2014-03-22 15:50 2131哈夫曼树 哈夫曼树是一最优二叉树,假设有n个字节点Tn{T1 ... -
链表小结
2014-03-22 15:44 673链表 1.链表一种物理存储单元上非连续,非顺序的存储结构,但它 ... -
集合框架小结
2014-03-22 15:18 506集合框架 主要学习了java.util.*包下的三大接口。 ... -
数组小结
2014-02-27 12:20 759数组是一种在内存中连续分布的数据结构,很方便存储和取 ... -
重绘应用
2014-02-27 11:16 473一、重绘的原因即概念: 绘制的东西,只记录在缓存中,没有保存 ... -
参数传递及画板小结
2013-12-08 21:42 532参数传递总结: 一、. ... -
接口和抽象类以及事件机制
2013-12-05 15:20 823一.接口 1.接口的定义 定义接口的关键字:interfa ... -
类的继承
2013-12-01 19:11 515<b>1</b>.继承的格式 pub ... -
基本数据类型及string常用的方法举例
2013-11-25 22:20 647java的数据类型分为基本数据类型和对象数据类型两大类; 基本 ... -
类和对象的总结
2013-11-19 10:55 465类和对象的理解:现实世界并没有类的存在,存在的只有一个个的对象 ... -
类和对象,构造方法的学习总结
2013-11-19 10:50 0类和对象的理解:现 ...
相关推荐
小结部分总结了整个毕业设计的过程和成果,包括代码编写、程序调试和功能实现。参考文献列出了相关研究的来源,而英文摘要则为非中文读者提供了论文概要。最后,致谢表达了对指导教师和学习经历的感激之情,并附有...
这项研究中设计的分形AMC结构由6×9个一阶分形单元组成,这些单元由四个大圆和四个小圆构成,实现了从1.1 GHz到3.03 GHz的±90°反射相位带宽。 通过这项技术,相较于仅使用传统AMC结构,新型分形AMC结构能够在更宽...
为了研究准分形结构光子晶体滤波器制作过程中引入的层厚误差微扰对其性能的影响, 并得出准分形结构光子晶体滤波器的层厚误差容限,通过向正负折射率介质层加入不同的层厚微扰, 分析了含负材料准分形结构光子晶体...
2.5 小结 参考文献 第3章 语音信号处理方法--时域处理 3.1 概述 3.2 语音信号的数字化和预处理 3.2.1 语音信号的数字化 3.2.2 语音信号的预处理 3.3 短时平均能量和短时平均幅度 3.3.1 短时平均能量 3.3.2...
- **小结**:总结本章知识点。 - **复习题1**:提供习题供学生巩固所学知识。 **第二章:整式的加减** - **2.1 整式**:定义整式并区分单项式与多项式。 - **阅读与思考:数字1与字母X的对话**:通过故事形式让...
1.6 本章小结 22 第2章 游戏开发相关android基础知识 23 2.1 游戏中的音效 23 2.1.1 游戏中的即时音效 23 2.1.2 即时音效的一个案例 24 2.1.3 背景音乐播放技术 27 2.1.4 简易音乐播放器的实现 ...
边缘提取:梯度、边缘(3+1小结) ④ 几何运算:成象机理2D几何(2) ⑤ 形态运算:形态滤波(4) (4) 图象分析(4) 特征提取 图象分割 图象表示 (5) 图象压缩(4) 基本原理 几种常用方法...
5 小结 参考文献 第3章 语音信号处理方法--时域处理 3. 1 概述 3. 2 语音信号的数字化和预处理 3. 2. 1 语音信号的数字化 3. 2. 2 语音信号的预处理 3. 3 短时平均能量和短时平均幅度 ...
5 小结 参考文献 第3章 语音信号处理方法--时域处理 3. 1 概述 3. 2 语音信号的数字化和预处理 3. 2. 1 语音信号的数字化 3. 2. 2 语音信号的预处理 3. 3 短时平均能量和短时平均幅度 ...
在完成课程设计时,报告的格式和内容组织也非常重要,需按照规定的结构(封面、摘要、目录、绪论、正文、小结、参考文献、附录等)进行编排。报告页数限制在20页内,确保内容精炼而全面。此外,保持良好的沟通,如...
在扫描系统中,对X方向的灵敏度和定位精度有很高的要求,同时还需要牵引力小,移动轻便,所以选用了高精度的直线滚动导轨,并具有较小的重复定位误差和摩擦系数,以实现分形路径扫描,从而完成零件片层的烧结。...
小结 基于矩阵运算的超网络构建方法是一种有效的方法,可以用于构建复杂的超网络。该方法可以被应用于多种领域,例如社交网络、交通网络、生物网络等。通过对超网络的特性分析,可以更好地了解超网络的机理和性质。 ...
课堂小结环节,学生应该回顾自己在这节课中学到的主要概念和技巧,如发现规律的方法、运用规律解决问题的步骤,以及如何从图形中提取信息。作业布置则包括课后习题、基础园、缤纷园和智慧园的练习,确保学生能够巩固...
### 小结 本研究通过对高超声速等离子鞘层湍流特性的理论分析和实验模拟,揭示了湍流对SAR成像性能的具体影响机制。这对于理解和改善高速飞行条件下雷达系统的成像能力至关重要。未来的研究还可以进一步探索不同...
3. **孔隙分布特征分析**:为了更深入地理解加固过程中吹填土内部结构的变化,研究人员采用压汞试验结合分形理论的方法,对固结过程中不同阶段的孔隙分布特征进行了分析。结果表明,随着固结压力的增加,超大孔隙和...
在此基础上系统地分析了样品SEMI图像在不同固结压力下孔隙结构参数的变化规律及运用平面分形维数DP对样品不同固结压力下土中孔隙分布状况的整体性、平均性进行了分析,且提出能够综合反映土中孔隙的大小、形态、分布...
**4.9 本章小结**总结了多媒体数据压缩与编码技术的关键概念和方法,为理解和应用这些技术提供了基础。 总之,多媒体数据压缩与编码技术是现代信息技术的基石,广泛应用于数字媒体、网络传输、存储和播放等领域,其...
每个课时都包含导入、新授、练习、小结等环节,使得学生在每一节课上都能够有明确的学习目标,确保了教学效果的高效性。 综上所述,北京版小学四年级语文上册的全册教案以科学的教学方法为基础,以提升学生语文综合...
第二种算法更为可靠,因为其迭代系数较小,能够有效控制误差累积。相比之下,第一种方法虽然起点更精确,但由于迭代系数较大,导致误差被逐渐放大。 #### 三、绘制Koch分形曲线 **问题背景** 文档中的第三个问题是...