본문 바로가기
IT 기술/Direct3D

Direct3D 행렬 개념, 연산 및 곱셈_5일차

by 썬's 2023. 1. 16.

안녕하세요 Direct3D에서 벡터와 더불어 중요한 개념을 뽑으라면 행렬이 있습니다.

이번 시간에는 저번 시간에 배운 벡터에 이어 행렬에 대해 알아보겠습니다.

※제 수업은 이전주차에서 배운 개념을 재차 설명하지 않습니다※


1. 행렬의 개념

Direct3D에서 행렬(matrix)은 행과 열로 이루어진 상태를 말합니다.

남성 분들은 군대를 가시면 "오와 열 맞춰!!" 라는 소리를 들어 보셨을 겁니다 ㅎㅎ

여기서 행이 가로줄이고 열이 세로줄 입니다.

 

행렬은 x, y, z축으로 이루어진 좌표계에서 벡터가 있을 때,

벡터의 위치를 바꾸거나, 비례나 회전 이동과 같은 기하학적인 변환을 하는 데 사용하는 개념입니다.

 

자 그럼 하단에 행렬 A, B, C, D가 있다고 하겠습니다. 그리고 이 행렬들은 모두 m x n 행렬입니다.

여기서 m이 행(가로줄)이고 n이 열(세로줄)입니다. 보통 행을 먼저 말하고 그 다음에 열을 말합니다. 합쳐서 행렬입니다.

행렬은 Mij 형태의 표기법을 사용합니다. 여기서 행렬 A는 4x3 행렬입니다. 이 행렬을 표기할 때 A43이라 표기합니다.

첫 아래첨자가 행이고 두 번째 아래첨자가 열이라고 보시면 됩니다.

  • 행렬 A는 4 x 3 행렬(A43)입니다. A행렬의 2행 2열의 값은 -3입니다(A22 = -3)
  • 행렬 B는 4 x 1 행렬(B41)입니다. B행렬의 3행 1열의 값은 1입니다(B31 = 1)
  • 행렬 C는 1 x 4 행렬(C14)입니다. C행렬의 1행 3열의 값은 -2입니다(C13 = -2)
  • 행렬 D는 3 x 3 행렬(D33)입니다. D행렬의 1행 2열의 값은 13입니다(D12 = 13)

각 행렬 내부에 있는 수들을 행렬의 요소(성분)라고 합니다.

여기서 B와 C는 행이나 열이 1이라는 점에서 특별한 행렬입니다. 이러한 행렬을 행벡터나 열벡터라고 합니다.

행의 크기가 1이라면 행벡터, 열의 크기가 1이라면 열벡터입니다.

행렬 형태


2. 행렬의 사칙연산

Direct3D에서 행렬은 벡터와 마찬가지로 연산이 가능합니다.

다음과 같이 행렬의 연산에는 조건이 있습니다.

여기서 4번 항의 곱셈은 하나의 행렬과 스칼라 값의 곱셈입니다. 두 행렬의 곱셈은 3번 주제에서 다루겠습니다.

  1. 두 행렬은 대응하는 성분들이 상등일 때만 상등입니다, 따라서 두 행렬의 행과 열 수는 동일해야 합니다.
  2. 두 행렬의 덧셈은 대응하는 성분끼리 더합니다. 따라서 두 행렬의 행과 열 수가 동일해야 덧셈이 가능합니다.
  3. 두 행렬의 뺄셈은 대응하는 성분끼리 뺍니다. 따라서 두 행렬의 행과 열 수가 동일해야 뺼셈이 가능합니다.
  4. 한 행렬에 하나의 스칼라 값을 곱할 때 행렬의 모든 성분에 그 스칼라 값을 곱합니다.

예를 들어 다음과 같은 행렬 A, B, C, D가 있다고 가정해보겠습니다.

  • 행렬 A와 C는 행과 열이 같으며 대응되는 성분이 동일해서 서로 상등하기 때문에 첫 번째 조건에 만족합니다.
  • 행렬 A와 B는 행과 열 수가 같기 때문에 덧셈이 가능해 2번째 조건에 만족합니다. 당연히 A+D나 B+D는 행과 열이 서로 달라 안 되겠죠?
  • 행렬 C와 B는 행과 열기 같기 때문에 뺄셈이 가능해 3번째 조건에 만족합니다.  
  • 행렬 D는 하나의 스칼라 값인 k를 각각의 대응 성분에 곱해 4 번째 조건에 만족합니다. 역시 A, B, C에서 k라는 스칼라값을 곱할 수 있습니다.

행렬의 연산


3. 행렬의 곱셈

Direct3D에서는 두 벡터의 곱셈과 마찬가지로 두 행렬의 곱셈도 가능합니다.

행렬 A와 B가 있다고 할 때, 행렬 A는 m x n 행렬이고 행렬 B는 n x q 행렬이면 행렬 A와 B의 곱이 가능합니다.

행렬 AB는 하나의 m x q 행렬입니다. 이 AB행렬을 C라고 할 때, C의 ij번째 성분은 A의 i번째 행벡터와 B의 j번째 열벡터입니다. 따라서 행렬 AB가 되려면 A의 열 수와 B의 행수가 일치해여 합니다. 단 구성 성분은 동일할 필요는 없습니다.

즉, 일단은 A의 열 수와 B의 행 수가 동일해야 한다!! 이것만 알아두시면 됩니다. 그래야 두 행렬의 곱이 가능합니다.

 

이를 그림으로 표현하면 다음과 같습니다.

아무래도 글로는 조금 무리가 있어 그림으로 먼저 보시고 위의 글을 다시 읽어 주시기 바랍니다.

  • 행렬 A는 2x2 행렬이고 행렬 B는 3x2 행렬입니다. A행렬의 열은 2, B행렬의 행은 3으로 열과 행이 같지 않아 AxB는 성립하지 않습니다.
  • 행렬 C는 2x3행렬이고 행렬 D는 3x3 행렬입니다. C행렬의 열은 3, D행렬의 행은 3으로 열과 행이 같아 CxD는 성립합니다. CD의 결과 값을 E라고 할 때 E는 E33이라 표기합니다

여기서 주의할 점은 AxB 곱은 안 되지만 BxA 곱은 가능합니다. B의 열과 A의 행이 2로 같기 때문입니다.

마찬가지로 CxD는 가능하지만, DxC는 D의 열과 A의 행이 서로 같지 않아 성립하지 않습니다.

하단에 CxD 계산 방식을 보시면 C열의 1행과 D열의 1열부터 3열까지 순차적으로 곱한 결과를 더하고, C열의 2행도 동일하게 D열의 1열부터 3열까지 순차적으로 곱한 결과입니다.

ex) (2, -3, 5) x (1, -2, -6) = (2 x 1, (-3) x (-2), 5 x (-6)) = 2, 6, -30  


오늘은 Direct3D에서 행렬이란 무엇인지와 행렬의 연산과 곱셈에 대해 배워봤습니다.

다음 시간에는 행렬 중 하나인 전치행렬과 단위행렬, 역행렬에 대해 알아보겠습니다.

긴 글 읽으시느라 고생 많으셨습니다~~

댓글