分型技术可以模拟过程构造一些复杂的图形。分形技术利用整体与局部的无限自相似性,通过改变少量的参数,递归调用某一过程,到达构造非规则图形的目的。
1.Sierpinski构造三角形
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.JFrame;
public class Sierpinski extends JFrame{
public static final int WINDOW_SIZE=512;
public static final int THERSHOLD=8;
public static int p1_x,p1_y,p2_x,p2_y,p3_x,p3_y;
public Sierpinski()
{
super("Sierpinski");
setSize(WINDOW_SIZE,WINDOW_SIZE);
p1_x=(int)getSize().getWidth()/2;
p1_y=40;
p2_x=20;
p2_y=(int)getSize().getHeight()-20;
p3_x=(int)getSize().getWidth()-20;
p3_y=(int)getSize().getHeight()-20;
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public Point getMiddle(Point p1,Point p2)
{
return new Point((int)(p1.getX()+p2.getX())/2,(int)(p1.getY()+p2.getY())/2);
}
public void paint(Graphics g)
{
super.paint(g);
sierpinski_draw(new Point(p1_x,p1_y),new Point(p2_x,p2_y),new Point(p3_x,p3_y));
}
public void sierpinski_draw(Point p1 , Point p2 , Point p3)
{
if(p1.distance(p2)<THERSHOLD&&p2.distance(p3)<THERSHOLD&&p1.distance(p3)<THERSHOLD)
return;
Graphics g=getGraphics();
g.drawLine((int)p1.x,(int)p1.y,(int)p2.x,(int)p2.y);
g.drawLine((int)p2.x,(int)p2.y,(int)p3.x,(int)p3.y);
g.drawLine((int)p1.x,(int)p1.y,(int)p3.x,(int)p3.y);
Point m12=getMiddle(p1,p2);
Point m23=getMiddle(p2,p3);
Point m13=getMiddle(p1,p3);
sierpinski_draw(p1,m12,m13);
sierpinski_draw(p2,m23,m12);
sierpinski_draw(p3,m13,m23);
}
public static void main(String[] str)
{
new Sierpinski();
}
}