프랙탈 모양 그리기 (Koch 곡선)
Koch (코흐) 곡선
어쨌든 Koch 곡선은 이러한 "자기 유사성"을 가진 도형입니다.
그리는 방법의 단계는 다음과 같습니다.
수작업은 물론, 프로그램에서도 무한대로 반복할 수 없기 때문에, 상기 스텝을 8까지 반복한 결과입니다.
거북이 그래픽을 사용한 드로잉 코드
이전에 그린 기사 「프랙탈 도형 그리기(도구편)」에서 소개한 간이 터틀 그래픽 라이브러리의 코드 turtle.cxx를 이용해, koch 곡선을 그리는 코드를 이하에 소개합니다.
// kochmain.cxx
#include <stdio.h>
#include <math.h>
void pd();
void pu();
void rt(float th);
void lt(float th);
void fd(float len);
void bk(float len);
void koch(float len, int n) {
if(n > 0) {
koch(len/3.0, n-1);
lt(60.0);
koch(len/3.0, n-1);
rt(120.0);
koch(len/3.0, n-1);
lt(60.0);
koch(len/3.0, n-1);
} else {
fd(len);
}
}
int main(int argc, char **argv)
{
pd();
rt(90.0);
koch(10.0, 6);
}
빌드, 실행은 아래에서.
$ g++ kochmain.cxx turtle.cxx -o kochmain
$ ./kochmain > tt.dat
그리기도 "프랙탈 도형 그리기(도구편)/그리기"과 마찬가지로 gnuplot을 사용합니다.
Koch Snow-flake
koch 곡선을 3개 조합해, 이하와 같은 그림을 그릴 수 있습니다.
Snow-flake(눈송이)나, Island(섬)라고 불리는 것 같습니다.
코드는 main을 아래와 같이 재기록하는 것으로 간단하게 구현할 수 있습니다.
int main(int argc, char **argv)
{
pd();
rt(90.0);
for(int i = 0; i < 3; i++) {
koch(10.0, 6);
rt(120.0);
}
}
koch "곡선]?
Koch 곡선은 "곡선"이라는 이름이 붙습니다. 그러나, 순서적으로도, 프로그램적으로도, 그려져 있는 것은 「직선」이기 때문인가, 뭔가 건에 떨어지지 않는 곳이 있습니다.
「無限にやったからといって曲線といって良い代物だろうか」
그리고. .
미분 불가능
아마도 일반적으로 우리가 알고있는 (상정하는) 곡선의 대부분은
"부드러운"
곡선이기 때문일지도 모릅니다.
이 말은, 수학의 말로 옮겨놓으면, 이 곡선상의 모든 곳이 「미분 가능」이라고 하는 것이 됩니다.
그다지 엄격한 이야기에 돌입할 생각은 없지만, 이것은 코치 곡선이 어떤 모양인지 어쨌든 상상할 수 있는 열쇠가 될 것이라고 생각합니다.
고교생 정도까지 배우는 2차 곡선이나 sin(x), cos(x)와 같은 함수로 그리는 곡선은 정의 영역의 범위에서 어떤 값을 가져와도 그 점에서 그 함수의 「기울기 '가 결정됩니다. 그러나 koch 곡선은 그렇지 않습니다.
이러한 성질은 프랙탈한 성질을 가진 도형이 흔히 가지는 것 같습니다.
프랙탈 차원
그리고 수학적 개념 "프랙탈 차원"의 관점에서 koch 곡선을 바라 보는 것도 재미 있다고 생각합니다. 프랙탈 차원이라고 하는 차원은, 통상 우리가 사용하는 0(점), 1(선), 2(면), 3(입체)라고 하는 「정수 차원」뿐만 아니라, 그 중간의 「비정수 차원」을 취급합니다. 예를 들어, koch 곡선의 프랙탈 차원은
1.2618595
라는 것입니다( Wikipedia 보다).
이번은 이상입니다.
Reference
이 문제에 관하여(프랙탈 모양 그리기 (Koch 곡선)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fujim2/items/897aef01478685882064
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// kochmain.cxx
#include <stdio.h>
#include <math.h>
void pd();
void pu();
void rt(float th);
void lt(float th);
void fd(float len);
void bk(float len);
void koch(float len, int n) {
if(n > 0) {
koch(len/3.0, n-1);
lt(60.0);
koch(len/3.0, n-1);
rt(120.0);
koch(len/3.0, n-1);
lt(60.0);
koch(len/3.0, n-1);
} else {
fd(len);
}
}
int main(int argc, char **argv)
{
pd();
rt(90.0);
koch(10.0, 6);
}
$ g++ kochmain.cxx turtle.cxx -o kochmain
$ ./kochmain > tt.dat
koch 곡선을 3개 조합해, 이하와 같은 그림을 그릴 수 있습니다.
Snow-flake(눈송이)나, Island(섬)라고 불리는 것 같습니다.
코드는 main을 아래와 같이 재기록하는 것으로 간단하게 구현할 수 있습니다.
int main(int argc, char **argv)
{
pd();
rt(90.0);
for(int i = 0; i < 3; i++) {
koch(10.0, 6);
rt(120.0);
}
}
koch "곡선]?
Koch 곡선은 "곡선"이라는 이름이 붙습니다. 그러나, 순서적으로도, 프로그램적으로도, 그려져 있는 것은 「직선」이기 때문인가, 뭔가 건에 떨어지지 않는 곳이 있습니다.
「無限にやったからといって曲線といって良い代物だろうか」
그리고. .
미분 불가능
아마도 일반적으로 우리가 알고있는 (상정하는) 곡선의 대부분은
"부드러운"
곡선이기 때문일지도 모릅니다.
이 말은, 수학의 말로 옮겨놓으면, 이 곡선상의 모든 곳이 「미분 가능」이라고 하는 것이 됩니다.
그다지 엄격한 이야기에 돌입할 생각은 없지만, 이것은 코치 곡선이 어떤 모양인지 어쨌든 상상할 수 있는 열쇠가 될 것이라고 생각합니다.
고교생 정도까지 배우는 2차 곡선이나 sin(x), cos(x)와 같은 함수로 그리는 곡선은 정의 영역의 범위에서 어떤 값을 가져와도 그 점에서 그 함수의 「기울기 '가 결정됩니다. 그러나 koch 곡선은 그렇지 않습니다.
이러한 성질은 프랙탈한 성질을 가진 도형이 흔히 가지는 것 같습니다.
프랙탈 차원
그리고 수학적 개념 "프랙탈 차원"의 관점에서 koch 곡선을 바라 보는 것도 재미 있다고 생각합니다. 프랙탈 차원이라고 하는 차원은, 통상 우리가 사용하는 0(점), 1(선), 2(면), 3(입체)라고 하는 「정수 차원」뿐만 아니라, 그 중간의 「비정수 차원」을 취급합니다. 예를 들어, koch 곡선의 프랙탈 차원은
1.2618595
라는 것입니다( Wikipedia 보다).
이번은 이상입니다.
Reference
이 문제에 관하여(프랙탈 모양 그리기 (Koch 곡선)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fujim2/items/897aef01478685882064
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
「無限にやったからといって曲線といって良い代物だろうか」
그리고 수학적 개념 "프랙탈 차원"의 관점에서 koch 곡선을 바라 보는 것도 재미 있다고 생각합니다. 프랙탈 차원이라고 하는 차원은, 통상 우리가 사용하는 0(점), 1(선), 2(면), 3(입체)라고 하는 「정수 차원」뿐만 아니라, 그 중간의 「비정수 차원」을 취급합니다. 예를 들어, koch 곡선의 프랙탈 차원은
1.2618595
라는 것입니다( Wikipedia 보다).
이번은 이상입니다.
Reference
이 문제에 관하여(프랙탈 모양 그리기 (Koch 곡선)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fujim2/items/897aef01478685882064텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)