[0528 석재호]게임을위한기초수학과물리
TRANSCRIPT
게임을 위한 게임을 위한 기초수학과 물리 기초수학과 물리
데브루키 꿜라 석재호
개 요개 요
게임 내 객체 표현을 위한 기초적인 수학적 개념에
대하여 다시 떠올려보는 시간을 준비했습니다 간단한 수식들이지만 , 왜 그렇게 되는지를 공부해 보았습니다 저처럼 게임 수학을 처음 공부하는 학생에게
일부라도 참고할 수 있는 자료가 되었으면좋겠습니다
수식들이 . . 지루하지 않은 시간은 포기했습니다
순 서순 서
벡터와 공간
2 jo ints reac h IK
구 충돌 다루기
벡 터벡 터
기하학에서의 벡터기하학에서의 벡터
게임에 사용되는 벡터는 게임에 사용하기에 적 합한 부분집합 ( 실수 , 유클리드법 )
공간 내 객체정보 표현은 벡터와 점 두 가지를 통해 가능
벡터는 크기와 방향을 , 점은 위치를 가짐
A B C
벡터에는 위치가 없다
A 와 C 는 같은 크기와 방향을 가지므로 동일한 벡터이다
(( 실실 )) 벡터 공간벡터 공간
N 개의 실수의 순서쌍으로 표현되는 공간 모든 실수 x, y 에 대해 ( x, y) - 2 차원 벡터공간
모든 실수 x, y, z 에 대해 ( x, y, z ) – 3 차…원
벡터공간은 이에 대해 닫혀있는 연산 2 개로정의
6) 벡터간 덧셈7) 스칼라 곱
벡터공간의 연산벡터공간의 연산
1) 벡터간 덧셈 벡터공간 V 안에 임의의 u, v 에 대해서
u + v 가 V 안에 있다( u0, u1) + ( v0, v1) = ( u0 + v0, u1 + v1)
6) 스칼라 곱셈 실수 a, V 내의 v 에 대해서 av 가 V 안
에 있다a( v0, v1) = ( av0, av1)
벡터의 선형결합벡터의 선형결합
벡터공간에 닫힌 두 연산을 통해 동일한 공간에서
유효한 벡터들을 만들어낼 수 있음
새로운 벡터 v = a0v0 + a1v1 + a2v2 + … “ ” 이를 선형결합 이라고 한다
벡터의 선형결합벡터의 선형결합
선형 종속과 선형 독립 벡터의 집합 S = { v0, v1, v2 … } 에서
어떤 벡터가 다른 벡터들의 선형결합으로 표현이 가능하다면
“ ”그 벡터는 선형종속적 “ ” 그렇지 않다면 선형독립적 이라고 한다
선 형 종 속 사 례선 형 종 속 사 례
세 벡터는 다른 벡터들의 선형결합으로 표현 가능
c = 0. 2 * a + 0. 2 * ba = 5 * c - bb = 5 * c - a
a( 1, 4 )
b ( 4, 1 )
c ( 1, 1 )
선 형 독 립 사 례선 형 독 립 사 례
a 와 b 는 선형 결합을 통해 서로를 표현할 수 없
음- > 서로에 대해 선형독립
a( 0, 1 )
b ( 2, 0 )
선형독립과 기저선형독립과 기저
벡터공간 V 에서 선형독립인 벡터들의 집합을“ ” 기저 라고 한다
벡터공간의 차원은 기저 벡터의 개수와 동일하다
V 내의 모든 벡터는 기저벡터들의 선형결합으 로
표현이 가능하다
기저로 표현기저로 표현
녹색 벡터가 기저벡터의 역할
기저벡터가 2 개이므로 이는 2 차원 벡터공간이다
크기 1 을 가지는 기저를 표준 기저라고 한다
B2( 0, 1 )
a ( 1, 2 )
B1( 1, 0 )
기저로 표현기저로 표현
기저공간의 한 벡터는 기저들의 선형결합으로표현
이전 그림에서는 a = 1 * B 1 + 2 * B2
벡터에 대한 선형결합식은 위와 같이 유일하다 때문에 선형결합식 대신 계수의 순서쌍만으로 표현이 가능하다
a = ( 1, 2)
기저의 의미 기저의 의미 = = 좌표계좌표계
로컬 , 월드 , 뷰 , 투영 등의 좌표계는 기저벡터들로 구성되는 기저공간
기저벡터들은 서로 선형독립 , 즉 직교해야 한다
공간 내 벡터들에 대한 표현식이 유일해야 좌표계로서의 역할이 가능해진다
이 때문에 좌표축 벡터 계산 시 직교화가 필요
벡터의 내적벡터의 내적
V W = v0 * w0 + v1 * w1 + v2 * w2 = | | v | | * | | w | | * c os @ ( @ 는
두 벡터의 내각 )V V = v0 * v0 + v1 * v1 + v2 * v2 = | | v | | ( @ = 0 이므로 c os @
= 1 )
벡터의 크기가 1 이라면 ( unit vec tor)V W = 1 * 1 * c os @ = c os @
정규화된 벡터가 연산에 유리V, W 만 알고있으면 ac os 통해 바로 내각 알
수 있음
.
2.
.
벡터의 외적벡터의 외적
내적의 결과는 실수 , 외적의 결과는 벡터V X W = ( v1 * w2 – v2 * w1, v2 * w0 –
v0 * w2, v0 * w1 – v1 * w0)
V V0 V1 V2 V0W W0 W1 W2 W0V X W 0 1 2
외적의 결과는 두 벡터 모두와 수직인 벡터가된다
벡터의 외적벡터의 외적
V
W
V X W
엄지
검지
중지
검지와 중지가 180 도 이상 벌어지는 분에게는
혼란스러운 방식이 될지도 모릅니다
오른손 기준
벡터의 외적벡터의 외적
두 벡터의 외적의 크기는 이들이 만드는 평행사변
형의 면적이 된다
| | V X W | | = | | V | | * | | W | | * s in@
벡터의 외적벡터의 외적
평행사변형 넓이 = 가로 * 높이 = | | V | | * | | H | | = | | V | | * | | W
| | * s in@ = | | V X W | |
단위벡터의 외적이 단위벡터가
되지는 않는다 ( < = 1 )
W
V
H
@
내적내적 , , 외적의 이용외적의 이용
내각 평가if V W > 0 then @ < 2 / PI if V W < 0 then @ > 2 / PIif V W = 0 then @ = 2 / PI ( 직교 )
크기에 상관없이 c os @ 가 +, - 를 결정
벡터의 정규화가 필요치 않아 효율적
.
.
.
내적내적 , , 외적의 이용외적의 이용
평행한 벡터 평가 역시 내적이 효율적일 것 같지만
벡터들이 정규화 되지 않았다면 외적이 빠름
내적 방식 : | | v | | * | | w | | = v w 이면평행
계산 간략화 위해 양변 제곱하면 곱셈 12 개 , 덧셈 6 개 사용
외적 방식 : ( ( v x w ) ( v x w ) ) = 0 이면평행
곱셈 9 개 , 덧셈 2 개 , 뺄셈 3 개 사용
.
.
내적내적 , , 외적의 이용외적의 이용
벡터는 방향과 크기를 가진다
A 를 B 에 투영하는 것은B 의 방향과B 상에서의 A 크기 를 가지는
벡터를 만드는 것
A
B
C
@
투 영
내적내적 , , 외적의 이용외적의 이용
B 의 방향 단위벡터는 벡터의
방향 성분만을 가짐- > B 를 정규화하면 끝
= - - - - - - - -
A
B@
정규화된B
( 크기 1)
B | |
B | |
내적내적 , , 외적의 이용외적의 이용
투영된 A 의 크기 = | | A | | * c os @
= - - - - - - - - -
A
B@
A B
| | B | |
.
내적내적 , , 외적의 이용외적의 이용
둘을 곱하면 . .
C = - - - - - - - - * - - - - - - - -
= A * - - - - - - - - - - - - - -
애초에 B 가 단위벡터라면 = A * B B ( 간단 )
A
B@
A B
| | B | |
. 정규화된
B
C
B | |
B | |
B | |
B | |
B | |
B | |
.
.
내적내적 , , 외적의 이용외적의 이용
외적 이용한 회전각 알아내기
U
U x V
V
| | U x V | | = | | U | | * | | V | | * s in@
U, V 가 단위벡터라면| | U x V | | = s in@@ = as in( | | U x V | | )
내적에 비해 유리한 점은 외적 벡터 자체가
회전축이 되어 구한 각도로 바로 회전 적용
가능
@
내적내적 , , 외적의 이용외적의 이용
그람 - 슈미트 직교화 벡터 집합을 정규직교가 되게 만드는 법 기저벡터들의 선형독립이 깨질 경우 사용 가능
n 개의 벡터 v0 ~ v( n- 1) 을 정규직교 기저 w0 ~ w( n- 1) 로 만들기
내적내적 , , 외적의 이용외적의 이용
1 ) w0 에는 그냥 v0 대입
2 ) w1 = v1 – ( v1 을 w0 에 투영한 벡터 )
w0
v1w1
내적내적 , , 외적의 이용외적의 이용
3 ) w2 = v2 – ( v2 를 w0 에 투영한 벡터 )– ( v2 를 w1 에 투영한 벡터 )
w0v2
w1
w2
내적내적 , , 외적의 이용외적의 이용
생성된 정규직교벡터들에 모두 직교가 되도록N 번째 까지 만드는 과정
w( n) = v( n) – ( ∑ v( n) 을 w( I ) 에 투영 한 벡터 )
n - 1
I = 0
삼 중 적삼 중 적
U ( W x V ) = 세 벡터가 이루는 평행사변형 체 부피
U x ( V x W ) = 기저 생성 위한 또 다른 방법U 와 V 가 주어진다면 . . U x V 로 직교 벡터 생성
삼중적으로 U 와 U x V 모두와 직교하는 벡터생성
3 차원에서의 직교가 만들어진다( U, U x V, U x ( U x V) )ex) 시선벡터와 월드 y 로 카메라 view, up,
s ide 만들기
.
행 렬행 렬
…음스케일 , 회전 , 이동
좌표계 변환 이런게 어떻게 행렬로 계산이 가능한지
2 joints IK2 joints IK
IK(Inverse Kinematics)IK(Inverse Kinematics)
관절 수가 3 이상인 체인에 대한 대표적인 방법들이
있지만 여기서는 코사인 법칙과 벡터 연산을 이용한
2 개 이하의 관절에 대한 제한적이고 실용적인IK 를설명하겠습니다
사람의 팔과 다리 등이 대상이 됩니다( 어깨와 팔꿈치 )( 골반과 무릎 )
문 제 보 기문 제 보 기
흰색 벡터를 뼈라고 볼 때 빨간 관절이 어깨 , 허벅지 녹색 관절이 팔꿈치 , 무릎에 해
당
녹색은 실제로 회전 축이 1 개로 자유도가 제한되어 있지만 아니어도 문제에 크게
영향은 없습니다
문 제 보 기문 제 보 기
문제는 루트인 빨간 관절의위치 ( 골반 ) 와 타겟 점이 주어졌
을 때 무릎과 허벅지를 잘 구부려서
발이 타겟에 가도록 하는 것입니다
가 타겟입니다
Reach(Reach( 거리거리 ) ) 단계단계
먼저 거리를 맞추겠습니다
골반에서 타겟까지의 거리가 골반에서 발까지의 거리와 일치해야 합니다
무릎 각도를 조정하면 됩니다 일단 거리가 맞으면
그 다음 골반 을 돌려서 위치만 맞추면 되는 식입니다
Reach(Reach( 거리거리 ) ) 단계단계
골반과 타겟 간 거리가 d 일 때 무릎의 내각 @ 구하기
코사인 법칙 이용 : C = A + B - A * B * c os @
d = U + V - | | U | | * | | V | | * c os @ 본의 길이는 고정되므로 U 와 V 의 크기를 따로 저장해 서 쓰면
위 연산이 벡터가 아닌 부동소수점 실수 연산이 된다
2
- V ( 방향이 반 대 )
U
d
2 2
@
22 2
Reach(Reach( 거리거리 ) ) 단계단계
U 와 V 의 외적은 두 벡터에 수직입니다
외적 벡터를 회전축으로 삼고 구한 각도만큼 돌리면
아래 그림처럼 골반과 발 간 거리가
골반과 타겟간 거리와 동일해집니다
하지만 아직은 발이 타겟 위에 없네요
회전 단계회전 단계
남은 문제는 허벅지 관절을 회전시켜
발을 타겟에 올리는 것입니다
U 와 V 의 내각과 회전축을 구하면됩니다
외적을 이용한 회전각 구하기가 떠오르네요 축과 회전각 모두
구할 수 있습니다
U
V
회전 단계회전 단계
캐릭터가 발을 타겟에
엣지 있게 올렸습니다
구의 충돌구의 충돌
구의 충돌구의 충돌
충돌 판정이 아닌 충돌 반응에 대한 내용입니다
운동량 보존 , 운동에너지의 보존 두 식을 이용해 구의 충돌 이후 속도를 구합니다
운동량의 보존운동량의 보존
두 물체가 충돌하기 전과 후의 운동량의 총합은같다
운동량 P = m * v ( m : 질량 , v : 속도 )
P + P = P ’ + P ’ ₁ ₂ ₁ ₂
m * v + m * v = m * ₁ ₁ ₂ ₂ ₁ v’ ₁ + m * ₂v’ ₂
구하고자 하는 값이 v’ , v’₁ ₂ 두개 , 식이 하 나 더 필요
완전 탄성 충돌완전 탄성 충돌
운동에너지 = mv ½ ² 운동에너지 총합도 보존된다
m * v + m * v ½ ₁ ₁ ² ½ ₂ ₂ ² = m * ½ ₁ v’ ₁ + m * ² ½ ₂
v’ ₂ ² 운동량 보존 식과 연립하면
v’ , v’₁ ₂ 를 구할 수 있다
. . 수식이 화면의 대부분을 채우는 상황을 막기위해 꼭 필요한 부분만 보여드리겠습니다
완전 비탄성 충돌완전 비탄성 충돌
m * v + m * v ½ ₁ ₁ ² ½ ₂ ₂ ² = ( m + m ) * ½ ₁ ₂ v’ ²
충돌 이후 같이 운동하므로 구할 속도는 하나
탄성 계수탄성 계수
완전 탄성 충돌 식 정리m ( v - v‘ )₁ ₁ ₁ = - m ( v - v‘ )₂ ₂ ₂ // 운동량m ( v - v‘ )₁ ₁ ₁ ( v + v‘ )₁ ₁ // 운동에너지
= - m ( v - v‘ )₂ ₂ ₂ ( v + ₂v‘ )₂
위 두 식을 하나로 정리하면
- - - - - - - - - - - - - - - - - - - = 1
- ( v‘ - ₁v‘ )₂
( v - v )₁ ₂
탄성 계수탄성 계수
비탄성 충돌의 경우
- - - - - - - - - - - - - - - - = 0
이로부터 위 식이 탄성계수 e 를 구하는 식이라 는 것을
알 수 있다 ( e = [ 0, 1 ] )
- ( v‘ - ₁v‘ )₂
( v - v )₁ ₂
최종 속도최종 속도
탄성계수 식과 운동량 보존의 법칙을 연립해 최종적인 식을 구할 수 있다
v‘ = ₁- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - -
v‘ = ₂- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - -
- ( m - em ) v + ( 1 + e )₁ ₂ ₁m v₂ ₂
( m + m )₁ ₂- ( m - em ) v + ( 1 + ₂ ₁ ₂
e ) m v₁ ₁ ( m + m )₁ ₂
지금까지 구한 것은지금까지 구한 것은
하나의 선 상에서 일어난 충돌에 대한 속력 계산 . .
속도가 아닌 속력 , 이것만으로는 쓸 수 없습니다
2, 3 차원에서의 충돌 방향을 구할 수 있어야 합니다
… 너무 지겨우시겠지만 복잡한 산수는 끝났고 벡터 투영 연산만이 남아있을 뿐이니깐 조금만
더 . .
구의 반사 벡터 구하기구의 반사 벡터 구하기
2, 3 차원에서 두 구의 충돌을 1 차원 문제로 바꾸기
중점 연결 시 그에 수직인 성분은 충돌 영향 없다
수평 성분을 가지고 1 차원 충돌 문제를 풀면 해결
중점연결선 그 선에 수직
이동 벡터
구의 반사 벡터 구하기구의 반사 벡터 구하기
기존 벡터 – 투영한 벡터 + 계산된 1 차원 반사벡터
v v2
v1p
v2p
V1p’ V2p’
V1’
V2’
구의 반사 벡터 구하기구의 반사 벡터 구하기
투영 벡터인 v1p , v2p 는v1, v2 를 중심점 연결벡터에 투영해 구합니다n 이 정규화된 중심점 연결벡터라고 하겠습니다
이 투영된 벡터들을 아까 본 일차원 충돌 식에 대입하면 v1p’ , v2p’ 를 구할
수 있고 이를 정리하면
v1’ = v1 + ( v1p’ – v1p ) nv2’ = v2 + ( v2p’ – v2p ) n 이 됩니다
…참아주셔서 감사합니다