`
海王子1994
  • 浏览: 43683 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

探索分形,创造美!

 
阅读更多

      何为分形,简单来说,它就是一种具有自相似特性的现象、图象或者物理过程。虽然定义简单易懂,就是自己包含许许多多相识的部分,但正如黄金分割比0.618一样,它能产生大量令人叹为观止的图案。


  
 

常见的分形例子有:谢尔宾斯基三角形和地毯、门格海绵、龙形曲线、空间填充曲线和科赫曲线等等。
 
        
 

大家可以上网轻松地找到。而制作分形也不是件难事,通过PS,Matlab或者Java等软件我们可以试着设计自己独属的分形,作为一种标志。

 

下面就附上一段制作简单分形的代码,数学公式来源于网上。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Ls {

	double x = 0, y = 0;
	Random random = new Random();

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Ls py = new Ls();
		py.init();
		
	}
    //初始化界面
	public void init() {
		JFrame jf = new JFrame();
		jf.setSize(800, 800);
		jf.setTitle("分形");
		jf.setDefaultCloseOperation(3);
		jf.setResizable(false);
		// jf.setBackground(Color.BLACK);

		jf.setVisible(true);
		Graphics g = jf.getGraphics();
		draw(g);
		draw2(g);

	}

	public void draw(Graphics g) {
		Graphics2D g2 = (Graphics2D) g;

		// 使用循环计算出每次迭代值,并完成绘制
		for (int i = 0; i < 10000; i++) {
			double a = -1.7, b = -2.5, c = -2, d = -2;
			x = d * Math.sin(a * x * Math.PI) - Math.cos(b * y * Math.PI);
			y = c * Math.cos(a * x * Math.PI) + Math.sin(b * y * Math.PI);

			int m = (int) ((d * Math.sin(a * x * Math.PI) - Math.cos(b * y
					* Math.PI)) * 100 + 400);
			int n = (int) ((c * Math.cos(a * x * Math.PI) + Math.sin(b * y
					* Math.PI)) * 100 + 350);
			// 给每个点上颜色,并绘制
			// g2.setColor(new
			// Color(random.nextInt(250)+5,random.nextInt(250)+5,random.nextInt(250)+5));
			g2.setColor(new Color(150, i % 255, i % 255));
			// 画出这个点
			// g.drawLine(m, n, m, n);
			// g.drawOval(m, n, 5, 5);
			// g.drawRect(m, n, 3, 3);
			// g.draw3DRect(m, n,5, 5, false);
			// g2.fill3DRect(m, n, 2, 2, true);
			g2.fillRect(m + 1, n + 1, 3, 3);

		}
	}

	public void draw2(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
		double a = 1.40, b = 1.56, c = 1.40, d = -6.56;
		//循环改变像素点颜色
		for (int i = 0; i < 10000; i++) {
			for (int j = 0; j < 80; j++) {
				Color color = new Color(j++, j * 2, j * 3);
				g.setColor(color);
			}
            //数学公式
			double x1 = d * Math.sin(a * x) - Math.sin(b * y);
			double y1 = c * Math.cos(a * x) + Math.cos(b * y);
			int x2 = (int) (x1 * 50) + 400;
			int y2 = (int) (y1 * 50) + 350;
			
			//g.drawLine(x2, y2, x2, y2);
			g.drawOval(x2, y2, 2, 2);
			//改变坐标
			x = x1;
			y = y1;
		}
	
	}
	
	
}

 

 

编写分形图案的程序,重在递归这一思想。通过递归,我们可以容易重复相似的部分,同时也简化了代码。

现在,我们就可以通过分形,来创造属于我们眼中的美啦!!!

  • 大小: 28.1 KB
  • 大小: 39.5 KB
  • 大小: 136.3 KB
  • 大小: 6.8 KB
  • 大小: 8.4 KB
2
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics