Generative Algorithm 020

4_4_끌개(On Attractors)

 
“Attractor is a set of states of a dynamic physical system towards which that system tends to evolve, regardless of the starting conditions of the system. A point attractor is an attractor consisting of a single state. For example, a marble rolling in a smooth, rounded bowl will always come to rest at the lowest point, in the bottom center of the bowl; the final state of position and motionlessness is a point attractor.” (Dictionary.com/Science Dictionary)
 
끌개(Attractor)는 역학계의 개념의 하나로서 변수의 시(時)적 변화, 또는 위상공간상의 비동시성(asynchronism)의 표현으로, 위상수학에 바탕을 두고 연구되며, 물리학과 생물학에 주로 적용된다.

이상끌개(Strange Attractor) (http://www.cs.swan.ac.uk/~cstony/research/star/)


Design과 기하학에 있어서 끌개 (attractor)는 공간 내에 있는 기하체에 영향을 끼치면서 그것들이 반응하는 방식에 영향을 끼친다. Re-orientate 하거나 축적을 줄이거나 원래의 위치로부터 일탈시키는 것 등이 그것이다. 끌개는 주변 공간을 분절시키기도 하고 미치는 영향의 범위를 결정할 수도 있다. 끌개들은 parametric design에서 여러가지로 적용이 가능하다. 이것이 주변 모든 객체를 일정한 규칙에 따라 변화시킬 수 있기 때문이다. 또한 하나의 장(field)에 여러 개의 끌개를 넣는 것도 가능하다. 끌개가 영향을 끼치는 방식과 그 영향력 모두 조절이 가능하다. 이러한 끌개의 개념을 활용하여 여러가지 실험을 해볼 것이다. 간단한 예시부터 살펴보도록 하자.
 

Point Attractors

Point grid를 이용하여 일단의 polygon을 생성한다. 또한 rhino에서 점을 하나 그린 뒤 이것을 <point> 에 연동시킨다. 이름 또한 <attractor_1>으로 바꿔주도록 하자. 이 점을 <circle>에 연결하여 이 점을 중심으로 하는 원을 그리도록 하자.  이 <attractor_1>이 끌개가 되어 주변에 있는 polygon의 장(field)에 일정한 영향을 끼치게 한다. 즉, 이 <attractor_1>가 영향을 끼치는 범위 않에서는 각각의 polygon들이 그 크기를 변화시키게 된다.

바탕이 되는 <point_grid> 와 <polygon>들 그리고 끌개<attractor_1>.


이것의 algorithm은 무척 간단하다. <point grid>상의 점과 <attractor_1> 사이의 거리(distance)가 바로 polygon들의 외접원의 반지름이 되는 것이다. 즉 끌개와 polygon들의 관계는 바로 이 `거리`인 것이다.
<distance>를 이용하여 <attractor_1>과 각 점들 사이의 거리를 측정해준다. A에 <point grid>를, B에 <attractor_1>을 연결시켜준다. 이 거리 값이 바로 polygon의 지름이 되기엔 너무 크다. 이 값들을 <division> (Scalar > Operators > Division) 을 이용하여 나눠주도록 하자. 거리 값을 <division>의 A에, <number slider>를 B에 연결하고 적절한 수를 설정해주도록 한다.

이렇게 나눠져서 나오는 수가 바로 끌개의 영향력이 된다. 위 그림의 경우 <point>와 <circle>이cluster로 묶여 있는데 새로운 grasshopper 버전에서는 cluster 기능이 사라졌음을 참고하길 바란다.
이제 <division>에서 나오는 값을 <polygon>의 R에 연결해주면 끌개로부터 너무 멀리 떨어져 있는 polygon의 경우 그 크기가 지나치게 커지는 것을 알 수 있다. 이 거리가 일정 값을 넘지 않도록 조절해주도록 하자. 즉 R 값이 커질 수 있는 최대값을 정하는 것이다.

이러한 역할을 하는 것이 바로 <minimum> (Scalar > Util > Minimum)이다. 이는 input으로 주어진 두 값을 비교하여 더 작은 값을 결과물로 내보내준다. 즉 이 경우 A로 들어오는 값 중 B에 설정된 값보다 큰 값이 있으면 B로 대체해 주는 것이다.[1] 이를 통해 <polygon>의 R 값에 최대값을 설정해줄 수 있다. 이렇게 최대값의 영향을 받는 polygon들은 끌개의 영향력 바깥에 있다고 생각할 수 있다.
이제 rhino 상에서 <attractor_1>를 움직이면 영향력의 범위 내에 있는 polygon들의 크기가 변하는 것을 볼 수 있다.

<attractor_1> 의 영향을 받는 polygon들. <attractor>의 위치에 따라 그 크기가 변한다.



같은 개념을 이용하여 polygon을 z 방향으로 <move>시킬 수 있다. 즉 <minimum>에서 나오는 값을 <move>의 z에 적용시켜주는 것이다. 끌개의 개념을 크기 뿐만 아니라 높이에도 적용시킬 수 있는 것이다. 이 뿐만 아니라 끌개와의 거리에 따라 polygon이 회전한다 던가 그 색을 바꿔줄 수 있다.
만약 두개의 끌개가 있다면 어떻게 될까? 또 다른 <point>와 <circle>을 이용하여 <atrractor_2>를 만들고 <distance>에 연결해준다. 여기서 나오는 거리값을 <division>할 때 사용되는 분모에는 <attractor_1>에 사용했던 <number slide>를 똑같이 적용해준다.

두 번째 끌개를 적용시키고 같은 algorithm 을 적용시켜 준다.


이제 polygon에서 각각의 끌개까지의 거리를 가지고 있는 두 개의 data list를 가지게 된다. 이 두 data list 를 <minimum>의 A와 B에 연결하여 작은 수만으로 이루어진 data list로 만들어준다. 이것을 또 다시 <minimum>에 연결하여 그 최대값을 제한해준다.

두 개의 을 이용하여 각 polygon들이 더 가까운 끌개의 영향을 받게 하였다. 이 polygon의 장은 두 끌개의 영향을 받는 것 처럼 보이게 되었다.

두 끌개의 위치에 따라 polygon의 크기가 영향을 받게 된다.


 
여기에 더 많은 수의 끌개를 더할 수 있다. 기본적인 개념은 polygon들이 가장 가까운 끌개로부터 영향을 받아 미리 정해진 반응을 보이는 것이다. 이것은 아주 많은 수의 요소들을 한번에 조정하기에 유용하다.


[1] 역자 주: 만약 A에 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 이라는 data list가 들어오고 B에 (5.5)가 있으면 <minimum>을 통해 나오는 data list는 (1, 2, 3, 4, 5, 5.5, 5.5, 5.5, 5.5, 5.5) 이다.

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