Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 319|回复: 0

[算法学习]java经典算法一例

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-5 00:02:35 | 显示全部楼层 |阅读模式
    1.      [img]http://img.javaxxz.com/2014/11/5/000234953.gif[/img]
    2. import java.awt.*;
    3. import java.applet.*;
    4. import java.awt.event.*;
    5. public class C extends Applet implements MouseListener, MouseMotionListener{
    6.   private final int MAX = 256;
    7.   private final double SX = -1.0; // 实部的最小值
    8.   private final double SY = -1.5; // 虚部的最小值
    9.   private final double EX = 2.0; // 实部的最大值
    10.   private final double EY = 1.5; // 虚部的最大值
    11.   private static int picX, picY, xs, ys, xe, ye;
    12.   private static double x1, y1, x2, y2, p, q,xb,yb;
    13.   private static boolean action, rechteck, fertig, stopit;
    14.   private static float xy;
    15.   private Image bild;
    16.   private Graphics g1;
    17.   private Cursor c1, c2;
    18. public void init() // 初始化所有实例
    19. {
    20.   p = -0.46;
    21.   q = 0.57;
    22.   fertig = false;
    23.   addMouseListener(this);
    24.   addMouseMotionListener(this);
    25.   c1 = new Cursor(Cursor.WAIT_CURSOR);
    26.   c2 = new Cursor(Cursor.CROSSHAIR_CURSOR);
    27.   picX = getSize().width;
    28.   picY = getSize().height;
    29.   xy = (float)picX / (float)picY;
    30.   bild = createImage(picX, picY);
    31.   g1 = bild.getGraphics();
    32.   fertig = true;
    33. }
    复制代码

      
      

    1. public void destroy() // 删除所有实例
    2. {
    3.   if (fertig){
    4.    removeMouseListener(this);
    5.    removeMouseMotionListener(this);
    6.    bild = null;
    7.    g1 = null;
    8.    c1 = null;
    9.    c2 = null;
    10.    System.gc();
    11.   }
    12. }
    13. public void start(){
    14. action = false;
    15. rechteck = false;
    16. stopit = false;
    17. startwerte();
    18. xb = (x2 - x1) / (double)picX;
    19. yb = (y2 - y1) / (double)picY;
    20. julia();
    21. }

    22. public void stop(){
    23. }
    24. public void paint(Graphics g)
    25. {
    26.   update(g);
    27. }
    28. public void update(Graphics g)
    29. {
    30.   g.drawImage(bild, 0, 0, this);
    31.   if (rechteck){
    32.     g.setColor(Color.white);
    33.     if (xs < xe){
    34.       if (ys < ye) g.drawRect(xs, ys, (xe - xs), (ye - ys));
    35.       else g.drawRect(xs, ye, (xe - xs), (ys - ye));
    36.     }else{
    37.       if (ys < ye) g.drawRect(xe, ys, (xs - xe), (ye - ys));
    38.       else g.drawRect(xe, ye, (xs - xe), (ys - ye));
    39.     }
    40.   }
    41. }
    42. private void julia() // 计算所有的点
    43. {
    44.   int x, y;
    45.   float h, b, alt = 0.0f;
    46.   action = false;
    47.   setCursor(c1);
    48.   showStatus("正在计算julia集,请等待...");
    49.    p = -0.46;
    50.    q = 0.57;
    51.    for (x = 0; x < picX; x+=2) {
    52.     for (y = 0; y < picY; y++){
    53.       h = punktfarbe(x1 + xb * (double)x, y1 + yb * (double)y,p,q); // 颜色值
    54.       if (h != alt){
    55.        b = 1.0f - h * h;
    56.        g1.setColor(Color.getHSBColor( h,1,b));
    57.        alt = h;
    58.       }
    59.       g1.drawLine(x, y, x + 1, y);
    60.    }
    61.      showStatus( "At " + x + " of " + picX );
    62.    if (stopit) x = picX;
    63. }
    64. if (stopit) {
    65.   showStatus("Aborted");
    66.   stopit = false;
    67. } else {
    68.   showStatus("julia集已准备好,请用鼠标选择放大区域.");
    69. }
    70.   setCursor(c2);
    71.   action = true;
    72. }
    73. // 由迭代产生的0.0到1.0的颜色值
    74. private float punktfarbe(double x0, double y0,double p,double q)
    75. {
    76.    double r = 0.0, xk = 0, yk = 0;
    77.    int j = 0;
    78.   while ((j < MAX) && (r < 4.0)){
    79.     xk = x0 * x0 - y0 * y0 + p;
    80.     yk = 2.0 * x0 * y0 + q;
    81.     j++;
    82.     r = yk * yk + xk * xk;
    83.     x0 = xk;
    84.     y0 = yk;
    85.    }
    86.   return (float)j / (float)MAX;
    87. }
    88. private void startwerte() // 重新开始值
    89. {
    90.   x1 = SX;
    91.   y1 = SY;
    92.   x2 = EX;
    93.   y2 = EY;
    94.   if ((float)((x2 - x1) / (y2 - y1)) != xy )
    95.     x1 = x2 - (y2 - y1) * (double)xy;
    96.   }
    97.   
    98. public void mousePressed(MouseEvent e)
    99. {
    100.   e.consume();
    101.   if (action){
    102.     xs = e.getX();
    103.     ys = e.getY();
    104.   }
    105. }
    106. public void mouseReleased(MouseEvent e)
    107. {
    108.   int z, w;
    109.   e.consume();
    110.   if (action){
    111.     xe = e.getX();
    112.     ye = e.getY();
    113.     if (xs > xe){
    114.       z = xs;
    115.       xs = xe;
    116.       xe = z;
    117.     }
    118.    if (ys > ye){
    119.     z = ys;
    120.     ys = ye;
    121.     ye = z;
    122.    }
    123.    w = (xe - xs);
    124.    z = (ye - ys);
    125.    if ((w < 2) && (z < 2)) startwerte();
    126.    else{
    127.     if (((float)w > (float)z * xy)) ye = (int)((float)ys + (float)w / xy);
    128.     else xe = (int)((float)xs + (float)z * xy);
    129.     x2 = x1 + xb* (double)xe;
    130.     y2 = y1 + yb * (double)ye;
    131.     x1 += xb * (double)xs;
    132.     y1 += yb * (double)ys;
    133.    }
    134.    xb = (x2 - x1) / (double)picX;
    135.    yb = (y2 - y1) / (double)picY;
    136.    julia();
    137.    rechteck = false;
    138.    repaint();
    139.   } else {
    140.    stopit = true;
    141.   }
    142. }
    143. public void mouseEntered(MouseEvent e)
    144. {
    145. }
    146. public void mouseExited(MouseEvent e)
    147. {
    148. }
    149. public void mouseClicked(MouseEvent e)
    150. {
    151. }
    152. public void mouseDragged(MouseEvent e)
    153. {
    154.   e.consume();
    155.   if (action){
    156.     xe = e.getX();
    157.     ye = e.getY();
    158.     rechteck = true;
    159.     repaint();
    160.    }
    161. }
    162. public void mouseMoved(MouseEvent e)
    163. {
    164. }
    165. }
    复制代码



       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/5/000235000.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 13:03 , Processed in 0.345113 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表