利用迭代分形绘制图形
一、创建好界面对象
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
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助