그래프 PIZiadas

그래프 PIZiadas

내 세계가 속한.

재귀 프랙탈: Curva은 드 코흐 [JAVA]

curva-de-koch-triangulo-completo-150우리라는 첫 번째 프로그램을 보았다 “DrawWorld” JAVA 프로그래밍 지향 그래픽에 우리를 소개. 이 프로그램 모듈은 우리가 먼저 확인하는 데 도움이되었습니다 재귀 프랙탈: 삼각형 Sierpisnki.

의 새로운 기본 재귀 프랙탈을 생성하는 기본적인 프로그램을 변경할 수: La Curva은 드 Kuch.

(참조 재귀 프랙탈이 생성 될 때)

그것은 직선에서 재귀 적으로 내장되어 프랙탈입니다. 양쪽이 3 등분으로 분할되고 중앙 세그먼트는 동일한 두을 형성함으로써 변경 될 60 상기 각도를 가진.

La Curva은 드 코흐, 또 서로 다른 절차에 의해 얻을 수있는 프랙탈은 눈송이로 알려진 IFS o 시스템 기능 반복되는 (에서 결정), 규칙 기반 시스템, 등등.

El 재귀 알고리즘 또한 미덕 밀접 도형과 관련된 개념을 표현하고있다: 무한대. 재귀의 본질은 곡선 자체의 매우 간단한 형태로 설명 할 수. 또 다른이 차례로 작은 규모에 패턴을 복사를 포함하는 우주 (양식 수축성) 무한히 반복되는 시퀀스에서.

코흐 곡선의 그룹에 속하는 자기 유사 프랙탈[1], 결정을 얻는 방법 되.

curva-de-koch-0

창시자

curva-de-koch-1

첫 번째 반복

프랙탈 차원

La 차원 개체의 개체를 배치 또는 분류 위상 개념은 메트릭 공간. 전체 크기와 공간의 직관적 인 개념은 소위 프랙탈 차원과 충돌, 실제 값을 가지고.

La 페 아노의 창녀 그것은 곡면을 작성 할 수있다. 두 가지 차원 따라서 데?, 하나의 불가사의.

프랙탈 차원은 조도와 연결된, 분열, 그것의, 그 때문에 큰 선물 더 거칠거나 고르지. 특성화 어떤 경우에 그것의 복잡성에 대한 정보를 제공.

코흐 곡선 비율이 S = 1 / 3, 와 N = 4, 따라서 그것의 프랙탈 차원은:

D = ln4/ln3 ~ 1.269

이러한 새로운 세그먼트들 각각이 다시 분할되는 경우 재귀 걸이 커브가 얻어진다

curva-de-koch-2

Curva은 코흐 매개 변수 N = 2

.

curva de koch para n=3

Curva은 드 코흐 파라 N = 3

curva de koch para n=4

Curva은 드 코흐 파라 N = 4

우리는 3 개의 라인을 사용하는 경우, 대신 개시제, 정삼각형 고전 눈송이 모양이 나타납니다, 그는 프랙탈이 구성에 알려진 이름.

curva-de-koch-triangulo

Curva은 드 코흐 : 눈송이

생성 알고리즘

함수를 정의 “paintRecursivo” (즉 메서드에서 호출 “페인트”) I 라인 또는 라인 삼각형의 포인트를 보냈다, 그리고 재귀. 함수는 새로운 세그먼트의 정점을 산출, 그림을 그림과는 다시 재귀를 줄이고 자신을 호출.

이렇게, 각 함수 호출 재귀 값이 감소된다, 그 때문에이 경우 제로 재귀 수행 완료.

수입 java.applet.Applet의;
수입 java.awt.Graphics에;
/**
* @ 저자 호세 후안 알리아
*/
공공의 클래스 MainApp 확장 애플릿 {
 더블 XP1 = 300;
 더블 yp1 = 300;
 더블 XP2 = 10;
 더블 yp2 = 300;
 더블 sin60 = Math.sin 이런(3.14/3.);
 INT nivel_de_recursividad = 6;

 공공의 MainApp() { }

 공공의 정적 인  (끈[] 인수) { }

 공공 무효 페인트(그래픽 g){
   paintRecursivo(지,nivel_de_recursividad,XP1, yp1, XP2, yp2);
 }

 개인 무효 paintRecursivo(그래픽 g, INT 나는, 더블 xp12, 더블 yp12, 더블 xp22, 더블 yp22 ) {
 더블 DX =(xp22-xp12)/3.;
 더블 두 =(yp22-yp12)/3.;
 더블 XX = xp12  3 * dx/2.-dy * sin60;
 더블 전년 동기 대비 = yp12  3 *의 DY / 2.   DX * sin60;
(나는<= 0){
      으로 g.drawLine((INT)xp12,(INT)yp12,(INT)xp22,(INT)yp22);
 }
 그렇지 않으면{
     paintRecursivo(지,I-1, xp12, yp12, xp12   DX,yp12   DY);
     paintRecursivo(지,I-1, xp12   DX,yp12   DY,XX,전년 동기 대비);
     paintRecursivo(지,I-1, XX,전년 동기 대비,xp22-DX,yp22-DY);
     paintRecursivo(지,I-1, xp22-DX,yp22-DY,xp22, yp22);
 }
} }
JAVA

Curso JAVA