챕터 05까지 배웠던 벡터 연산들을 이용해서 3d 모델링 상에서 점과 선을 나타내는 방법에 대해서 알아보려고 한다. 라이노 인터페이스 상에서 3d 모델링을 하면서 선을 긋는 행위는 너무나도 당연하고 쉬운 과정이지만, 이 또한 모두 수학적으로 컴퓨터에 정의되고 있다는 사실을 잊으면 안 된다. 그리고 라이노 상에서 선을 정의하는 데에 벡터가 사용된다.
점, 벡터, 변수 t 를 이용해 선 정의하기
첫 번째로 다룰 내용은 하나의 점과 벡터가 주어진 경우에 변수 t를 이용해서 하나의 선분 위의 모든 점을 나타내는 방법이다. 선분 위의 모든 점을 나타낼 수 있다면, 선이 정의된 것과 다름이 없다. 아래 그래스호퍼 이미지를 통해서 주어진 조건들을 파악해보자.
주어진 정보는 점 Q, 선분의 방향을 나타내는 벡터 v, 그리고 선분 위 임의의 점 P이다. 그리고 우리는 변수 t를 이용해 모든 P에 대한 정의를 하려고 한다. 각 점과 벡터를 이루는 구성 요소들은 아래와 같이 나타낸다.
v = <a₁, a₂, a₃>
Q = <x₀, y₀, z₀>
t = 변수 parameter (Number)
P = (x, y, z)
이제 점 P를 구하기 위해서는 어떻게 해야할까? 현재 조건들은 공간 상의 임의의 지점에 위치해있기 때문에, 접근이 쉽지 않다. 조건들을 활용하기 위해서는 우리가 이해할 수 있도록 상황을 구속시키는 것이 필요한데, 원점 (0,0,0)을 표현해봄으로써 상황을 제한시켜보겠다.
원점을 정의하는 순간, 원점을 시작점으로 하는 위치 벡터를 사용할 수 있게 된다. 위치 벡터 챕터에서 공부했던 것처럼, 점 Q를 도착점으로 하는 위치 벡터 q의 구성 요소는, 점 Q의 좌표와 동일하다. 따라서 위치 벡터 q는 다음과 같이 정의할 수 있다.
q = <x₀, y₀, z₀>
우리의 목표는 선분 위의 모든 임의의 점 P를 정의할 방법을 찾는 것이다. 방금 원점에서 점 Q를 도착점으로 하는 벡터 q를 구했으니, 점 Q를 시작점으로 하고, 점 P를 도착점으로 하는 벡터를 구하면, 점 P를 주어진 점 Q로 정의해볼 수 있을 것 같다.
현재 우리가 알고 있는 점 Q를 시작점으로 하는 벡터는 v 이다. v는 점 P를 향하는 방향에는 있지만, 크기가 다르다. 그런데 우리는 이전 챕터에서 방향은 그대로 놔둔 채 벡터의 크기를 조절하는 벡터 연산법을 배웠다. 바로 벡터 스칼라이다.
주어진 벡터 v에 -∞ ~ ∞ 에 이르는 변수 t 를 스칼라 연산하면, 점 Q에서 점 P에 이르는 벡터 a를 다음과 같이 정의할 수 있다.
a = t*v
= t*<a₁, a₂, a₃>
여기까지 우리가 아는 것을 정리해보자. 우리는 원점에서 Q로 가는 위치 벡터 q를 알고 있고, 점 Q에서 점 P로 가는 벡터 a를 알고 있다. 그럼 이제 우리는 점 P를 위치 벡터로서 정의할 수 있게 된다. 아래 이미지를 보자.
위치 벡터의 특징에 따라 원점을 시작점으로 하고, 점 P로 가는 벡터 p의 구성 요소는 임의의 점 P(x, y, z)의 좌표가 똑같다. 그런데 벡터 p는 우리가 알고 있는 주황색 벡터 q 와 회색 벡터 a의 벡터 덧셈으로 다시 나타낼 수 있다. 벡터 덧셈은 두 벡터의 평균 방향을 산출하기 때문이다. 결과를 식으로 정리하자면 다음과 같다.
p = <x, y, z> = q + a
= <x₀, y₀, z₀> + t*v
= <x₀, y₀, z₀> + t*<a₁, a₂, a₃>
= <x₀+t*a₁, y₀+t*a₂, z₀+t*a₃>
∴ x = x₀+t*a₁
y = y₀+t*a₂
z = z₀+t*a₃
마지막으로 벡터 p 와 점 P의 구성 요소는 같기 때문에, 점 P의 좌표 또한 주어진 점의 좌표, 벡터와 변수 t의 조합으로 나타낼 수 있게 된다.
* 본 포스트는 Raja Issa의 Essential Mathematics for Computational Design 문서와 유튜브 영상을 참고, 공부하여 작성하였습니다.
* Raja Issa의 영상은 하단 링크를 참고해주세요.
'Grasshopper' 카테고리의 다른 글
[라이노 그래스호퍼 벡터] 챕터 08. 벡터로 서페이스 정의하기 (0) | 2021.04.06 |
---|---|
[라이노 그래스호퍼 벡터] 챕터 07. 두 점 사이의 임의의 점 구하기 (0) | 2021.04.03 |
[라이노 그래스호퍼 벡터] 챕터 05. 벡터 연산 - 벡터 외적 (0) | 2021.04.02 |
[라이노 그래스호퍼 벡터] 챕터 04. 벡터 연산 - 벡터 내적 (0) | 2021.04.01 |
[라이노 그래스호퍼 벡터] 챕터 03. 벡터 기본 연산 - 벡터 스칼라/ 벡터 덧셈/ 벡터 뺄셈 (0) | 2021.03.26 |