게임수학과 물리
1. 백터
2. 항등백터
3. 백터의 크기(Norm)
4. 단위백터(백터의방향)
5. 활용
백터의길이
sqrt(x*x + y*y + z*z));
단위백터(백터의방향)
Len = 단위백터
(x/Len, y/Len, z/Len)
6.벡터와 스칼라와의 곱
7. 벡터의 투영
8. 활용
삼각형의 면적계산
1. 백터
2. 항등백터
3. 백터의 크기(Norm)
여기서부터 삼각함수가 활용되는듯~
V = [Vx, Vy]
*피타고라스의 정리를 이용
||V|| = √(V²x, V²y)
V = [Vx, Vy]
*피타고라스의 정리를 이용
||V|| = √(V²x, V²y)
4. 단위백터(백터의방향)
√U²x+U²y = 1
단위백터 = V / V의크기
U = V / ||V||
U = V/ √V²x+V²y
V = ||V|| * U
V = (√V²x+V²y) * U
단위백터 = V / V의크기
U = V / ||V||
U = V/ √V²x+V²y
V = ||V|| * U
V = (√V²x+V²y) * U
5. 활용
백터의길이
sqrt(x*x + y*y + z*z));
단위백터(백터의방향)
Len = 단위백터
(x/Len, y/Len, z/Len)
6.벡터와 스칼라와의 곱
벡터와 스칼라의 곱은 원래 벡터의 크기를 스칼라만큼 곱해주는 것으로 k가 스칼라, A가 벡터일때 벡터와 스칼라와의 곱을 벡터의 성분으로 표현한다.
rA = Ar = [ rA1, rA2, rA3, ..........rAn]
7.내적
A * B = ||A|| ||B||cos(세타)
A = B 같다면 cos(세타) = 1
cos(세타) = (A*B) / (||A|| * ||B||)
(세타) = cos-¹ * ((A*B) / (||A|| * ||B||))
0<- (세타) < 90 일때는 코사인이 항상 양수
90< (세타) <- 180 일때는 코사인이 항상 음수
(세타) =90 일때는 내적이 0
rA = Ar = [ rA1, rA2, rA3, ..........rAn]
7.내적
A * B = ||A|| ||B||cos(세타)
A = B 같다면 cos(세타) = 1
cos(세타) = (A*B) / (||A|| * ||B||)
(세타) = cos-¹ * ((A*B) / (||A|| * ||B||))
0<- (세타) < 90 일때는 코사인이 항상 양수
90< (세타) <- 180 일때는 코사인이 항상 음수
(세타) =90 일때는 내적이 0
7. 벡터의 투영
벡터 A를 두개의 단위 벡터 성분으로 분해
벡터 B로 투영해야 할때
내적을 유용하게 사용할수 잇다.
벡터 B로 투영해야 할때
내적을 유용하게 사용할수 잇다.
8. 활용
벡터의 내적(스칼라)
A · B
Ax * Bx , Ay * By, Az * Bz,
i+ j+ k = 내적(스칼라)
세타 = cos-¹(내적) 내적을 역행렬 cos 하면 세타가 구해진다
역행렬
벡터의 분해
vec2에 평행한 vec1의 분해벡터
= A'B(내적) = vec1.Dot(vec2)
= ||B||² = vec2(크기) * vec2(크기)
여기에 스칼라값을 B에 곱해줘야 함
= A투영B = vec2벡터 * (AB내적 / A(크기) * A(크기)):스칼라 값임
A · B
Ax * Bx , Ay * By, Az * Bz,
i+ j+ k = 내적(스칼라)
세타 = cos-¹(내적) 내적을 역행렬 cos 하면 세타가 구해진다
역행렬
벡터의 분해
vec2에 평행한 vec1의 분해벡터
= A'B(내적) = vec1.Dot(vec2)
= ||B||² = vec2(크기) * vec2(크기)
여기에 스칼라값을 B에 곱해줘야 함
= A투영B = vec2벡터 * (AB내적 / A(크기) * A(크기)):스칼라 값임
9. 외적
A x B = ( ||A|| ||B|| sin(세타)) E(단위백터)
3차원인경우
A x B = (AyBz - AzBy, AzBx - AxBz, AxBy - AyBx)
1 2 3
A = x y z
B = x y z
x = 32 - 23
y = 31 - 13
z = 12 - 21
벡터 A = [A1, A2, A3]
{0 -A3 A2}
AA= {A3 0 -A1}
{-A2 A1 0}
A x B = (AA)b
3차원인경우
A x B = (AyBz - AzBy, AzBx - AxBz, AxBy - AyBx)
1 2 3
A = x y z
B = x y z
x = 32 - 23
y = 31 - 13
z = 12 - 21
벡터 A = [A1, A2, A3]
{0 -A3 A2}
AA= {A3 0 -A1}
{-A2 A1 0}
A x B = (AA)b
3차원에서 두개의 축방향 단위 벡터를 통해 나머지 하나의 축방향 단위 벡터를 구할 수 있다.
x X y = z
y X z = x
z X x = y
y X x = -z
z X y = -x
x X z = -y
y X z = x
z X x = y
y X x = -z
z X y = -x
x X z = -y
외적의 응용
표면의 법선벡터(노말벡터) 계산
삼각형의 면적계산
A x B = (||A|| ||B|| sin(세타))E (E는 AxB 방향의 단위 벡터
||N|| = ||U x V|| = ||U|| ||V|| sin(세타)
ABC 의 면적 = 1/2 ||U|| ||V||sin(세타)
= 1/2 ||U x V||
= 1/2 ||N||
||N|| = ||U x V|| = ||U|| ||V|| sin(세타)
ABC 의 면적 = 1/2 ||U|| ||V||sin(세타)
= 1/2 ||U x V||
= 1/2 ||N||
응용
void CVector::Corss( const CVector& u, const CVector& v)
{
void CVector::Corss( const CVector& u, const CVector& v)
{
x = u.y * u.z - u.z * v.y;
y= u.z * v.x - u.x * v.z;
z= u.x * v.y - u.y * v.x;
y= u.z * v.x - u.x * v.z;
z= u.x * v.y - u.y * v.x;
}
'DirectX > 수학/물리' 카테고리의 다른 글
속도와 속력 (0) | 2010.07.19 |
---|---|
게임수학과 물리 - 1행렬 (0) | 2010.06.10 |
http://www.viper.pe.kr/cgi-bin/moin.cgi/TitleIndex (0) | 2010.06.09 |
삼각함수~ (0) | 2010.06.09 |
삼각함수 항등식 (0) | 2010.06.09 |