import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class JuliaSet {
public double dt=2;//初始距离为2;
public double x=250;//原点像素x坐标
public double y=250;//原点像素y坐标
public boolean fa=false;
public JuliaSet() {
JFrame frame=new JFrame("Julia");
frame.setSize(800, 530);
frame.setLocation(300,50);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
//JPanel panel1=new myDrawPanel();
JPanel panel1=new JPanel();
panel1.setBounds(0, 0, 500, 500);
JPanel panel2=new JPanel();
panel2.setBackground(new Color(100,225,225));
panel2.setLocation(500, 0);
panel2.setSize(new Dimension(300, 500));
//panel2.setBounds(500, 0, 300, 500);
JLabel fun_label = new JLabel("Z(n+1)=Z(n)^i+C");
fun_label.setFont(new Font("雅黑", Font.PLAIN, 35));
JCheckBoxMenuItem boxMenu = new JCheckBoxMenuItem();
String str[]= {"曼德勃罗集 (Mandelbrot Set)","朱利亚集 (Julia Set)"};
JComboBox cBox = new JComboBox(str);
JLabel label1 = new JLabel("次方值i:");
JTextField text1=new JTextField(18);
text1.setText("2");
JLabel label2 = new JLabel("Z值实部:");
JTextField text2=new JTextField(18);
text2.setText("0.0");
JLabel label3 = new JLabel("Z值虚部:");
JTextField text3=new JTextField(18);
text3.setText("0.0");
JLabel label4 = new JLabel("C值实部:");
JTextField text4=new JTextField(18);
JLabel label5 = new JLabel("C值虚部:");
JTextField text5=new JTextField(18);
JButton button = new JButton("画图");
button.setPreferredSize(new Dimension(200, 30));
JTextArea text6=new JTextArea("☝☝☝☝☝点击画图☝☝☝☝☝");
//text6.setPreferredSize(new Dimension(100, 200));
text6.setBackground(new Color(100,225,225));
text6.setEditable(false);
text4.setEditable(false);
text5.setEditable(false);
panel2.add(fun_label);
panel2.add(label1);
panel2.add(text1);
panel2.add(label2);
panel2.add(text2);
panel2.add(label3);
panel2.add(text3);
panel2.add(label4);
panel2.add(text4);
panel2.add(label5);
panel2.add(text5);
panel2.add(cBox);
panel2.add(button);
panel2.add(text6);
frame.add(panel1);
frame.add(panel2);
//container.add(panel2);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int n=0;
double zreal = 0,zimag = 0,creal = 0,cimag = 0;
if (!text1.getText().equals("")) {
n=Integer.parseInt(text1.getText());
}
if(!text2.getText().equals("")) {
zreal=Double.parseDouble(text2.getText());
}
if(!text3.getText().equals("")) {
zimag=Double.parseDouble(text3.getText());
}
if(!text4.getText().equals("")) {
creal=Double.parseDouble(text4.getText());
}
if(!text5.getText().equals("")) {
cimag=Double.parseDouble(text5.getText());
}
dt=2;
x=250;
y=250;
draw(panel1,cBox,zreal,zimag,creal,cimag,n,dt,x,y);//2是距离 ,(250,250)原点的像素坐标
text6.setText("图片中心位置的复数值:\n实部的值:"+0.0+"\n虚部的值:"+0.0+
"\n实部的范围:\n("+-2+","+2+")\n虚部的范围:\n("+
-2+","+2+")");
fa=true;
}
});
cBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
String string=(String)cBox.getSelectedItem();
if(string.equals("曼德勃罗集 (Mandelbrot Set)")) {
text1.setText("2");
text2.setText("0.0");
text3.setText("0.0");
text4.setText("");
text5.setText("");
text2.setEditable(true);
text3.setEditable(true);
text4.setEditable(false);
text5.setEditable(false);
}else if(string.equals("朱利亚集 (Julia Set)")){
text1.setText("2");
text2.setText("");
text3.setText("");
text4.setText("0.3");
text5.setText("0.5");
text2.setEditable(false);
text3.setEditable(false);
text4.setEditable(true);
text5.setEditable(true);
}
}
});
panel1.addMouseListener(new MouseAdapter() {
int n=0;
double zreal = 0,zimag = 0,creal = 0,cimag = 0;
double x_r=0,y_r=0;
//double x,y;
//public double dt=2;//初始距离为2;
public void mouseClicked(MouseEvent e) {
if(fa) {
if (!text1.getText().equals("")) {
n=Integer.parseInt(text1.getText());
}
if(!text2.getText().equals("")) {
zreal=Double.parseDouble(text2.getText());
}
if(!text3.getText().equals("")) {
zimag=Double.parseDouble(text3.getText());
}
if(!text4.getText().equals("")) {
creal=Double.parseDouble(text4.getText());
}
if(!text5.getText().equals("")) {
cimag=Double.parseDouble(text5.getText());
}
x_r=(e.getX()-x)/(250/dt);
y_r=(y-e.getY())/(250/dt);
x=(e.getX()-x)*dt;
y=(y-e.getY())*dt;
if (e.getButton() == e.BUTTON1) { //左击
dt=dt/2;
x=250-(x/dt);
y=250+(y/dt);
draw(panel1,cBox,zreal,zimag,creal,cimag,n,dt,x,y);
}else if(e.getButton() == e.BUTTON3) { //右击
dt=dt*2;
x=250-(x/dt);
y=250+(y/dt);
draw(panel1,cBox,zreal,zimag,creal,cimag,n,dt,x,y);
}
text6.setText("图片中心位置的复数值:\n实部的值:"+x_r+"\n虚部的值:"+y_r+
"\n实部的范围:\n("+(x_r-dt)+","+(x_r+dt)+")\n虚部的范围:\n("+
(y_r-dt)+","+(y_r+dt)+")");
}else {
JOptionPane.showMessageDialog(null, "请先画图!", "警告", JOptionPane.WARNING_MESSAGE);
}
}
});
frame.setVisible(true);
//draw(panel1, cBox, 0.0, 0.0, 0.0, 0.0, 2, 2, 250, 250);
}
//画图函数
public void draw(JPanel panel, //。。。。
JComboBox cBox, //下拉框用了判断是哪种集合
double zreal, //z的实部
double zimag, //z的虚部
double creal, //c的实部
double cimag, //c的虚部
int n, // 次方数
double distance, // 二分之一屏幕代表的举例
double xx,double yy) { //原点的像素坐标
Graphics graphics=panel.getGraphics();
int color []= new int [3];
int i, j;
double weight = 512/256; //设置128个色,比较好看
int width_size=500; //屏幕像素个数
int height_size=500;
double orig_x = xx;//width_size/distance; //原点的像素x坐标
double orig_y = yy;//height_size/distance;//原点的像素y坐标
double we = width_size/(distance*2); //每个像素代表的真实值得倒数
int w = 0;
boolean flash=true;
if(cBox.getSelectedIndex()==0)
flash=true;
else
flash=false;
for (i = 0; i < height_size; i++) {
for (j = 0; j < width_size; j++) {
//变量iter表示迭代次数
double x=(double)(j - orig_x) / we;
double y=(double)(orig_y - i) / we;
int iter;
if(flash)
iter = iteration(zreal , zimag , x , y , n); //zreal,zimag,cral,cimag,pow_num
else
iter = iteration(x , y , creal , cimag , n);
color
用java实现画曼德勃罗集(Mandelbrot Set)及朱莉亚集(Julia Set)
5星 · 超过95%的资源 需积分: 50 57 浏览量
2019-04-14
22:31:50
上传
评论 1
收藏 14KB ZIP 举报
let15
- 粉丝: 0
- 资源: 1
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