SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
벡터
쿠재아이
김재경
벡터(Vector)란?
• 크기(magnitude)와 방향(direction)을 모두 가진 수량
• 예) 힘(force), 변위(displacement), 속도(velocity)
• 이동해도 크기와 방향이 같으면 같은 벡터다(밑에 그림에서 u = v)
(a) 2차원 평면에 그려진 벡터들. (b) 개미가 북쪽으로 10미터 나아가는 이동을 나타내는 벡터들
벡터와 좌표계
• 공간에 하나의 3차원 좌표계를 도입하고
• 모든 벡터를 그 꼬리가 그 좌표계의 원점과 일치하도록 이동하도록 함
• v = (𝑥, 𝑦, 𝑧)로 표기할 수 있으며 부동소수점 값 3개로 표현할 수 있다
벡터와 좌표계
• 같은 벡터 v라도 기준계에 따라 좌표가 다르다
왼손잡이 좌표계 vs 오른손잡이 좌표계
• Directx3D에서는 왼손잡이 좌표계를 사용
• 왼손을 펴서 양의 x축 방향을 가리키게 하고 손가락들을 90° 구부려서
양의 y축 방향을 가리키게 하면 엄지손가락의 방향이 양의 z축 방향에 해당
왼손잡이 좌표계 오른손잡이 좌표계
기본적인 벡터 연산들
• u = (𝑢 𝑥, 𝑢 𝑦, 𝑢 𝑧) 이고 v = (𝑣 𝑥, 𝑣 𝑦, 𝑣𝑧) 일 때
1. 𝑢 𝑥 = 𝑣 𝑥, 𝑢 𝑦 = 𝑣 𝑦, 𝑢 𝑧 = 𝑣𝑧 이면 u = v
2. u + v = (𝑢 𝑥 + 𝑣 𝑥, 𝑢 𝑦 + 𝑣 𝑦, 𝑢 𝑧 + 𝑣𝑧)
3. 𝑘u = (𝑘𝑢 𝑥, 𝑘𝑢 𝑦, 𝑘𝑢 𝑧)
4. u - v = u + (-1 ∙ v) = u + (-v) = (𝑢 𝑥 − 𝑣 𝑥, 𝑢 𝑦 − 𝑣 𝑦, 𝑢 𝑧 - 𝑣𝑧)
기본적인 벡터 연산들
스칼라 곱셈의 기하학적 해석 벡터 덧셈의 기하학적 해석 벡터 뺄셈의 기하학적 해석
길이와 단위벡터
• 벡터의 크기(길이)는 이중 수직 선으로 표기 ( 𝑢 )
• 벡터 u = (𝑥, 𝑦, 𝑧) 일 때
• 𝑢 = 𝑥2 + 𝑦2 + 𝑧2
• 벡터를 방향을 나타내는 용도로만 사용하는 경우에는 길이가 중요하지 않음
• 이런 ‘방향 전용’ 벡터는 길이를 1(단위 길이)로 맞추어 두면 편리함
• 크기가 1인 벡터를 단위벡터(unit vector)라고 부름
• 임의의 벡터를 단위 벡터로 만드는 것을 정규화(normalization)라고 함
• ෢𝑢 =
𝑢
𝑢
= (
𝑥
𝑢
,
𝑦
𝑢
,
𝑧
𝑢
)
내적
• inner product. 점곱(dot product)이라고도 함
• 스칼라 값을 내는 벡터 곱셈
• u = (𝑢 𝑥, 𝑢 𝑦, 𝑢 𝑧)이고 v = (𝑣 𝑥, 𝑣 𝑦, 𝑣𝑧) 일 때
• u ⋅ v = 𝑢 𝑥 𝑣 𝑥 + 𝑢 𝑦 𝑣 𝑦 + 𝑢 𝑧 𝑣𝑧 또는
• u ⋅ v = 𝑢 𝑣 cos 𝜃 (단, 0 ≤ 𝜃 ≤ 𝜋)
1. 만일 u ⋅ v = 0이면 u ⊥ v이다(즉, 두 벡터는 직교이다)
2. 만일 u ⋅ v > 0이면 두 벡터 사이의 각도 𝜃는 90도보다 작다
3. 만일 u ⋅ v < 0이면 두 벡터 사이의 각도 𝜃는 90도보다 크다
내적
벡터 v와 단위벡터 n이 주어졌을 때 p를 내적을 이용해서 v와 n으로 표현하는 공식 구하기
내적
1. p = 𝑘n을 만족하는 스칼라 𝑘가 존재함을 알 수 있다
2. 𝑛 = 1이므로 반드시 𝑝 = 𝑘𝑛 = 𝑘 𝑛 = 𝑘
3. 삼각함수 법칙들을 적용하면 𝑘 = 𝑣 cos 𝜃
4. 따라서 p = 𝑘n = ( 𝑣 cos 𝜃)n
5. 그런데 n은 단위벡터이므로
6. p = ( 𝑣 cos 𝜃)n = ( 𝑣 ⋅ 1 cos 𝜃)n = ( 𝑣 𝑛 cos 𝜃)n = (v ⋅ n)n
7. ∴ 𝑘 = (v ⋅ n)
• 이러한 p를 n에 대한 v의 직교투영(orthographic projection; 또는 정사영)이라고 한다
• p = pro𝑗 𝑛(v)
• v를 하나의 힘으로 간주한다면 p는 힘 v 중에서 방향 n으로 작용하는 부분이라고 할 수 있다
내적
• 벡터 w = per𝑝 𝑛(v) = v - p는 힘 v 중에서 n의 수직 방향으로 작용하는 부분
• perp는 perpendicular(수직)을 뜻함
• v = p + w 로 분해될 수 있다
• n이 단위 길이가 아니면, 먼저 n을 정규화해서 단위 길이로 만들면 된다
• 위의 투영 공식에서 n을 단위 벡터
n
n
으로 대체하면 좀 더 일반적인 투영 공식이 나온다
• p = pro𝑗 𝑛(v) = (v ⋅
n
n
)
n
n
=
(v ⋅ n)
n 2 n
직교화
• 벡터 집합 {𝑣0, …, 𝑣 𝑛−1}의 모든 벡터가 단위 길이이고 서로 직교일 때
그러한 벡터 집합을 정규직교(orthonormal) 집합이라고 부른다
• 주어진 벡터 집합이 정규직교에 가깝지만 완전히 정규직교는 아닌 경우도
흔히 만나게 되는데 그런 벡터 집합을 정규직교벡터 집합으로 만드는 것을
직교화(orthogonalization)라고 한다
• 3D 그래픽에서는 정규직교 집합으로 시작했지만 수치 정밀도 문제 때문에
집합이 점차 정규직교가 아니게 되는 경우도 생긴다
직교화
• 2차원
• 벡터 집합 {𝑣0, 𝑣1}을 직교화해서 정규직교 집합 {𝑤0, 𝑤1}을 얻는 과정
1. 𝑤0 = 𝑣0으로 시작해서, 벡터 𝑣1이 𝑤0과 직교가 되게 만든다
2. 이를 위해, 𝑤0의 방향으로 작용하는 부분을 𝑣1에서 뺀다
3. 𝑤1 = 𝑣1 - pro𝑗 𝑤0(𝑣1)
4. 서로 직교인 벡터들의 집합 {𝑤0, 𝑤1}이 만들어졌다
5. 𝑤0 과 𝑤1을 정규화해서 단위 길이로 만들면 정규직교 집합이 완성된다
직교화
• 3차원
• 벡터 집합 {𝑣0, 𝑣1, 𝑣2}을 직교화해서 정규직교 집합 {𝑤0, 𝑤1, 𝑤2}
을 얻는 과정
1. 𝑤0 = 𝑣0으로 시작해서, 벡터 𝑣1이 𝑤0과 직교가 되게 만든다
2. 이를 위해, 𝑤0의 방향으로 작용하는 부분을 𝑣1에서 뺀다
3. 𝑤1 = 𝑣1 - pro𝑗 𝑤0(𝑣1)
4. 𝑣2가 𝑤0과 𝑤1 모두에 직교가 되게 한다
5. 이를 위해, 𝑤0 방향으로 작용하는 부분과 𝑤1 방향으로 작용하는 부
분을 𝑣2에서 뺀다
6. 𝑤2 = 𝑣2 - pro𝑗 𝑤0(𝑣2) - pro𝑗 𝑤1(𝑣2)
7. 서로 직교인 벡터들의 집합 {𝑣0, 𝑣1, 𝑣2}가 만들어졌다
8. 𝑤0과 𝑤1, 𝑤2를 정규화해서 단위 길이로 만들면 정규직교 집합이
완성된다
직교화
• 이전 방법을 일반화해서, 𝑛개의 벡터들의 집합 { 𝑣0, …, 𝑣 𝑛−1}을 정규직교
집합 { 𝑤0, …, 𝑤 𝑛−1}으로 직교화할 때는 그람-슈미트 직교화라고 하는 공
정을 적용한다
1. 기본 단계 : 𝑤0 = 𝑣0으로 설정한다
2. 1 ≤ 𝑖 ≤ 𝑛-1에 대해 𝑤𝑖 = 𝑣𝑖 - σ 𝑗=0
𝑖−1
pro𝑗 𝑤𝑗(𝑣𝑖)로 설정한다
3. 정규화 단계 : 𝑤𝑖 =
𝑤 𝑖
𝑤 𝑖
로 설정한다
외적
• Outer product. 가위곱(cross product)이라고도 함
• 외적의 결과는 벡터이다
• 오직 3차원 벡터에 대해서만 정의된다(2차원에서는 없음)
• 두 3차원 벡터 u와 v의 외적의 취하면 u와 v 모두에 직교인 또 다른 벡터
w가 나온다
• u = (𝑢 𝑥, 𝑢 𝑦, 𝑢 𝑧)이고 v = (𝑣 𝑥, 𝑣 𝑦, 𝑣𝑧) 일 때
• w = u x v = (𝑢 𝑦 𝑣𝑧 - 𝑢 𝑧 𝑣 𝑦, 𝑢 𝑧 𝑣 𝑥 - 𝑢 𝑥 𝑣𝑧, 𝑢 𝑥 𝑣 𝑦 - 𝑢 𝑦 𝑣 𝑥)
• u x v ≠ v x u
외적
• 왼손을 펼쳐서 첫 벡터 u의 방향을 가리킨 상
태에서 손가락들을 둘째 벡터 v의 방향으로 말
아쥐었을 때 엄지손가락이 가리키는 방향이
바로 w = u x v 방향이다.
• 이를 왼손 엄지 법칙이라고 부른다
2차원 유사 외적(pseudo 2D cross product)
• 2차원에서는 두 벡터의 수직인 벡터가 존재하지 않음
• 그러나 하나의 2차원 벡터 u = (𝑢 𝑥, 𝑢 𝑦)에 수직인 벡터 v는 구할 수 있다
• v = (-𝑢 𝑦, 𝑢 𝑥)
• u ⊥ v
• u ⊥ -v
외적을 이용한 직교화
1. 𝑤0 =
𝑣0
𝑣0
으로 설정한다
2. 𝑤2 =
𝑤0 x 𝑣1
𝑤0 x 𝑣1
로 설정한다
3. 𝑤1 = 𝑤2 x 𝑤0로 설정한다
4. 이제 벡터 집합 {𝑤0, 𝑤1, 𝑤2}는 정규직교이다
주의할 점
• 이 예는 𝑤0 =
𝑣0
𝑣0
으로 시작했는데, 이는 𝑣0에서 𝑤0으로 가는 방향이
변하지 않고 단지 그 길이만 변함을 뜻한다. 그러나 𝑤1과 𝑤2의 방향은 각
각 𝑣1, 𝑣2와 다를 수 있다. 응용의 성격에 따라서는, 방향이 바뀌지 않을
벡터로 어떤 벡터를 선택하느냐가 중요할 수 있다.
• 예를 들어 카메라의 방향을 세 개의 정규직교 벡터 {𝑣0, 𝑣1, 𝑣2}로 표현
할 때, 여기서 셋째 벡터 𝑣2는 카메라가 바라보는 방향을 나타낸다. 이
벡터들을 직교화할 때 그 방향이 변하지 않게 하는 것이 바람직하므로, 이
직교화 알고리즘을 적용할 때에는 𝑣2로 시작하고 𝑣0과 𝑣1을 수정해서 벡
터들을 직교화하는 것이 바람직하다.
점
• 지금까지 살펴본 벡터는 위치(position)를 서술하지 않음
• 그러나 3차원 그래픽 프로그램에서는 공간 안의 어떤 위치를 지정할 수 있어야 함
• 특정 좌표계를 기준으로 표준 위치
에 있는 벡터를 3차원 공간 안의 한
위치를 나타내는 데 사용할 수 있다.
• 위치벡터라고 부름
• 벡터의 방향이나 크기가 아니라 벡
터의 머리 끝의 좌표가 중요
점
• 점을 벡터로 표현하면 점에 대해 의미 없는 벡터 연산을 점(위치벡터)에 적용하는 실수를
할 수 있다
• ex) 기하학적으로 두 점의 합은 말이 되지 않음(아핀결합을 이용하면 가능하다고 함)
• 그러나 점에 대해서도 의미 있는 벡터 연산들도 존재함
• (그림 a) 두 점의 차 q - p 를, p에서 q로 가는 벡터라고 정의할 수 있음
• (그림 b) 점 p 더하기 벡터 v를 p의 위치를 v만큼 옮겼을 때 도달하는 점 q라고 정의 가능

