Generative Algorithm 018

4_2_커브와 선형 기하체(On Curves and Linear Geometries)
위에서는 0차원 기하체 (0-dimensional geometry)에 대해 보았으므로 이번에는 1차원 기하체(1-dimensional geometry)에 대해서 살펴보도록 하자. Point와 curve는 다른 수많은 객체들을 생성하기 위한 기본단위가 될 수 있다. curve를 다른 하나의 curve를 따라 extrude하여 surface를 생성할 수 있고 다른 curve들을 연결하여 surface와 solid를 만들 수 있다. 혹은 어떠한 객체를 curve 위에 일정한 간격으로 늘어놓을 수 있다.
 

이탈(Displacements)

Chapter 3에서는 <series>와 <pt>를 이용하여 여러 종류의 point grid를 생성해 보았다. 이번에는 <Grid rectangular> (Vector > Point > Grid rectangular) 를 이용하여 다른 종류의 point grid를 생성할 것이다. 이 component에서는 X와 Y방향으로의 각각의 점의 개수와 점들 사이의 간격 (간격은 X, Y 방향에 같은 값이 적용)을 제어할 수 있다. [1]
 

Fig.4.3. <Grid Rectangular> 에 의하여 생성된 point grid. 미리 정의된 값을 기준으로 생성되었다.


 
<number slider>를 (S)에 적용시키면 길이를 변화시킬 수 있다. 또한 point grid의 방향(orientation)을 바꿀 수 있다. 이것을 위해선 평면을 정의하고 그 위에 이 grid를 생성해줘야 한다.

<XY plane> (Vector > Constants > XY plane)은 미리 정의된 평면으로 X축과 Y축 방향으로 생성된 평면이다. 이것을 <Z unit> (Vector > Constants > Z unit)을 이용하여 이동시켜준다.<Z unit>의 경우 그 크기는 1이다. 이것에 <number slider>를 연결하고 그 크기를 조절하면 point grid가 생성되는 평면의 높이를 조절할 수 있다. [2]

초록색으로 표시된 것이 위의 과정을 통해 생성된 point grid 이다. <number slider>를 이용하여 점들 사이의 간격과 Z 좌표의 위치를 조절하였다.
 
<grid rectangular>의 output은 각 grid cell의 curve 와 그 중심점[3], 그리고 모서리 점들이다. 이제 이 두 grid cell 각각의 중심점을 두 점으로 정의되는 <line>을 이용하여 연결하면 공간으로 퍼져나가는 듯한 형상을 가지는 선들을 만들어낼 수 있다. grid의 크기를 바꾸면 선들의 방향과 길이를 조절할 수 있다. 이 경우의 문제점은 모든 선들이 다른 길이를 가진 다는 것이다. 이 선들을 모두 같은 길이로 만들기 위해서는 <line SDL>을 이용하면 된다.
 
<line SDL>은 선을 선의 시작점(Start point; S), 방향(Direction ;D), 길이(Length; L)을 정의하여 선을 그려주는 역할을 한다. 즉 이 component를 이용하면 ‘길이’를 제어할 수 있다. 시작점을 grid cell의 중심점으로 하고 길이를 원하는 대로 정의한 뒤 그것의 길이를 원하는 만큼 <number slider>를 이용하여 정의해준다. 이에 필요한 vector는 <Vector 2pt>를 이용하여 두 grid의 중심점을 연결한 뒤 이것을 D에 넣어주면 같은 길이를 가지면서 퍼져나가는 형상을 유지할 수 있다.

각 grid cell의 중심점을 연결하여 이것을 vector화 시킨 것이다. <vector 2pt>(vector > vector> vector 2pt)를 이용하면 된다.

<line SDL>을 이용하여 아래쪽 grid cell의 중심점으로부터 시작하여 퍼지는 형상의 선을 그릴 수 있다. 이 선들의 길이 또한 일정하게 제어할 수 있다. 두 번째 grid cell의 크기를 조절하면 선들의 방향도 조절할 수 있다.
 
