java 龙分型

package SRC;
//FractalFrame.java
import javax.swing.*;
import java.awt.*;

public class FractalFrame extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static Toolkit kit = Toolkit.getDefaultToolkit();
	public static Dimension screenSize = kit.getScreenSize();
	public static FractalFrame FF;
	public static JLabel JL = new JLabel("Recursion Time : ");
	public static JTextField JF = new JTextField("3",10);
	public static JButton JB = new JButton("START");
	public static JLabel jL = new JLabel("Unit length (unit : pixels) : ");
	public static JTextField jF = new JTextField("1",10);
	public static FractalPanel FP;
	public static JPanel JP = new JPanel();
	public static JScrollPane JSP = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
	
	public FractalFrame(int width,int height){
		super("Dragon fractal");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(width,height);
		int w = screenSize.width;
		int h = screenSize.height;
		setLocation((w - width) / 2,(h - height) / 2);
		setVisible(true);
	}
	
	public static void main(String[] args){
		FF = new FractalFrame(1500,1000);
		FP = new FractalPanel(1,3);		
		JB.addActionListener((e) -> {
			FP.setUnitLength(Integer.parseInt(jF.getText()));
			FP.setRecursionTime(Integer.parseInt(JF.getText()));
			FP.start();
		});
		JSP.getViewport().add(FP);
		JP.add(jL);
		JP.add(jF);
		JP.add(JL);
		JP.add(JF);
		JP.add(JB);
		FF.add(JSP,BorderLayout.CENTER);
		FF.add(JP,BorderLayout.SOUTH);
		FF.repaint();
	}
}
package SRC;
//FractalPanel.java
import java.awt.*;
import java.util.*;
import javax.swing.*;

public class FractalPanel extends JPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public Vector<Point> PointSet = new Vector<Point>();
	private int UnitLength,RecursionTime;
	public boolean DO = false;

	public FractalPanel(int UnitLength,int RecursionTime){
		super();
		PointSet.add(new Point(FractalFrame.FF.getWidth() / 2,FractalFrame.FF.getHeight() / 2));
		this.UnitLength = UnitLength;
		this.RecursionTime = RecursionTime;
	}
	@Override
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		if(DO) {
			ResetPointSet(RecursionTime);
			int Pointer = 0;
			while((Pointer + 2) <= (PointSet.size())) {
				Point p1 = PointSet.get(Pointer);
				Point p2  = PointSet.get(Pointer + 1);
				System.out.println("Pointer : " + Pointer);
				System.out.println("p1 : " + p1);
				System.out.println("p2 : " + p2);
				g.drawLine(p1.x,p1.y,p2.x,p2.y);
				Pointer ++;
			}
			DO = false;
		}	
	}
	private void ResetPointSet(int time){
		System.out.println("ResetPointSet()");
		if(time > 0) {
			if(PointSet.size() != 1){
				Vector<Point> PrimevalPointSet = new Vector<Point>();
				for(Point PrimevalPoint : PointSet){
					PrimevalPointSet.add(PrimevalPoint);
				}
				Collections.reverse(PrimevalPointSet);
				Point RotateOrigin = PrimevalPointSet.get(0);
				System.out.println("RotateOrigin : " + RotateOrigin);						
				int Indicator = 0;
				for(Point PrimevalPoint : PrimevalPointSet){
					Point ModifiedPoint = new Point(RotateOrigin.x - RotateOrigin.y + PrimevalPoint.y
			   				 ,RotateOrigin.y + RotateOrigin.x - PrimevalPoint.x);		
					if(Indicator != (PrimevalPointSet.size())) {
						PointSet.add(PrimevalPointSet.size() +Indicator,ModifiedPoint);
						System.out.println("ModifiedPoint : " + ModifiedPoint);
						Indicator ++;
					}
				}
				System.out.println("PointSet : " + PointSet);
				System.out.println("PointSet Size: " + PointSet.size());
			}else{
				Point o = PointSet.get(PointSet.size() - 1);
				PointSet.add(new Point(o.x,o.y - UnitLength));
				System.out.println("PointSet : " + PointSet);
				System.out.println("new Point : " + new Point(o.x,o.y - UnitLength));
			}
			time --;
			ResetPointSet(time);
		}
	}
	public void setRecursionTime(int RecursionTime) {
		this.RecursionTime = RecursionTime;	
	}
	public void setUnitLength(int UnitLength) {
		this.UnitLength = UnitLength;
	}
	public void start() {
		PointSet.removeAllElements();
		PointSet.add(new Point(FractalFrame.FF.getWidth() / 2,FractalFrame.FF.getHeight() / 2));
		DO = true;
		repaint();	
	}
}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值