Contenu connexe

Tendances

선형대수 06. 영벡터공간과 해집합
선형대수 06. 영벡터공간과 해집합선형대수 06. 영벡터공간과 해집합
선형대수 06. 영벡터공간과 해집합AHRA CHO
 
선형대수 02. 가우스 소거법
선형대수 02. 가우스 소거법선형대수 02. 가우스 소거법
선형대수 02. 가우스 소거법AHRA CHO
 
1 2. 직선과 평면에서의 벡터 방정식
1 2. 직선과 평면에서의 벡터 방정식1 2. 직선과 평면에서의 벡터 방정식
1 2. 직선과 평면에서의 벡터 방정식jdo
 
선형대수 03. LU Decomposition
선형대수 03. LU Decomposition선형대수 03. LU Decomposition
선형대수 03. LU DecompositionAHRA CHO
 
1-1. 공학과 수학에서 벡터/ 내적 직교
1-1. 공학과 수학에서 벡터/ 내적 직교1-1. 공학과 수학에서 벡터/ 내적 직교
1-1. 공학과 수학에서 벡터/ 내적 직교jdo
 
[0528 석재호]게임을위한기초수학과물리
[0528 석재호]게임을위한기초수학과물리[0528 석재호]게임을위한기초수학과물리
[0528 석재호]게임을위한기초수학과물리Jaeho Seok
 
[15.03.12] 일차변환
[15.03.12] 일차변환[15.03.12] 일차변환
[15.03.12] 일차변환Hyeonmin Park
 
무중력 상태에 필요한 기초 물리
무중력 상태에 필요한 기초 물리무중력 상태에 필요한 기초 물리
무중력 상태에 필요한 기초 물리진상 문
 
Quaternion and Rotation
Quaternion and RotationQuaternion and Rotation
Quaternion and RotationYoung-Min kang
 
[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장sung ki choi
 
게임수학 강의노트 1부
게임수학 강의노트 1부게임수학 강의노트 1부
게임수학 강의노트 1부Young-Min kang
 

Tendances (12)

선형대수 06. 영벡터공간과 해집합
선형대수 06. 영벡터공간과 해집합선형대수 06. 영벡터공간과 해집합
선형대수 06. 영벡터공간과 해집합
 
선형대수 02. 가우스 소거법
선형대수 02. 가우스 소거법선형대수 02. 가우스 소거법
선형대수 02. 가우스 소거법
 
1 2. 직선과 평면에서의 벡터 방정식
1 2. 직선과 평면에서의 벡터 방정식1 2. 직선과 평면에서의 벡터 방정식
1 2. 직선과 평면에서의 벡터 방정식
 
선형대수 03. LU Decomposition
선형대수 03. LU Decomposition선형대수 03. LU Decomposition
선형대수 03. LU Decomposition
 
행렬
행렬행렬
행렬
 
1-1. 공학과 수학에서 벡터/ 내적 직교
1-1. 공학과 수학에서 벡터/ 내적 직교1-1. 공학과 수학에서 벡터/ 내적 직교
1-1. 공학과 수학에서 벡터/ 내적 직교
 
[0528 석재호]게임을위한기초수학과물리
[0528 석재호]게임을위한기초수학과물리[0528 석재호]게임을위한기초수학과물리
[0528 석재호]게임을위한기초수학과물리
 
[15.03.12] 일차변환
[15.03.12] 일차변환[15.03.12] 일차변환
[15.03.12] 일차변환
 
무중력 상태에 필요한 기초 물리
무중력 상태에 필요한 기초 물리무중력 상태에 필요한 기초 물리
무중력 상태에 필요한 기초 물리
 
Quaternion and Rotation
Quaternion and RotationQuaternion and Rotation
Quaternion and Rotation
 
[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장
 
게임수학 강의노트 1부
게임수학 강의노트 1부게임수학 강의노트 1부
게임수학 강의노트 1부
 

Similaire à 벡터

0124 1 linear_algebra_basic_vector
0124 1 linear_algebra_basic_vector0124 1 linear_algebra_basic_vector
0124 1 linear_algebra_basic_vectorJeonghun Yoon
 
Ray-triangle intersection
Ray-triangle intersectionRay-triangle intersection
Ray-triangle intersection동환 김
 
Eigendecomposition and pca
Eigendecomposition and pcaEigendecomposition and pca
Eigendecomposition and pcaJinhwan Suk
 
0131 1 spectral_theorem_transformation
0131 1 spectral_theorem_transformation0131 1 spectral_theorem_transformation
0131 1 spectral_theorem_transformationJeonghun Yoon
 
유니티 고급 과정 -2-
유니티 고급 과정 -2-유니티 고급 과정 -2-
유니티 고급 과정 -2-Kiyoung Moon
 
입체충돌처리
입체충돌처리입체충돌처리
입체충돌처리quxn6
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스noerror
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2HyeonSeok Choi
 
컴퓨터 그래픽스 2015-2019년 기말시험
컴퓨터 그래픽스 2015-2019년 기말시험컴퓨터 그래픽스 2015-2019년 기말시험
컴퓨터 그래픽스 2015-2019년 기말시험Lee Sang-Ho
 
02.선형변환과 행렬
02.선형변환과 행렬02.선형변환과 행렬
02.선형변환과 행렬JaeHong Park
 
Deep Learning from scratch 5장 : backpropagation
 Deep Learning from scratch 5장 : backpropagation Deep Learning from scratch 5장 : backpropagation
Deep Learning from scratch 5장 : backpropagationJinSooKim80
 
Linear algebra.pptx
Linear algebra.pptxLinear algebra.pptx
Linear algebra.pptxGeonWooYoo1
 
내가 이해하는 SVM(왜, 어떻게를 중심으로)
내가 이해하는 SVM(왜, 어떻게를 중심으로)내가 이해하는 SVM(왜, 어떻게를 중심으로)
내가 이해하는 SVM(왜, 어떻게를 중심으로)SANG WON PARK
 

Similaire à 벡터 (17)

0124 1 linear_algebra_basic_vector
0124 1 linear_algebra_basic_vector0124 1 linear_algebra_basic_vector
0124 1 linear_algebra_basic_vector
 
Ray-triangle intersection
Ray-triangle intersectionRay-triangle intersection
Ray-triangle intersection
 
정점 변환
정점 변환정점 변환
정점 변환
 
Eigendecomposition and pca
Eigendecomposition and pcaEigendecomposition and pca
Eigendecomposition and pca
 
0131 1 spectral_theorem_transformation
0131 1 spectral_theorem_transformation0131 1 spectral_theorem_transformation
0131 1 spectral_theorem_transformation
 
유니티 고급 과정 -2-
유니티 고급 과정 -2-유니티 고급 과정 -2-
유니티 고급 과정 -2-
 
07. PCA
07. PCA07. PCA
07. PCA
 
점, 선, 면
점, 선, 면점, 선, 면
점, 선, 면
 
입체충돌처리
입체충돌처리입체충돌처리
입체충돌처리
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2
 
컴퓨터 그래픽스 2015-2019년 기말시험
컴퓨터 그래픽스 2015-2019년 기말시험컴퓨터 그래픽스 2015-2019년 기말시험
컴퓨터 그래픽스 2015-2019년 기말시험
 
02.선형변환과 행렬
02.선형변환과 행렬02.선형변환과 행렬
02.선형변환과 행렬
 
Deep Learning from scratch 5장 : backpropagation
 Deep Learning from scratch 5장 : backpropagation Deep Learning from scratch 5장 : backpropagation
Deep Learning from scratch 5장 : backpropagation
 
Linear algebra.pptx
Linear algebra.pptxLinear algebra.pptx
Linear algebra.pptx
 
내가 이해하는 SVM(왜, 어떻게를 중심으로)
내가 이해하는 SVM(왜, 어떻게를 중심으로)내가 이해하는 SVM(왜, 어떻게를 중심으로)
내가 이해하는 SVM(왜, 어떻게를 중심으로)
 
행렬
행렬행렬
행렬
 

Plus de QooJuice

리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
캐릭터 애니메이션
캐릭터 애니메이션캐릭터 애니메이션
캐릭터 애니메이션QooJuice
 
Screen space ambient occlusion
Screen space ambient occlusionScreen space ambient occlusion
Screen space ambient occlusionQooJuice
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage CollectionQooJuice
 
Compute shader
Compute shaderCompute shader
Compute shaderQooJuice
 
Game programming patterns 2
Game programming patterns 2Game programming patterns 2
Game programming patterns 2QooJuice
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patternsQooJuice
 
코루틴(Coroutine)
코루틴(Coroutine)코루틴(Coroutine)
코루틴(Coroutine)QooJuice
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화QooJuice
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)QooJuice
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍QooJuice
 
절차지향 vs 객체지향
절차지향 vs 객체지향절차지향 vs 객체지향
절차지향 vs 객체지향QooJuice
 
Segmentation and Paging
Segmentation and PagingSegmentation and Paging
Segmentation and PagingQooJuice
 
Move semantics
Move semanticsMove semantics
Move semanticsQooJuice
 

Plus de QooJuice (17)

리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
캐릭터 애니메이션
캐릭터 애니메이션캐릭터 애니메이션
캐릭터 애니메이션
 
Screen space ambient occlusion
Screen space ambient occlusionScreen space ambient occlusion
Screen space ambient occlusion
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 
Compute shader
Compute shaderCompute shader
Compute shader
 
Game programming patterns 2
Game programming patterns 2Game programming patterns 2
Game programming patterns 2
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patterns
 
Picking
PickingPicking
Picking
 
코루틴(Coroutine)
코루틴(Coroutine)코루틴(Coroutine)
코루틴(Coroutine)
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
 
부팅
부팅부팅
부팅
 
절차지향 vs 객체지향
절차지향 vs 객체지향절차지향 vs 객체지향
절차지향 vs 객체지향
 
Segmentation and Paging
Segmentation and PagingSegmentation and Paging
Segmentation and Paging
 
Move semantics
Move semanticsMove semantics
Move semantics
 

벡터

  • 2. 벡터(Vector)란? • 크기(magnitude)와 방향(direction)을 모두 가진 수량 • 예) 힘(force), 변위(displacement), 속도(velocity) • 이동해도 크기와 방향이 같으면 같은 벡터다(밑에 그림에서 u = v) (a) 2차원 평면에 그려진 벡터들. (b) 개미가 북쪽으로 10미터 나아가는 이동을 나타내는 벡터들
  • 3. 벡터와 좌표계 • 공간에 하나의 3차원 좌표계를 도입하고 • 모든 벡터를 그 꼬리가 그 좌표계의 원점과 일치하도록 이동하도록 함 • v = (𝑥, 𝑦, 𝑧)로 표기할 수 있으며 부동소수점 값 3개로 표현할 수 있다
  • 4. 벡터와 좌표계 • 같은 벡터 v라도 기준계에 따라 좌표가 다르다
  • 5. 왼손잡이 좌표계 vs 오른손잡이 좌표계 • Directx3D에서는 왼손잡이 좌표계를 사용 • 왼손을 펴서 양의 x축 방향을 가리키게 하고 손가락들을 90° 구부려서 양의 y축 방향을 가리키게 하면 엄지손가락의 방향이 양의 z축 방향에 해당 왼손잡이 좌표계 오른손잡이 좌표계
  • 6. 기본적인 벡터 연산들 • u = (𝑢 𝑥, 𝑢 𝑦, 𝑢 𝑧) 이고 v = (𝑣 𝑥, 𝑣 𝑦, 𝑣𝑧) 일 때 1. 𝑢 𝑥 = 𝑣 𝑥, 𝑢 𝑦 = 𝑣 𝑦, 𝑢 𝑧 = 𝑣𝑧 이면 u = v 2. u + v = (𝑢 𝑥 + 𝑣 𝑥, 𝑢 𝑦 + 𝑣 𝑦, 𝑢 𝑧 + 𝑣𝑧) 3. 𝑘u = (𝑘𝑢 𝑥, 𝑘𝑢 𝑦, 𝑘𝑢 𝑧) 4. u - v = u + (-1 ∙ v) = u + (-v) = (𝑢 𝑥 − 𝑣 𝑥, 𝑢 𝑦 − 𝑣 𝑦, 𝑢 𝑧 - 𝑣𝑧)
  • 7. 기본적인 벡터 연산들 스칼라 곱셈의 기하학적 해석 벡터 덧셈의 기하학적 해석 벡터 뺄셈의 기하학적 해석
  • 8. 길이와 단위벡터 • 벡터의 크기(길이)는 이중 수직 선으로 표기 ( 𝑢 ) • 벡터 u = (𝑥, 𝑦, 𝑧) 일 때 • 𝑢 = 𝑥2 + 𝑦2 + 𝑧2 • 벡터를 방향을 나타내는 용도로만 사용하는 경우에는 길이가 중요하지 않음 • 이런 ‘방향 전용’ 벡터는 길이를 1(단위 길이)로 맞추어 두면 편리함 • 크기가 1인 벡터를 단위벡터(unit vector)라고 부름 • 임의의 벡터를 단위 벡터로 만드는 것을 정규화(normalization)라고 함 • ෢𝑢 = 𝑢 𝑢 = ( 𝑥 𝑢 , 𝑦 𝑢 , 𝑧 𝑢 )
  • 9. 내적 • inner product. 점곱(dot product)이라고도 함 • 스칼라 값을 내는 벡터 곱셈 • u = (𝑢 𝑥, 𝑢 𝑦, 𝑢 𝑧)이고 v = (𝑣 𝑥, 𝑣 𝑦, 𝑣𝑧) 일 때 • u ⋅ v = 𝑢 𝑥 𝑣 𝑥 + 𝑢 𝑦 𝑣 𝑦 + 𝑢 𝑧 𝑣𝑧 또는 • u ⋅ v = 𝑢 𝑣 cos 𝜃 (단, 0 ≤ 𝜃 ≤ 𝜋) 1. 만일 u ⋅ v = 0이면 u ⊥ v이다(즉, 두 벡터는 직교이다) 2. 만일 u ⋅ v > 0이면 두 벡터 사이의 각도 𝜃는 90도보다 작다 3. 만일 u ⋅ v < 0이면 두 벡터 사이의 각도 𝜃는 90도보다 크다
  • 10. 내적 벡터 v와 단위벡터 n이 주어졌을 때 p를 내적을 이용해서 v와 n으로 표현하는 공식 구하기
  • 11. 내적 1. p = 𝑘n을 만족하는 스칼라 𝑘가 존재함을 알 수 있다 2. 𝑛 = 1이므로 반드시 𝑝 = 𝑘𝑛 = 𝑘 𝑛 = 𝑘 3. 삼각함수 법칙들을 적용하면 𝑘 = 𝑣 cos 𝜃 4. 따라서 p = 𝑘n = ( 𝑣 cos 𝜃)n 5. 그런데 n은 단위벡터이므로 6. p = ( 𝑣 cos 𝜃)n = ( 𝑣 ⋅ 1 cos 𝜃)n = ( 𝑣 𝑛 cos 𝜃)n = (v ⋅ n)n 7. ∴ 𝑘 = (v ⋅ n) • 이러한 p를 n에 대한 v의 직교투영(orthographic projection; 또는 정사영)이라고 한다 • p = pro𝑗 𝑛(v) • v를 하나의 힘으로 간주한다면 p는 힘 v 중에서 방향 n으로 작용하는 부분이라고 할 수 있다
  • 12. 내적 • 벡터 w = per𝑝 𝑛(v) = v - p는 힘 v 중에서 n의 수직 방향으로 작용하는 부분 • perp는 perpendicular(수직)을 뜻함 • v = p + w 로 분해될 수 있다 • n이 단위 길이가 아니면, 먼저 n을 정규화해서 단위 길이로 만들면 된다 • 위의 투영 공식에서 n을 단위 벡터 n n 으로 대체하면 좀 더 일반적인 투영 공식이 나온다 • p = pro𝑗 𝑛(v) = (v ⋅ n n ) n n = (v ⋅ n) n 2 n
  • 13. 직교화 • 벡터 집합 {𝑣0, …, 𝑣 𝑛−1}의 모든 벡터가 단위 길이이고 서로 직교일 때 그러한 벡터 집합을 정규직교(orthonormal) 집합이라고 부른다 • 주어진 벡터 집합이 정규직교에 가깝지만 완전히 정규직교는 아닌 경우도 흔히 만나게 되는데 그런 벡터 집합을 정규직교벡터 집합으로 만드는 것을 직교화(orthogonalization)라고 한다 • 3D 그래픽에서는 정규직교 집합으로 시작했지만 수치 정밀도 문제 때문에 집합이 점차 정규직교가 아니게 되는 경우도 생긴다
  • 14. 직교화 • 2차원 • 벡터 집합 {𝑣0, 𝑣1}을 직교화해서 정규직교 집합 {𝑤0, 𝑤1}을 얻는 과정 1. 𝑤0 = 𝑣0으로 시작해서, 벡터 𝑣1이 𝑤0과 직교가 되게 만든다 2. 이를 위해, 𝑤0의 방향으로 작용하는 부분을 𝑣1에서 뺀다 3. 𝑤1 = 𝑣1 - pro𝑗 𝑤0(𝑣1) 4. 서로 직교인 벡터들의 집합 {𝑤0, 𝑤1}이 만들어졌다 5. 𝑤0 과 𝑤1을 정규화해서 단위 길이로 만들면 정규직교 집합이 완성된다
  • 15. 직교화 • 3차원 • 벡터 집합 {𝑣0, 𝑣1, 𝑣2}을 직교화해서 정규직교 집합 {𝑤0, 𝑤1, 𝑤2} 을 얻는 과정 1. 𝑤0 = 𝑣0으로 시작해서, 벡터 𝑣1이 𝑤0과 직교가 되게 만든다 2. 이를 위해, 𝑤0의 방향으로 작용하는 부분을 𝑣1에서 뺀다 3. 𝑤1 = 𝑣1 - pro𝑗 𝑤0(𝑣1) 4. 𝑣2가 𝑤0과 𝑤1 모두에 직교가 되게 한다 5. 이를 위해, 𝑤0 방향으로 작용하는 부분과 𝑤1 방향으로 작용하는 부 분을 𝑣2에서 뺀다 6. 𝑤2 = 𝑣2 - pro𝑗 𝑤0(𝑣2) - pro𝑗 𝑤1(𝑣2) 7. 서로 직교인 벡터들의 집합 {𝑣0, 𝑣1, 𝑣2}가 만들어졌다 8. 𝑤0과 𝑤1, 𝑤2를 정규화해서 단위 길이로 만들면 정규직교 집합이 완성된다
  • 16. 직교화 • 이전 방법을 일반화해서, 𝑛개의 벡터들의 집합 { 𝑣0, …, 𝑣 𝑛−1}을 정규직교 집합 { 𝑤0, …, 𝑤 𝑛−1}으로 직교화할 때는 그람-슈미트 직교화라고 하는 공 정을 적용한다 1. 기본 단계 : 𝑤0 = 𝑣0으로 설정한다 2. 1 ≤ 𝑖 ≤ 𝑛-1에 대해 𝑤𝑖 = 𝑣𝑖 - σ 𝑗=0 𝑖−1 pro𝑗 𝑤𝑗(𝑣𝑖)로 설정한다 3. 정규화 단계 : 𝑤𝑖 = 𝑤 𝑖 𝑤 𝑖 로 설정한다
  • 17. 외적 • Outer product. 가위곱(cross product)이라고도 함 • 외적의 결과는 벡터이다 • 오직 3차원 벡터에 대해서만 정의된다(2차원에서는 없음) • 두 3차원 벡터 u와 v의 외적의 취하면 u와 v 모두에 직교인 또 다른 벡터 w가 나온다 • u = (𝑢 𝑥, 𝑢 𝑦, 𝑢 𝑧)이고 v = (𝑣 𝑥, 𝑣 𝑦, 𝑣𝑧) 일 때 • w = u x v = (𝑢 𝑦 𝑣𝑧 - 𝑢 𝑧 𝑣 𝑦, 𝑢 𝑧 𝑣 𝑥 - 𝑢 𝑥 𝑣𝑧, 𝑢 𝑥 𝑣 𝑦 - 𝑢 𝑦 𝑣 𝑥) • u x v ≠ v x u
  • 18. 외적 • 왼손을 펼쳐서 첫 벡터 u의 방향을 가리킨 상 태에서 손가락들을 둘째 벡터 v의 방향으로 말 아쥐었을 때 엄지손가락이 가리키는 방향이 바로 w = u x v 방향이다. • 이를 왼손 엄지 법칙이라고 부른다
  • 19. 2차원 유사 외적(pseudo 2D cross product) • 2차원에서는 두 벡터의 수직인 벡터가 존재하지 않음 • 그러나 하나의 2차원 벡터 u = (𝑢 𝑥, 𝑢 𝑦)에 수직인 벡터 v는 구할 수 있다 • v = (-𝑢 𝑦, 𝑢 𝑥) • u ⊥ v • u ⊥ -v
  • 20. 외적을 이용한 직교화 1. 𝑤0 = 𝑣0 𝑣0 으로 설정한다 2. 𝑤2 = 𝑤0 x 𝑣1 𝑤0 x 𝑣1 로 설정한다 3. 𝑤1 = 𝑤2 x 𝑤0로 설정한다 4. 이제 벡터 집합 {𝑤0, 𝑤1, 𝑤2}는 정규직교이다
  • 21. 주의할 점 • 이 예는 𝑤0 = 𝑣0 𝑣0 으로 시작했는데, 이는 𝑣0에서 𝑤0으로 가는 방향이 변하지 않고 단지 그 길이만 변함을 뜻한다. 그러나 𝑤1과 𝑤2의 방향은 각 각 𝑣1, 𝑣2와 다를 수 있다. 응용의 성격에 따라서는, 방향이 바뀌지 않을 벡터로 어떤 벡터를 선택하느냐가 중요할 수 있다. • 예를 들어 카메라의 방향을 세 개의 정규직교 벡터 {𝑣0, 𝑣1, 𝑣2}로 표현 할 때, 여기서 셋째 벡터 𝑣2는 카메라가 바라보는 방향을 나타낸다. 이 벡터들을 직교화할 때 그 방향이 변하지 않게 하는 것이 바람직하므로, 이 직교화 알고리즘을 적용할 때에는 𝑣2로 시작하고 𝑣0과 𝑣1을 수정해서 벡 터들을 직교화하는 것이 바람직하다.
  • 22. 점 • 지금까지 살펴본 벡터는 위치(position)를 서술하지 않음 • 그러나 3차원 그래픽 프로그램에서는 공간 안의 어떤 위치를 지정할 수 있어야 함 • 특정 좌표계를 기준으로 표준 위치 에 있는 벡터를 3차원 공간 안의 한 위치를 나타내는 데 사용할 수 있다. • 위치벡터라고 부름 • 벡터의 방향이나 크기가 아니라 벡 터의 머리 끝의 좌표가 중요
  • 23. 점 • 점을 벡터로 표현하면 점에 대해 의미 없는 벡터 연산을 점(위치벡터)에 적용하는 실수를 할 수 있다 • ex) 기하학적으로 두 점의 합은 말이 되지 않음(아핀결합을 이용하면 가능하다고 함) • 그러나 점에 대해서도 의미 있는 벡터 연산들도 존재함 • (그림 a) 두 점의 차 q - p 를, p에서 q로 가는 벡터라고 정의할 수 있음 • (그림 b) 점 p 더하기 벡터 v를 p의 위치를 v만큼 옮겼을 때 도달하는 점 q라고 정의 가능