⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sierpinski.java

📁 分形算法的Java程序
💻 JAVA
字号:
//sierpinski垫片(分形频道:fractal.cn)
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.io.Serializable;
import java.applet.*;
import java.lang.Math;
import java.awt.event.*;

public class sierpinski extends Applet implements MouseListener{
	private final double pi = 3.14159265;
	int x;   //定义中心点坐标x
	int y;    //定义中心点坐标y
	int l;    //三角形边长
	int inti=0;
	
	public void init(){
		Graphics g=getGraphics();
		x = 300;
  		y = 300;
  		l = 300;
  		setBackground(new Color(255,255,255));//设置背景色为白色
             

		addMouseListener(this);
  		
	}
	
	public void mouseMoved(MouseEvent e){}
	public void mouseDragged(MouseEvent e){}
	public void mouseReleased(MouseEvent e){}
	public void mouseClicked(MouseEvent e){}
	public void mouseEntered(MouseEvent e){}
	public void mouseExited(MouseEvent e){}
	
	public void update(Graphics g){paint(g);}
	
	public void paint(Graphics g){

              //绘制初始三角形
		g.setColor(Color.black);              
  		//g.drawLine((int)(x-l/2),(int)(y+l*Math.tan(pi/6)/2),(int)(x+l/2),(int)(y+l*Math.tan(pi/6)/2));
  		//g.drawLine((int)(x+l/2),(int)(y+l*Math.tan(pi/6)/2),x,(int)(y-l*Math.tan(pi/6)));
  		//g.drawLine(x,(int)(y-l*Math.tan(pi/6)),(int)(x-l/2),(int)(y+l*Math.tan(pi/6)/2));
		g.drawLine((int)(300-300/2),(int)(300+300*Math.tan(pi/6)/2),(int)(300+300/2),(int)(300+300*Math.tan(pi/6)/2));
  		g.drawLine((int)(300+300/2),(int)(300+300*Math.tan(pi/6)/2),300,(int)(300-300*Math.tan(pi/6)));
  		g.drawLine(300,(int)(300-300*Math.tan(pi/6)),(int)(300-300/2),(int)(300+300*Math.tan(pi/6)/2));
              if( inti == 1 ){ //绘制第一级中点连成的三角形
    			l = l / 2;
    			g.drawLine((int)(x-l/2),(int)(y-l*Math.tan(pi/6)/2),(int)(x+l/2),(int)(y-l*Math.tan(pi/6)/2));
    			g.drawLine((int)(x+l/2),(int)(y-l*Math.tan(pi/6)/2),(int)(x),(int)(y+l*Math.tan(pi/6)));
			g.drawLine(x,(int)(y+l*Math.tan(pi/6)),(int)(x-l/2),(int)(y-l*Math.tan(pi/6)/2));
		}
		else{
			sierpinski(x,y,l,inti);    //如果不是第一级,则调用sierpinski三角形递归过程
		}

  		
	}
	
	public void mousePressed(MouseEvent e){
		inti++;
              
		repaint();
	}
	
	public void sierpinski(int x,int y,int l,int i){
		Graphics g=getGraphics();
 		if( i == 1){
			g.drawLine((int)(x-l/2),(int)(y-l*Math.tan(pi/6)/2),(int)(x+l/2),(int)(y-l*Math.tan(pi/6)/2));
			g.drawLine((int)(x+l/2),(int)(y-l*Math.tan(pi/6)/2),(int)(x),(int)(y+l*Math.tan(pi/6)));
			g.drawLine(x,(int)(y+l*Math.tan(pi/6)),(int)(x-l/2),(int)(y-l*Math.tan(pi/6)/2));
		}
		else{
   			//递归调用
    			for(int j = 0;j<= 2;j++){
				sierpinski((int)(x+Math.sqrt(3)*l*Math.sin(j*2*pi/3)/3),(int)(y-Math.sqrt(3)*l*Math.cos(j*2*pi/3)/3),(int)(l/2),i-1);
    			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -