8 분 소요

수치해석 1장부터 7장까지의 암기할 공식들만 적어놓은 포스트이다.

1. Vector

벡터 기본

1. 벡터 크기 (length)

\[\|\vec{a}\| = \sqrt{a_1^2 + a_2^2 + \dots + a_n^2}\]

2. 단위 벡터 (unit vector)

\[\hat{a} = \frac{\vec{a}}{\|\vec{a}\|}\]

내적 (Dot Product)

1. 공식 (정의)

\[\vec{a} \cdot \vec{b} = a_1b_1 + a_2b_2 + \dots + a_n b_n\]

2. 각도와의 관계

\[\vec{a} \cdot \vec{b} = \|\vec{a}\| \|\vec{b}\| \cos \theta\]

3. 직교(수직) 조건

\[\vec{a} \cdot \vec{b} = 0 \Rightarrow \vec{a} \perp \vec{b}\]

외적 (Cross Product, 3차원 전용)

1. 공식 (벡터 형태)

\[\vec{a} \times \vec{b} = \begin{bmatrix} a_2b_3 - a_3b_2 \\ a_3b_1 - a_1b_3 \\ a_1b_2 - a_2b_1 \end{bmatrix}\]

2. 크기와 방향

\[\|\vec{a} \times \vec{b}\| = \|\vec{a}\| \|\vec{b}\| \sin\theta\]
  • 결과 벡터는 벡터 a, b 양쪽에 대해 수직
  • 오른손 법칙 적용

방향 관련

각도 구하기

\[\cos \theta = \frac{\vec{a} \cdot \vec{b}}{\|\vec{a}\|\|\vec{b}\|}\]

법선 벡터 구하기

  • 두 벡터 u, v 가 평면 위에 있을 때:
\[\vec{n} = \vec{u} \times \vec{v}\]

직선 관련

1. 매개변수 표현 (3D)

\[\vec{x}(u) = \vec{a} + u \vec{b}\]
  • a : 한 점, b : 방향 벡터

2. 두 점 P0, P1지나는 직선

\[\vec{x}(u) = (1 - u)\vec{P}_0 + u\vec{P}_1\]

평면 관련

1. 일반형

\[ax + by + cz + d = 0\]

2. 벡터형 (점 + 법선 벡터)

\[(\vec{x} - \vec{x}_0) \cdot \vec{n} = 0\]

직선과 평면의 교차 조건

1. 직선:

\[\vec{x} = \vec{a} + u \vec{b}\]

2. 평면:

\[(\vec{x} - \vec{x}_0) \cdot \vec{n} = 0\]
  • 교차 조건:
\[\vec{b} \cdot \vec{n} \neq 0 \Rightarrow \text{교차}\]
  • 평행 or 포함:
\[\vec{b} \cdot \vec{n} = 0\]

2. Matrix

기본 연산 공식

항등행렬

\(AI = IA = A\)

전치행렬 (Transpose)

\[(A^T)_{ij} = A_{ji}\] \[(A^T)^T = A\] \[(AB)^T = B^TA^T\]

행렬식 (Determinant)

1. 2X2 행렬

\[\left| \begin{matrix} a & b \\ c & d \end{matrix} \right| = ad - bc\]

2. 3X3 행렬

\[|A| = a_{11}(a_{22}a_{33} - a_{23}a_{32}) - a_{12}(a_{21}a_{33} - a_{23}a_{31}) + a_{13}(a_{21}a_{32} - a_{22}a_{31})\]

역행렬 (Inverse)

1. 정의

\[A^{-1} A = AA^{-1} = I\]
  • 존재 조건: \(|A| \ne 0\)

2. 2X2 행렬 역행렬

\[A = \begin{bmatrix} a & b \\ c & d \end{bmatrix} \Rightarrow A^{-1} = \frac{1}{ad - bc} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}\]

가우스-조르당 소거법

  • 확대 행렬 [A I]에서 시작
  • A를 항등행렬로 바꾸면, 오른쪽은 A의 역행렬

고유값 & 고유벡터 (EigenValue)

1. 정의

\[AX = \lambda X\]

2. 특성 방정식

\[\det(A - \lambda I) = 0\]

대각화 (Diagonalization)

1. 대각화 가능 조건

  • n개의 선형 독립 고유벡터 존재

2. 수식

\[A = PDP^{-1}\]
  • P: 고유벡터들을 열벡터로 구성한 행렬
  • D: 고유값을 대각에 가지는 대각행렬

3. Transformation

기본 변환 공식

1. 2D Translation (이동)

\[x' = x + t_x,\quad y' = y + t_y\]

2. 2D Scaling

  • Uniform scaling (모든 축 동일):
\[x' = sx,\quad y' = sy\]
  • Non-uniform scaling:
\[x' = s_x x,\quad y' = s_y y\]

3. 2D Rotation (원점 기준)

\[x' = \cos\theta \cdot x - \sin\theta \cdot y \\ y' = \sin\theta \cdot x + \cos\theta \cdot y\]

Isometry 변환

  • 거리, 각도 유지
\[x' = a x + b y + t_x \\ y' = c x + d y + t_y\]
  • 조건: \(A = \begin{bmatrix} a & b \\ c & d \end{bmatrix}\) 가 직교 행렬
    ⇒ \(AA^T = I, \det(A) = \pm 1\)

Similarity (유사변환)

  • Isometry + Scaling
\[x' = k(ax + by) + t_x \\ y' = k(cx + dy) + t_y\]
  • 조건: \(A = \begin{bmatrix} a & b \\ c & d \end{bmatrix},\ A^T A = k^2 I\)

Shear (전단변환)

  • x방향 전단: \(x' = x + k y\)

  • y방향 전단: \(y' = y + k x\)

  • 행렬:

\[S = \begin{bmatrix} 1 & k \\ 0 & 1 \end{bmatrix} \text{ 또는 } \begin{bmatrix} 1 & 0 \\ k & 1 \end{bmatrix}\]

Affine Transformation

\[\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}\]
  • 직선성, 평행성, 비율 유지

Linear Transformation (3D)

  • Translation 제외한 선형 변환:
\[\vec{x}' = M \vec{x},\quad \text{where } M \in \mathbb{R}^{3\times3}\]
  • 조건: \(\det(M) \ne 0 (역행렬 존재)\)

Homogeneous Coordinates (동차좌표)

일반 변환:

\[\vec{X}' = M \vec{X} + \vec{T} \Rightarrow \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} = \begin{bmatrix} M & T \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}\]
  • 모든 변환 (회전, 이동, 스케일, 전단)을 행렬 곱 하나로 표현 가능

요약:

  • Isometry ↔ 거리/각도 유지
  • Similarity ↔ 모양 유지 (크기만 변함)
  • Affine ↔ 평행 유지
  • Homogeneous ↔ Translation 포함 가능

4. Ortho

Orthogonal Matrix (직교 행렬)

1. 정의

\[A^T A = AA^T = I \quad \Rightarrow \quad A^{-1} = A^T\]

2. 정사각행렬 A의 열벡터들이 오르토노멀(orthonormal) 집합이면

⇒ A는 직교 행렬 \(\vec{v}_i \cdot \vec{v}_j = \delta_{ij}\)

직교 행렬의 성질

1. 길이 보존

\[\|\vec{X}\| = \|A \vec{X}\|\]

2. 각도 보존

\[\cos\theta = \frac{\vec{X} \cdot \vec{Y}}{\|\vec{X}\|\|\vec{Y}\|} = \frac{(A\vec{X}) \cdot (A\vec{Y})}{\|A\vec{X}\|\|A\vec{Y}\|}\]

좌표계 변환 공식

1. 이동된 좌표계

\[X' = T^{-1} X\]
  • T: 원점 이동 행렬

2. 회전된 좌표계

\[X' = R^{-1} X\]
  • R: 회전 행렬

3. 회전 + 이동된 좌표계

\[X' = (TR)^{-1} X = R^{-1} T^{-1} X\]

Normal Vector 변환

  • 평면의 법선 벡터 N이 변환 후에도 여전히 수직인지?

  • 직교 변환 M일 경우, 정상적으로 변환됨:

\[(MN)^T \cdot (MT G) = 0\]

5. Rotation

2D 회전

  • 원점 기준 각만큼 회전:
\[\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}\]

3D 축별 회전 행렬

(x축 기준 회전)

\[\begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\alpha & -\sin\alpha \\ 0 & \sin\alpha & \cos\alpha \end{bmatrix}\]

(y축 기준 회전):

\[\begin{bmatrix} \cos\beta & 0 & \sin\beta \\ 0 & 1 & 0 \\ -\sin\beta & 0 & \cos\beta \end{bmatrix}\]

(z축 기준 회전):

\[\begin{bmatrix} \cos\gamma & -\sin\gamma & 0 \\ \sin\gamma & \cos\gamma & 0 \\ 0 & 0 & 1 \end{bmatrix}\]

임의의 축 회전

  • 회전 공식 (Rodrigues’ formula):
\[P' = P_\parallel + \cos\theta \cdot P_\perp + \sin\theta \cdot (A \times P_\perp)\]

회전 행렬 조합

\[R = R_z(\alpha) R_y(\beta) R_x(\theta)\]

오일러 각도 (Euler Angles)

  • 다양한 조합 존재:
    • Z-X-Z: \(R = R_z(\gamma) R_x(\beta) R_z(\alpha)\)

    • Z-X-Y: \(R = R_z(\gamma) R_x(\beta) R_y(\alpha)\)

  • Gimbal Lock 주의:

    • 한 축의 회전이 다른 회전을 덮어써 자유도 1개 상실

Quaternion 회전 표현

  • 축 A = (a_x, a_y, a_z), 각 회전 쿼터니언:
\[q = \left( \cos\frac{\theta}{2},\ a_x \sin\frac{\theta}{2},\ a_y \sin\frac{\theta}{2},\ a_z \sin\frac{\theta}{2} \right)\]
  • 회전 행렬로 변환 가능
  • 보간(Interpolation)에 안정적 (SLERP)

거리 공식 요약

1. 점 Q와 직선 P,V 사이 거리:

\[d = \frac{\| (Q - P) \times \vec{V} \|}{\|\vec{V}\|}\]

2. 점 Q와 평면 N (Q-P) 사이 거리:

\[d = \frac{N \cdot (Q - P)}{\|N\|}\]

6. Curves

Parametric Curve 기본식

\[p(u) = c_0 + c_1 u + c_2 u^2 + c_3 u^3\]
  • 도함수 (접선 벡터):
\[p'(u) = c_1 + 2c_2 u + 3c_3 u^2\]
  • 벡터형:
\[p(u) = \begin{bmatrix} x(u) \\ y(u) \\ z(u) \end{bmatrix} = \sum_{k=0}^{3} c_k u^k\]

Hermite Curve

  • 정의 조건:
\[\begin{aligned} p(0) &= p_0 \quad &p(1) &= p_1 \\ p'(0) &= t_0 \quad &p'(1) &= t_1 \end{aligned}\]
  • 행렬 표현:
\[p(u) = u^T M_H q,\quad q = [p_0, t_0, p_1, t_1]^T\]
  • Hermite Matrix:
\[M_H = \frac{1}{1} \begin{bmatrix} 2 & -2 & 1 & 1 \\ -3 & 3 & -2 & -1 \\ 0 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 \end{bmatrix}\]

Bezier Curve (Cubic)

  • 제어점 4개:

  • 시작/끝 접선 근사:

\[p'(0) = 3(p_1 - p_0),\quad p'(1) = 3(p_3 - p_2)\]
  • 수식:
\[p(u) = u^T M_B p,\quad M_B = \begin{bmatrix} -1 & 3 & -3 & 1 \\ 3 & -6 & 3 & 0 \\ -3 & 3 & 0 & 0 \\ 1 & 0 & 0 & 0 \end{bmatrix}\]
  • Bernstein (Blending functions):
\[\begin{aligned} b_0(u) &= (1 - u)^3 \\ b_1(u) &= 3u(1 - u)^2 \\ b_2(u) &= 3u^2(1 - u) \\ b_3(u) &= u^3 \end{aligned}\]

연속성 (Continuity)

종류 의미
C0 위치 연속 (점 일치)
C1 접선 연속 (미분 일치)
C2 곡률 연속 (2차 미분 일치)
G1 접선 방향만 같음 (크기 다름 가능)

B-Spline Curve

  • 주어진 제어점 4개:

  • 조건식:

\[\begin{aligned} p(0) &= \frac{1}{6}(p_0 + 4p_1 + p_2) \\ p'(0) &= \frac{1}{2}(p_2 - p_0) \\ p(1) &= \frac{1}{6}(p_1 + 4p_2 + p_3) \\ p'(1) &= \frac{1}{2}(p_3 - p_1) \end{aligned}\]
  • 행렬 표현:
\[p(u) = u^T M_S p,\quad M_S = \frac{1}{6} \begin{bmatrix} -1 & 3 & -3 & 1 \\ 3 & -6 & 3 & 0 \\ -3 & 0 & 3 & 0 \\ 1 & 4 & 1 & 0 \end{bmatrix}\]

7. Surfaces

곡면의 표현 방식

1. 암시적 곡면 (Implicit)

\[f(x, y, z) = 0\]

2. 매개변수 곡면 (Parametric)

\[p(u, v) = \begin{bmatrix} x(u, v) \\ y(u, v) \\ z(u, v) \end{bmatrix}\]

Bilinear Surface

  • 4 꼭짓점 보간:
\[p(u, v) = (1-u)(1-v)p_{00} + u(1-v)p_{10} + (1-u)v p_{01} + uv p_{11}\]
  • 특징: 평평하고, 경계가 직선

Bi-cubic Surface (3차 다항 곡면)

  • u, v 모두 3차 다항식 사용:
\[p(u, v) = \sum_{i=0}^{3} \sum_{j=0}^{3} c_{ij} u^i v^j\]
  • 경계는 Hermite curve, 내부 제어 가능
  • Twist vector 시각화 어려움

Bezier Surface

  • 제어점 16개: p_{ij}
\[p(u, v) = \sum_{i=0}^{3} \sum_{j=0}^{3} B_i(u) B_j(v) p_{ij}\]
  • B_i(u): Bernstein 함수
  • 장점: 파생 함수 계산 용이
  • 단점: 로컬 제어 불가

B-Spline Surface

  • 곡선의 B-Spline 확장
  • 행렬 표현:
\[p(u, v) = u^T M_S^T P M_S v\]
  • P: 4 X 4 제어점 행렬
  • M_S: B-Spline Matrix
\[M_S = \frac{1}{6} \begin{bmatrix} -1 & 3 & -3 & 1 \\ 3 & -6 & 3 & 0 \\ -3 & 0 & 3 & 0 \\ 1 & 4 & 1 & 0 \end{bmatrix}\]

Bezier Curve/Subdivision 공식

  • 곡선을 두 개로 분할:
\[p(u) = b_0(u)p_0 + b_1(u)p_1 + b_2(u)p_2 + b_3(u)p_3\]
  • 분할 조건:
\[l_3 = r_0 = \frac{1}{2}(l_2 + r_1)\]
  • 각 점 계산 시 재귀 분할로 표현

Surface Subdivision (곡면 분할)

  1. u 고정 → v 방향 곡선 4개 분할
  2. v 고정 → u 방향 곡선 4개 분할
  3. 총 4개의 패치로 나눔
  4. 정지 조건 만족 시 GL_QUADS로 렌더링