글
시에르핀스키 삼각형
아래는 시에르핀스키 삼각형을 구현하는 프로세싱 애니메이션입니다. 잘 지켜보시면 삼각형의 형태가 나타날 것입니다. 그리고 애니메이션이 되고 있는 그림을 마우스로 클릭하시면 새로 그리기 시작합니다.
먼저 다음과 같이 세점 A, B, C와 그 안의 임의의 점 D가 있다고 가정해 봅시다.
이제 주사위를 던저 1이나 2가 나오면 A와 D의 중점에 점을 찍고, 3이나 4가 나오면 B와 D사이의 중점에 점을 찍고. 5나 6이 나오면 C와 D사이에 점을 찍습니다. 그리고 새롭게 찍힌 점을 다시 출발점으로 삼고 다시 주사위를 계속 던저 같은 과정을 반복합니다. 그러면 아래와 같은 그림을 얻을 수 있습니다.
아래는 1000번 정도 찍었을 때의 모습입니다.
아래는 5000번 정도 찍었을 때의 모습입니다.
아래는 10000번 정도 찍었을 때의 모습이니다.
이렇듯이 주사위를 던지는 횟수를 점점 더 늘려 갈수록 패턴은 더욱 뚜렸해지는데, 이런 프랙탈 이미지를 '시에르핀스키 삼각형'이라고 합니다.
바츌라프 시에르핀스키(Waclaw Sierpinski)(1882-1969)는 폴란드 수학자로 집합론에서 뛰어난 논문을 많이 남겼습니다. 그는 1915년에 시에르핀스키 삼각형을 발견했는데, 이것은 훗날 말덴브로가 프랙탈을 연구하는데 많은 영감을 주었습니다. 시에르핀스키 삼각형은 프랙탈의 단순한 형태라고 할 수 있습니다.
시에르핀스키 삼각형을 구현하는 프로세싱 코드는 다음과 같습니다. 여기서는 주사위를 던지는 대신에 1, 2, 3중에서 난수를 뽑아 점을 찍게 했습니다. 아래 소스를 복사하셔서 프로세싱에 붙여 넣으면 작동이 됩니다.
int x1, y1, x2, y2, x3, y3;
int x, y;
int dice;
void setup() {
size(400, 400);
background(255);
stroke(0);
x1 = width/2;
y1 = 0;
x2 = 0;
y2 = height;
x3 = width;
y3 = height;
x = width/2;
y = height/2;
point(x, y);
}
void draw() {
dice = int(random(0, 4));
if (dice == 1) {
x = (x + x1)/2;
y = (y + y1)/2;
} else if (dice == 2) {
x = (x + x2)/2;
y = (y + y2)/2;
} else if (dice == 3) {
x = (x + x3)/2;
y = (y + y3)/2;
}
point(x, y);
}
void mousePressed() {
background(255);
}
[새길]
[이 글이 마음에 드시면 아래 손가락을 한번 꾹 눌러 주세요...^_^]
'과학이야기 > 물리학' 카테고리의 다른 글
전기장 그리기 계산 (0) | 2013.12.03 |
---|---|
프랙탈 나무 (0) | 2013.11.27 |
회전된 좌표계에서 본 벡터의 표현 (0) | 2013.05.07 |
2차원 충돌 후의 물체의 속력 계산 (1) | 2013.04.10 |
[Processing] 기체분자의 확산(2) (0) | 2013.04.09 |