迭代分形

利用迭代分形绘制图形

一、创建好界面对象

public class LoginUI {
public static void main(String[] args) {
	new LoginUI().showUI();
}

	
	
public void showUI() {

// 1、创建一个窗体对象
		javax.swing.JFrame jf = new javax.swing.JFrame();
		// 2、创建对象调用方法
		jf.setTitle("图形绘制");
		jf.setSize(800, 700);// 设置窗体大小 
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 窗体关闭示结束进程
		jf.setVisible(true); //窗体可视化

二、创建好鼠标监听器,加入鼠标监听器的五种方法

public class JiXianglistener implements MouseListener {
@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
	
		}
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

}

三、在界面中添加监听器并且添加绘图所需的Graphics类

public Graphics g;
Graphics g=jf.getGraphics();
		JiXianglistener ml = new JiXianglistener();
		jf.addMouseListener(ml);
		ml.g = g;

四、在鼠标释放方法中运用迭代和公式在界面上绘制出直线组

在这里插入图片描述

double  x=0, y=0; //先声明变量
double a=-2, b=-2 c=-1.2 d=2;

for(int i=0;i<10000;i++){
    //写出公式
	double tempx = Math.sin(a*y)-Math.cos(b*x);
	double tempy = Math.sin(c*x)-Math.cos(d*y);
	
	// x、y变量的迭代 
	x=tempx;
	y=tempy;
	
	// 将微小的x、y值放大 ,转型
	int px=(int)(tempx*100);
	int py=(int)(tempy*100);
	//绘制直线
	g.drawLine(px,py,px,py);
	}

五、对于多组变量利用二维数组并生成随机数实现迭代

以绘制枫叶为例:
The IFS equations are as follows

xn+1 = a xn + b yn + e
yn+1 = c xn + d yn + f

The parameter table:
set 1 set 2 set 3 set 4
a 0.1400 0.4300 0.4500 0.4900
b 0.0100 0.5200 -0.4900 0.0000
c 0.0000 -0.4500 0.4700 0.0000
d 0.5100 0.5000 0.4700 0.5100
e -0.0800 1.4900 -1.6200 0.0200
f -1.3100 -0.7500 -0.7400 1.6200

//声明变量
double x = 0,y = 0;
	double[] a = { 0.1400 ,  0.4300  ,  0.4500  ,  0.4900};
	double[] b = { 0.0100  ,  0.5200  , -0.4900   , 0.0000};
    double[] c = { 0.0000  , -0.4500  ,  0.4700  ,  0.0000};
    double[] d = { 0.5100  ,  0.5000 ,  0.4700  ,  0.5100};
    double[] el = {-0.0800  ,  1.4900  , -1.6200 ,   0.0200};
    double[] f = {-1.3100  , -0.7500 ,  -0.7400  ,  1.6200};
//创建随机数对象
 Random random = new Random();
 for (int i = 0; i < 10000000; i++) {
//随机数在0到3里随机获得
int ran = random.nextInt(4);
//将随机数添加进公式
			double tempx  = a[ran] * x + b[ran] * y + el[ran];
			double tempy = c[ran] * x + d[ran] * y + f[ran];
			x = tempx;
			y = tempy;
			
			int px = (int)(tempx * 100) + 400;
			int py = (int)(tempy * 100) + 350;
//设置颜色的两种方法
			Color color = new Color(255,255,255,10);
//			g.setColor(Color.green);
			g.setColor(color);
			g.drawLine(750-px, 700-py,750 -px,700-py);

}
    

枫叶绘制完整代码如下:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

public class JiXianglistener implements MouseListener {

	public Graphics g;
	
	double x = 0,y = 0;
	double[] a = { 0.1400 ,  0.4300  ,  0.4500  ,  0.4900};
	double[] b = { 0.0100  ,  0.5200  , -0.4900   , 0.0000};
    double[] c = { 0.0000  , -0.4500  ,  0.4700  ,  0.0000};
    double[] d = { 0.5100  ,  0.5000 ,  0.4700  ,  0.5100};
    double[] el = {-0.0800  ,  1.4900  , -1.6200 ,   0.0200};
    double[] f = {-1.3100  , -0.7500 ,  -0.7400  ,  1.6200};
    

   
    Random random = new Random();
    
    
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println(" 按下");
		g.setColor(Color.BLACK);
		g.fillRect(0, 0, 800, 700);
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		for (int i = 0; i < 10000000; i++) {
			 
			    int ran = random.nextInt(4);
			double tempx  = a[ran] * x + b[ran] * y + el[ran];
			double tempy = c[ran] * x + d[ran] * y + f[ran];
			x = tempx;
			y = tempy;
			
			int px = (int)(tempx * 100) + 400;
			int py = (int)(tempy * 100) + 350;
			Color color = new Color(255,255,255,10);
//			g.setColor(Color.green);
			g.setColor(color);
			g.drawLine(750-px, 700-py,750 -px,700-py);
		}
		
		
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

}

以上就是本文的全部内容,希望对大家的学习有所帮助

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值