이제 <line SDL>의 한쪽 끝에 polygon을 그려보자. 이를 위해서는 먼저 line의 한쪽 끝에 polygon의 base가 되는 plane을 생성해주어야 한다.

<end points>(curve > analysis)를 이용하여 선의 시작점과 끝점을 찾은 뒤 이 끝점들을 원점으로 그리고 위에서 찾아준 <Vec2pt>를 법선(plane의 수직방향 vector; normal vector)으로 하는 plane을 만든다. 이 경우 <plane normal> (vector > plane)을 이용하여 뭔점인 O에는 <end points>의 E값을, 그리고 법선 input인 Z에는 <vec2pt>를 연결하여 원점 data list와 vector 의 data list를 data matching 시켜준다.

즉, <plane normal>을 이용하여 이 끝점과 vector를 input으로 받아들이면 각 점을 원점으로 하고 각 vector를 법선(normal vector)으로 하는 평면을 생성할 수 있다. 이렇게 생성된 평면을 <polygon>이 그려지는 기본 평면으로 삼는다. 즉 각각의 <polygon>들은 이 선에 수직으로 만나게 된다. 이제 이 <polygon>의 크기가 한 방향으로 서서히 작아지게 해보자.

<list length>를 이용하여 선들의 개수[4]를 찾은 뒤 이것을 <function>(F(x)=Sqrt(x))을 이용하여 선의 개수의 제곱근(square root)을 구해준다. 이것은 각 열에 있는 선의 개수를 의미한다. 이제 <series>를 이용하여 ‘시작점(S)’과 ‘너비값(N)’을 0.1로 설정한다. 이렇게 나온 <0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7>은 한 행에 있는 7개의 polygon 각각의 Radius 값이 될 것이다. 이 data list를 <dup>에 연결하여 열의 개수만큼 반복 시킨다. [5]
 

이제 마지막으로 <extrude point>(Surface>Freeform)를 이용하여 각 line의 시작점을 P에, <polygon>에 연결해주면 위와 같은 poly surface를 만들 수 있다.

View menu에서 ‘remote control panel’을 이용하면 값을 조정하여 model의 전반적인 형상을 바꿔가며 마음에 드는 것을 찾아낼 수 있다.

 

 
 
 


[1] 역자 주: 이 예제는 예전 build의 grasshopper에서 만들어진 것으로 XY평면의 중심점이 곧 grid의 중심이 된다가 생성된다. 하지만 Build 0.80004 의 경우 gird전체의 왼쪽 아래 모서리가 중심점에 오게 된다. 그렇기 때문에 각 grid cell의 너비와 총개수를 <multiplication>을 이용하여 곱한 뒤 그것을 다시 <division>을 이용 2로 나누고 이를 <move>에 연결하여 X와 Y 방향으로 이동시켜주면 중심점을 맞출 수 있다. 각 grid cell의 중심점은 <area>를 이용하면 찾아줄 수 있다.

[2] 역자 주: grasshopper에서는 일반적으로 평면을 정의할 때 원점만을 정의해주면 된다. 보통은 XY평면에 평행하는 평면의 경우 Z축이 그 법선으로 자동 설정되며 따로 XY의 방향을 설정해줄 수는 없다. 이 예제의 경우 XY평면의 법선 (z축이 시작하는 점을 새로 정의해준다고 생각하면 된다. <Move>를 이용해도 되나 이렇게 하는 것이 더욱 간단하다.

[3] 역자 주: build 0.80004의 경우 M은 더 이상 output이 아니다. 이것은 C에 <area>를 연결하면 각 cell의 중심점을 찾을 수 있다.

[4] 역자 주: <list length>는 주어진 data list의 길이를 구하는 component이다. 즉 이 경우 선행하는 것은 선의 data list이므로 선의 개수를 알아내는 것과 마찬가지 이다.

[5] 역자 주: <dup>을 통해서 나오는 data list는 <0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7> 이다. 이 <dup>의 O를 true로 바꿔주면 data list는 <0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7>로 바꿔줄 수 있다.

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