컴퓨터 그래픽스

3. 변환 : 선형변환

san10 2023. 4. 7. 19:21

선형변환의 정의

3차원 벡터 하나를 받아서 3차원 벡터 하나를 산출하는 함수 t(v)에서,

다음의 조건을 만족할 때, t를 가리켜 선형변환이라고 부른다.

  1.  t(u+v) = t(u) + t(v)
  2. t(ku) = kt(u)

여기서 u와 v는 벡터고, k는 스칼라이다!

 

예를 들어서, 함수 t(x,y,z)=(x², y², z²) 일때,

스칼라 k=2와 u=(1,2,3)에 대해 선형변환이 아니다.

왜냐하면 t(2u) = t(2,4,6) = (4,16,36)이지만

2t(u) = 2(1,4,9) = (2,8,18) 이기 때문에

위에 조건에서 2번을 만족하지 않기 때문이다.

 

그리고 t가 선형변환이면,

t(au+bv+cw) = t(au+(bv+cw))

= at(u) + t(bv+cw)

= at(u) + bt(v) + ct(w)

를 만족한다.

 

 

선형 변환의 행렬 표현

u= (x,y,z)이고, 각 벡터 i,j,k가 표준기저벡터 라고할때, 

다음이 성립한다. (위에서 언급했듯이 t(au+bv+cw) = at(u) + bt(v) + ct(w)이기 때문에!)

t(u) = t(xi+yj+zk) = xt(i) + yt(j) + zt(k)

 

그리고 이를 벡터행렬 곱셈 형태로 표기하면

따라서 t(i) = (A11,A12,A13), t(j) = (A21,A22,A23), t(A31,A32,A33)

이고 이러한 행렬 A를 선형변환 t의 행렬표현이라고 부른다.

 

 

비례

비례는 물체의 크기를 바꾸는 효과를 낸다.

비례 변환은 다음과 같이 정의된다.

S(x,y,z) = (sxx, syy, szz)

 

그리고 S는 선형변환이고, 따라서 행렬 표현이 존재한다.

위에서 했던 것처럼 S를 표준기저벡터들 각각에 적용하고,

결과로 나오는 벡터들을 행으로 하는 행렬을 만들면 된다!

따라서 S(i) = (sx,0,0)

S(j) = (0,sy,0)

S(k) = (0,0,sz)

이고 이를 행렬로 나타내면

$$ S=\begin{bmatrix}
s_{x} &0  &  0\\
 0& s_{y} & 0 \\
0 &  0& s_{z} \\
\end{bmatrix} $$

로 나타낼 수 있고 이 행렬을 비례행렬이라고 부른다.

 

 

회전

책에서는 임의의 축 n에 대한 회전 변환을 설명하는데..

사실 내 머리로는 이해할 수 없어서..^___^

좀 찾아봤더니 z축에 대해 회전변환을 설명한 글은 좀 이해가 가서..

책에 나온 회전변환 대신에 z축에 대한 회전변환을 정리하려 한다!

 

z축을 기준으로 벡터 v를 회전 시키려고 할때,

그림과 같이 나타낼 수 있다!

그리고 vx, vy를 다음과 같이 삼각함수로 나타낼 수 있다.

vx = lcos(θ)

vy = lsin(θ)

 

그리고 벡터v를 α만큼 회전시킨 벡터 w를 구하려고 하면,

다음과 같이 표현할 수 있다.

wx = lcos(θ+α)

wy = lsin(θ+α)

이것을 삼각함수의 덧셈정리을 사용해 전개하면..

wx = lcosθcosα - lsinθsinα

wy = lsinθcosα + lcosθsinα

이므로 치환하면

wx = vxcosα - vysinα

wy = vxsinα + vycosα로 나타낼 수 있다!

 

즉 z축을 기준으로 α만큼 회전시키는 변환은..

T(vx,vy,vz) = (vxcosα - vysinα, vxsinα + vycosα, vz)

로 나타낼 수 있다!

 

그리고 위에서 했었던 것처럼 이걸 행렬로 표현하면..

$$ R_{z} = \begin{bmatrix}
 cos\alpha & sin\alpha  & 0 \\
 -sin\alpha & cos\alpha  & 0 \\
0 & 0 & 1 \\
\end{bmatrix} $$

로 표현할 수 있다...

 

임의의 n축에 대한 회전변환도

다음에 이해가 가면 정리해보는걸로..

^______^

 

참고:

https://luv-n-interest.tistory.com/753

 

선형 변환- 크기변환(Scaling), 회전변환(Rotation) [게임수학]

선형 변환을 지난 글에서 살짝 알아보았고 결국 벡터 공간의 기저벡터를 바꾸는 것이 무엇에 이용되는지 알아볼 예정이다. 그 중 크기 변환과 회전 변환을 알아보겠다. 크기 변환은 우선 쉬운

luv-n-interest.tistory.com