TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
- [img]http://img.javaxxz.com/2014/11/5/000234953.gif[/img]
- import java.awt.*;
- import java.applet.*;
- import java.awt.event.*;
- public class C extends Applet implements MouseListener, MouseMotionListener{
- private final int MAX = 256;
- private final double SX = -1.0; // 实部的最小值
- private final double SY = -1.5; // 虚部的最小值
- private final double EX = 2.0; // 实部的最大值
- private final double EY = 1.5; // 虚部的最大值
- private static int picX, picY, xs, ys, xe, ye;
- private static double x1, y1, x2, y2, p, q,xb,yb;
- private static boolean action, rechteck, fertig, stopit;
- private static float xy;
- private Image bild;
- private Graphics g1;
- private Cursor c1, c2;
- public void init() // 初始化所有实例
- {
- p = -0.46;
- q = 0.57;
- fertig = false;
- addMouseListener(this);
- addMouseMotionListener(this);
- c1 = new Cursor(Cursor.WAIT_CURSOR);
- c2 = new Cursor(Cursor.CROSSHAIR_CURSOR);
- picX = getSize().width;
- picY = getSize().height;
- xy = (float)picX / (float)picY;
- bild = createImage(picX, picY);
- g1 = bild.getGraphics();
- fertig = true;
- }
复制代码
- public void destroy() // 删除所有实例
- {
- if (fertig){
- removeMouseListener(this);
- removeMouseMotionListener(this);
- bild = null;
- g1 = null;
- c1 = null;
- c2 = null;
- System.gc();
- }
- }
- public void start(){
- action = false;
- rechteck = false;
- stopit = false;
- startwerte();
- xb = (x2 - x1) / (double)picX;
- yb = (y2 - y1) / (double)picY;
- julia();
- }
- public void stop(){
- }
- public void paint(Graphics g)
- {
- update(g);
- }
- public void update(Graphics g)
- {
- g.drawImage(bild, 0, 0, this);
- if (rechteck){
- g.setColor(Color.white);
- if (xs < xe){
- if (ys < ye) g.drawRect(xs, ys, (xe - xs), (ye - ys));
- else g.drawRect(xs, ye, (xe - xs), (ys - ye));
- }else{
- if (ys < ye) g.drawRect(xe, ys, (xs - xe), (ye - ys));
- else g.drawRect(xe, ye, (xs - xe), (ys - ye));
- }
- }
- }
- private void julia() // 计算所有的点
- {
- int x, y;
- float h, b, alt = 0.0f;
- action = false;
- setCursor(c1);
- showStatus("正在计算julia集,请等待...");
- p = -0.46;
- q = 0.57;
- for (x = 0; x < picX; x+=2) {
- for (y = 0; y < picY; y++){
- h = punktfarbe(x1 + xb * (double)x, y1 + yb * (double)y,p,q); // 颜色值
- if (h != alt){
- b = 1.0f - h * h;
- g1.setColor(Color.getHSBColor( h,1,b));
- alt = h;
- }
- g1.drawLine(x, y, x + 1, y);
- }
- showStatus( "At " + x + " of " + picX );
- if (stopit) x = picX;
- }
- if (stopit) {
- showStatus("Aborted");
- stopit = false;
- } else {
- showStatus("julia集已准备好,请用鼠标选择放大区域.");
- }
- setCursor(c2);
- action = true;
- }
- // 由迭代产生的0.0到1.0的颜色值
- private float punktfarbe(double x0, double y0,double p,double q)
- {
- double r = 0.0, xk = 0, yk = 0;
- int j = 0;
- while ((j < MAX) && (r < 4.0)){
- xk = x0 * x0 - y0 * y0 + p;
- yk = 2.0 * x0 * y0 + q;
- j++;
- r = yk * yk + xk * xk;
- x0 = xk;
- y0 = yk;
- }
- return (float)j / (float)MAX;
- }
- private void startwerte() // 重新开始值
- {
- x1 = SX;
- y1 = SY;
- x2 = EX;
- y2 = EY;
- if ((float)((x2 - x1) / (y2 - y1)) != xy )
- x1 = x2 - (y2 - y1) * (double)xy;
- }
-
- public void mousePressed(MouseEvent e)
- {
- e.consume();
- if (action){
- xs = e.getX();
- ys = e.getY();
- }
- }
- public void mouseReleased(MouseEvent e)
- {
- int z, w;
- e.consume();
- if (action){
- xe = e.getX();
- ye = e.getY();
- if (xs > xe){
- z = xs;
- xs = xe;
- xe = z;
- }
- if (ys > ye){
- z = ys;
- ys = ye;
- ye = z;
- }
- w = (xe - xs);
- z = (ye - ys);
- if ((w < 2) && (z < 2)) startwerte();
- else{
- if (((float)w > (float)z * xy)) ye = (int)((float)ys + (float)w / xy);
- else xe = (int)((float)xs + (float)z * xy);
- x2 = x1 + xb* (double)xe;
- y2 = y1 + yb * (double)ye;
- x1 += xb * (double)xs;
- y1 += yb * (double)ys;
- }
- xb = (x2 - x1) / (double)picX;
- yb = (y2 - y1) / (double)picY;
- julia();
- rechteck = false;
- repaint();
- } else {
- stopit = true;
- }
- }
- public void mouseEntered(MouseEvent e)
- {
- }
- public void mouseExited(MouseEvent e)
- {
- }
- public void mouseClicked(MouseEvent e)
- {
- }
- public void mouseDragged(MouseEvent e)
- {
- e.consume();
- if (action){
- xe = e.getX();
- ye = e.getY();
- rechteck = true;
- repaint();
- }
- }
- public void mouseMoved(MouseEvent e)
- {
- }
- }
复制代码
源码下载:http://file.javaxxz.com/2014/11/5/000235000.zip |
|