Generative Algorithm 016

회전된 형태의 패턴 (Circular patterns)

모델링 방법과 관련되어 만들어낼 수 있는 패턴의 가능성은 끝이 없다고 할 수 있다. 아래 fig 3.38은 특정 기하체가 rotate된 형상으로 존재하고 있다. 같은 논리가 적용된 복수개의 커브가 있으므로, 그 논리의 일부를 소개하도록 하겠다.

회전된 형태를 가진 기하학적 패턴


기본이 되는 점들은 사실 하나의 원 위에 존재하는 여러 개의 점들이다. 이는 앞서 다룬 점들의 내용과 크게 다르지 않다. 이 원을 여러 축적에 맞춰 생성하고 이 점들을 솎아낸(cull) 뒤 그 점들을 지그재그로 연결하였을 뿐이다. 이것의 결과물로 별모양의 형상이 그려지게 된 것이다. 이러한 별모양의 형상을 여러 가지로 만들고 이것을 겹치면 위와 같은 형상이나오게 된다.

Sin 함수와 Cos 함수에 0에서 2pi 까지의 범위를 줌으로서 기본이 되는 원을 만든다. 두 <f2>에는 원의 기본 형상을 만들기 위한 Sin/Cos 함수와 이 원의 반지름을 결정하는 <number slide>를 연결하게 된다.

 

<number slider>를 이용하여 Sin/Cos 함수가 생성하는 원에 더 큰 반지름을 두 번째로 사용될 원을 그릴 수 있다. 그 결과는 두개의 점들의 data list로 나타나게 된다. 위 그림의 경우 <pt>의 이름을 1st_pt_set 과 2nd_pt_set 으로 바꿨다.

첫 번째 그리고 두 번째 원 위의 점들


이 점들을 솎아내기 위해 지난 예시와 같이 <cull pattern>와 <weave>를 적용하면 두 point list로 부터 각각 하나씩의 점을 순서대로 가지는 리스트를 만들어낼 수 있다. 하지만 이 예시에서는 algorithm의 <sort list>를 사용하였는데 이것이 최종 결과물을 만들어내는데 더욱 유용하기 때문이다. 이 점들은 index number를 기준으로 다시 배열<sorting>이 된다.

 

먼저 index number를 생성할 필요가 있다. 이를 위하여 실수가 사용되는 <range> 컴퍼넌트를 만들고 <series> 이용하여 정수의 list를 생성, 점들의 <index number>로 사용한다.

<range>의 매개변수 N은 또 다른 매개변수 D(domain;정의역)에 의해 정의되는 수의 범위를 몇 단계로 나눌지를 결정한다.[1] 이 <range> 내보내는 list의 길이 (즉 list 내 data의 개수)는 N+1과 같다. 이 N+1에 해당하는 수를 <series>의 C 값에 연결해주면 point list의 index number에 해당하는 값들을 얻을 수 있다.

점들에 index number의 list(0부터 시작하는 정수의 list)를 생성하였다.

이제 점과 점들의 index number 들을 이 전 예시들처럼 솎아내어야 한다. 이 후 <Merge> (Logic > Tree)를 이용하여 <series>와 두 대개의 <point>에서 <cull>을 통과하여 나오는 data list를 각각 하나로 합쳐준다.  이 <merge>를 통해 나오는 <series>는 같은 수들을 data로 가지고 있지만 그 순서가 달라지게 된다.[2] 이 data list를 key로 하여 <sort>를 통해 점들을 우리가 원하는 순서로 data list 내에서 재배열 해줄 수 있다.

점들의 index number가 아래 <merge>에서 나온 수의 순서와 일치하게 된다. 이제 점들을 <polyline>에 넣어주면 아래와 같은 그림이 그려지게 된다.

key에 사용된 datalist는 <sorting>의 전과 후에 위와 같다.

 

같은 logic을 이용하면 더욱 더 복잡한 geometry를 생성할 수 있다. 이 점들을 다시 어떻게 <cull>하고 연결하냐에 따라 수많은 결과물을 얻을 수 있을 것이다.

 

위와 같은 patten을 project 하여 얻을 수 있는 결과물은 위와 같다.

이번 장에서는 간단한 수학 함수들을 활용하여 data list를 조작하는 방법에 대해서 공부하였다. 이러한 것을 잘 활용하면 같은 결과를 얻는데 필요한 과정을 훨씬 짧게 만들 수 있다는 것을 명심하자.

[1] 역자 주: 이 경우 <domain>을 가져온 뒤 A에 0, B에 0을 넣으면 algorithm을 이해하는데 시각적으로 더욱 도움이 된다. 혹은 D를 우클릭 한 뒤 <set domain>을 선택하여 0 to 2.0 을 입력해줄 수 도 있다.

[2] 역자 주: <series>는 < 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18 >에 해당하는 data list를 내보내게 되고 이것은 위 true/false의 <cull>을 통하여 < 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 >로 아래 false/true 의 <cull>을 통하여 < 1, 3, 5, 7, 9, 11, 13, 15, 17 > 이 된다. 이 둘이 <merge>를 통하여 하나의 data list로 합쳐지면서 < 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 , 1, 3, 5, 7, 9, 11, 13, 15, 17 > 의 data list가 된다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s