자바 의 분 형 도 몇 가지 방법 에 대한 상세 한 설명

2726 단어 Java분 형
자바 분 형
자바 의 분 형 은 주로 몇 가지 가 있다.
1.클 리 퍼 드 와 유사 한 분 형.이러한 분 형의 특징 은 분 형의 초기 좌 표 는(0,0)이 고 초기 좌 표를 통 해 대량의 교 체 를 거 쳐 일련의 점 을 얻 고 얻 은 점 에 따라 분 형 곡선 을 그 리 는 것 이다.이런 분 형의 매개 변 수 는 유한 해서 간단하게 실현 할 수 있다.
2.IFS fern 과 같은 분 형.이러한 분 형 은 이전 분 형 보다 더 많은 파 라 메 터 를 가지 고 있 습 니 다.주의해 야 할 것 은 IFS fern 분 형의 매개 변수 목록 에 P 값 이 있 습 니 다.이 값 은 각 그룹의 서로 다른 매개 변수 가 나타 날 확률 을 나타 내 는데 이 값 이 사용 되 지 않 으 면 원 하 는 도형 을 얻 을 수 없습니다.
3.Mandelbrot 와 같은 분 형.이런 분 형 은 복수 의 지식 과 시간 탈출 알고리즘 에 관련된다.본질 적 으로 복 평면 위의 일련의 점 의 집합 이다.시간 탈출 알고리즘 으로 점 이 집합 안에 있 는 지 확인 하고 일련의 점 을 얻어 이런 점 에 따라 도형 을 그린다.
4.L-System Sticks 와 같은 분 형.이러한 분 형 은 모 꼬치 와 변천 하 는 규칙 을 정의 하고 서로 다른 모 꼬치 와 변천 규칙 의 점 을 통 해 도형 을 그 려 야 한다.변천 규칙 과 모 열 등의 이 해 는 어렵 지 않 고 주로 좌표 간 의 변환 과 관련 되 어 계산 하기 어렵다.
다음은 Mandelbrot 분 형 에 관 한 코드 입 니 다.

/**
 *    
 * @author CBS
 */
public class Complex {
  
  public double r;
  public double i;
  
  public Complex(double real,double image){
    this.r=real;
    this.i=image;
  }
  //     
  public double modulus(){
    return Math.sqrt(r*r+i*i);
  }
  //     
  public Complex add(Complex z){
    double addr=r+z.r;
    double addi=i+z.i;
    return new Complex(addr,addi);
  }
  //     
  public Complex mul(Complex z){
    double mulr=r*z.r-i*z.i;
    double muli=i*z.r+r*z.i;
    return new Complex(mulr,muli);
  }
}

//            ,      
  public int mand(Complex z, int maxIte) {
    Complex curComp = new Complex(0, 0);
    for (int i = 0; i < maxIte; i++) {
      if (curComp.modulus() > 2)
        return i;
      curComp = curComp.mul(curComp).add(z);
    }
    return maxIte;
  }


//      
  public void drawMand(Complex z, double scale, int MaxIte) {
    double pixUnit = 3 / (1080 * scale);
    double startx = z.r - 1080 * pixUnit / 2;
    double starty = z.i - 720 * pixUnit / 2;

    for (int i = 0; i < 1080; i++) {
      for (int j = 0; j < 720; j++) {
        double x0 = startx + i * pixUnit;
        double y0 = starty + j * pixUnit;
        Complex curComplex = new Complex(x0, y0);
        int time = mand(curComplex, MaxIte);
        if (time == MaxIte) {
          double x = x0 * 150 + 500;//       
          double y = y0 * 150 + 500;
          g.drawLine((int) x, (int) y, (int) x, (int) y);
        }
      }
    }
  }

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기