说一说分形。
大概分形是新手阶段最能简单直接的体现数学之美、编程之美的一个话题了,据说,它描述了大自然。
百度一下分形图片,各种不可思议而又美轮美奂的图就会闪现出来,数目庞大,种类繁多,结构复杂。
看起来确实很复杂。但是实际却很简单。一个数学公式的简单循环递归,就可以勾勒出一幅美丽的画卷。
分形的著名实例:用“镂空”办法制成的康托三分集虚线、谢尔宾斯基三角形垫子(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); } } } }
相关推荐
1. **分形维数**:分形维数(Fractal Dimension)是分形几何中的核心概念,它能够量化一个物体的复杂性和自相似性。与我们熟悉的线性、平面和空间维度不同,分形维数可以是任何实数值,反映出物体的内在复杂结构。 ...
// 在这里可以实现实际的绘图操作,例如打印星号表示点 cout (" ," ), "; cout (" ," ), (" ," )" ; } // 递归函数,用于创建Sierpinski三角形 void sierpinskiTriangle(int x1, int y1, int x2, int y2, int x3...
1. **MatlabFractalWebInstall.exe**:这是一个MATLAB的Web安装程序,可能包含用于创建和展示分形图形的特定工具箱或扩展。用户可以通过运行这个程序来添加与分形相关的额外功能到MATLAB环境中。 2. **...
1. **编码与解码**:在第二节中提到,对图像的值域块Ri进行编码实际上是寻找一个匹配的定义域块Dj和分形压缩变换ζ(i),以降低对图像质量的影响。 2. **子块池的选择**:为了嵌入水印信号的每一位,根据定义域块Dj的...
1. **分形**:分形是具有自相似性质的几何形状,它们在不同尺度上重复相同的模式。在计算机图形学中,分形被用来创建逼真的自然景观,如云层、山脉、河流和树木。 2. **分形生成器**:这类软件通常使用各种分形算法...
1. MATLAB在数据处理和分析中的应用:文档标题和描述中提到使用MATLAB实现橡胶混凝土梁损伤分形分析,这表明MATLAB作为一种高级的数学软件,不仅在工程领域,而且在材料科学研究中也具有广泛的应用。它能够对图像...
评价结果表明,对于颗粒均匀分布的图像,通过分形计算得到的盒维数为1.998,与理论值2之间的误差仅为0.077%,显示出了较高的准确性。此外,通过与传统的锐角比率法评价结果的比较,验证了盒维数评价法的有效性和区分...
1. **数据准备**:首先,我们需要获取股票价格的时间序列数据,这些数据可以是从交易所获取的历史交易数据。 2. **区间划分**:将时间序列分成多个子区间,每个子区间的长度可变,形成一个分箱结构。 3. **富集指数...
这个版本号“7791d84”可能是Git仓库中的一个提交哈希,代表了Pynamical在特定时间点的状态。 Pynamical的使用通常涉及以下几个步骤: 1. **定义模型**:根据问题的需求,编写迭代函数。 2. **模拟系统**:使用...
为准确描述乌鲁木齐河东矿区煤储层渗流孔孔隙特性,结合压汞试验及煤质分析试验,采取分段分形方法定量探讨了煤储层渗流孔孔隙结构特征及其影响因素,将渗流孔孔隙度与孔隙结构参数进行耦合,并进行了煤岩渗透率预测...
在本文中,研究者们探讨了德兴铜矿2号尾矿坝主剖面上透镜体的分布特征,并通过分形几何的方法研究了透镜体的分布规律。研究显示,尾矿坝透镜体的分布存在分形特性,其中分形维数为1.5024。接下来,将详细介绍尾矿坝...
中图分类号TS105.1和文献标志码A则是学术论文常用的分类标识和标记方式。 通过上述方法和技术的运用,文章提出了一种创新的纺织品设计方法,不仅为纺织设计领域提供了新的思路,也为分形理论在实际工业产品中的应用...