Search results for '선형대수'

행벡터는 행이 축 Part2

2007/12/15 20:36
최근에 어째서 행벡터에서 열이 축인가 헷갈렸는지 알게되었다.

툴에서 카메라를 이동시키는 코드가 있었는데, 이 코드는 카메라를 x축 상으로 움직일때 (LookAt으로 만들어지는)View Matrix에서 _11, _21, _31을 가져왔었다. 그걸보고 햇병아리때 '오, 축은 열인갑다'라고 생각했었고 그게 머리속에 각인되어서 쭉 행벡터의 열이 축인줄 알았나 보다.

View Matrix는 좌표계 변환의 일종이고, 좌표계 변환은 Affine 변환의 일종이며, Affine변환에서 축들의 평행성은 유지되고 역은 전치된다. 그래서 카메라 좌표계의 _11, _12, _13이 전치되어 있는 View Matrix에서 _11, _21, _31을 가져오는 것이다.

행벡터는 행이 축이라는것을 실제적으로 보여주는 간단한 예가 있다.
                                 ( a11, a12, a13
(x', y', z') = (1,0,0) *    a21, a22, a23
                                   a31, a32, a33 )
기존의 x축의 기저를 어떤 Affine 변환을 해서 새로운 축 x', y', z'를 얻었다고 하자.
계산을 해보면,
(x', y', z') = ( 1*a11 + 0*a21 + 0*a31, 1*a12 + 0*a22 + 0*a32, 1*a13 + 0*a23 + 0*a33)
(x', y', z') = (a11, a12, a13)
이 되어 행벡터는 행이 축이라는것을 계산적으로 보여준다.

수학 이야기 선형대수, 행렬

일차결합과 좌표계

2007/12/02 23:30
엄청나게 오해하고 있었던부분. 까먹지 않도록 적어본다.

행벡터를 쓰는 DX에서 변환행렬(World Transform/Local Transform) 의 행이 축(기저벡터, basis vector) 이다.

뭣때문에 오해했는지는 몰라도(아마, 행벡터니까, 열이 축이어야 골고루-_- 곱해진다고 착각했나보다) 이런 오해를 하고도 이제껏 엔진을 만들고 있었다니...-_- 좀 그렇다. 앵무새처럼 암기하고 있는 방향이 _21, _22, _23인것은 DX의 2번째 행이 y축이고 y축이 보통 방향이기 때문이다.

n차 공간에서 좌표는 n개의 기저 벡터들의 일차결합으로 표현된다. (그래서 벡터공간 V의 차원(dimension)을 기저의 개수로 정의하고 dim V로 표시한다.) 예를들면, A라는 좌표는, A1 ~ An까지의 기저벡터에 대해 A = k1A1 + k2A2 + ... + knAn의 일차결함으로 표현될수 있고( A1, A2, ... An이 열벡터 - 기본적으로 수학에서 쓰는 벡터 - 라면 A를 열벡터 A1, A2, ... An에 의해 생성된 부분공간 - spanned subspace - 라고 부른다.) 이를 행렬로 나타내면 다음과 같다.

A의 한 원소 C에 대해
c1       (a11, a21, ... am1       ( k1
c2       a12, a22, ... am2           k2
c3  =   a13, a23, ... am3           k3
...        ...   ...                        ...
cn       a1n, a2n, ... amn)        kn )

그래서 열벡터를 쓰는 이경우, 행렬에서의 하나의 열인 a11,a12,...a1n이 하나의 기저벡터(축)이 되고 반대로, 행벡터를 사용하는 DX에서는 행이 하나의 축이 되는 것이다.

_21, _22, _23은 방향이라는 것보다 행벡터에서 행이 축 이 좀더 외우기 쉽지 아니한가! (...아닌가...-_- 일차결합에 대해서는 위키페디아에 자세히 나와있다.)

수학 이야기 선형대수, 수학