⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peano1.java

📁 分形算法的Java程序
💻 JAVA
字号:
//Hilbert-Peano曲线(分形频道:fractal.cn)2004
import java.awt.*;
import javax.swing.*;
import java.lang.*;

public class Peano1 extends JApplet{
      
    final Color fg = Color.red;
    
    int n = 5, s;                                //控制递归深度
    double x1 = 1, y1 = 1, 
           x2 = 200, y2 = 200;
    boolean str = true;                          //控制第一条线的绘制
    public static final int STARTX = 103, 
                            STARTY = 196;        //图形的首点

    int startDrawX,startDrawY;
 
 public void frameSet(){
   Peano1 shapes = new Peano1();
   JFrame fra = new JFrame("welcome");
   fra.getContentPane().add(shapes,BorderLayout.CENTER);
         fra.setSize(new Dimension(550,500));
          fra.setVisible(true);
 }

  public static void main(String args[]){
    new Peano1().frameSet();
  }

// ////////////////////////////////////////////////////////////

  public void paint(Graphics g){
   // setBackground(fg);
    g.setColor(Color.red);
    drawShapes(g,n,s,x1,y1,x2,y2);
  }

  public void drawShapes(Graphics g,int n, int s,
                             double x1, double y1, 
                             double x2, double y2){

         double dx = x2 - x1,
                dy = y2 - y1;
         
      
     if(n == 1){
  
        lineTo(g, (int) (100 + Math.round(x1+dx/4)),(int) (200 - Math.round(y1+dy/4)));
        lineTo(g, (int) (100 + Math.round(x1+(2-s)*dx/4)), (int) (200 - Math.round(y1+(2+s)*dy/4)));
        lineTo(g, (int) (100 + Math.round(x1+3*dx/4)), (int) (200 - Math.round(y1+3*dy/4)));
        lineTo(g, (int) (100 + Math.round(x1+(2+s)*dx/4)),(int) (200 - Math.round(y1+(2-s)*dy/4)));
     
     }else{
        if(s>0){
           drawShapes(g,n-1,-1,x1,y1,(x1+x2)/2,(y1+y2)/2);
           drawShapes(g,n-1,1,x1,(y1+y2)/2,(x1+x2)/2,y2);
           drawShapes(g,n-1,1,(x1+x2)/2,(y1+y2)/2,x2,y2);
           drawShapes(g,n-1,-1,x2,(y1+y2)/2,(x1+x2)/2,y1); 
        }else{
            drawShapes(g,n-1,1,x1,y1,(x1+x2)/2,(y1+y2)/2);
            drawShapes(g,n-1,-1,(x1+x2)/2,y1,x2,(y1+y2)/2);
            drawShapes(g,n-1,-1,(x1+x2)/2,(y1+y2)/2,x2,y2);
            drawShapes(g,n-1,1,(x1+x2)/2,y2,x1,(y1+y2)/2);
        }
     }
  }
  
 public void lineTo(Graphics g, int endX, int endY){

   if(str){                                       // Draw the first line of the shape.
        g.drawLine(STARTX,STARTY,endX,endY);
     
        this.str = false;
          
   }else{   
    g.drawLine(startDrawX, startDrawY, endX, endY);
    }

   startDrawX = endX;
   startDrawY = endY;
 }
 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -