728x90
반응형

※ 이 글은 인터넷, 책 등을 보고 제가 이해한대로 정리한 것이기 때문에 조금 틀리거나 주관적일 수 있습니다.

※ 미적분에 대한 개념이 꽤 많이 나오기 때문에 한번쯤은 따로 공부하는 것이 이해하기 쉽습니다.

※ 이 글에서 벡터는 빨간색 볼드체로 표기합니다.

 

운동학(運動學)

힘과 운동의 관계는 생각하지 않고 물체의 운동만을 기술하는 방법을 논하는 학문의 분야. 위치의 이동이나 그 시간 변화 등을 논함.

 

그니까 과정(가해지는 힘)은 무시하고 결과(물체의 운동)에 집중하는 것이다.

결과론적인 학문

 

0. 리지드바디와 파티클

더보기

유니티를 접해봤다면 리지드바디와 파티클은 익숙할 것이다. 하지만 운동학에서의 파티클은 조금 다르다.

파티클은 번역하면 입자, 즉 질량은 있지만 크기는 매우 작은 물질이다.

계산을 할 때 무시해도 괜찮을 정도로 크기가 매우 작다.

위 이미지는 이 글과 아무 상관 없습니다.

리지드바디(rigid-body)는 변역하면 강체라고 나온다.

유체와는 반대로 형태가 변화하지 않는 물체이다. (보통 사물을 생각하면 된다. 즉, 고체)

위 이미지는 이 글과 아무 상관 없습니다.

로켓 같이 아주 먼 거리를 이동하는 물체의 궤적을 계산할 때 로켓의 크기는 무시해도 될 만큼 작다.

반대로 총이라면 총알의 궤적은 총알의 크기, 각운동 등에 영향을 받는다.

 

이해하기 어렵다면 아래와 같이 생각하자.

멀리 떨어져서 전체적인 그림을 보면 파티클, 아주 가까이에서 자세히 보면 리지드바디다.

 

1. 속도와 가속도

더보기

1.1 속력과 속도

잠시 중학교 수학의 방정식의 활용 단원를 생각해보자.

거리 = 속력 × 시간

속력 = 거리 / 시간

...

우리는 속력을 구하는 방법을 알고 있다.

이 때 속력은 속도의 크기이고 속도는 속력과 다르게 크기와 방향을 가진 벡터값이다.

식으로 표현하면 아래와 같다.

v = Δs / Δt (평균속도 = 변위 / 시간의 변화량) 

단위로는 km/h, m/s 등이 있다.

 

+변위는 위치변화를 의미한다. 다만, 처음 위치와 최종 위치사이의 직선거리일 뿐 중간 경로는 무시한다. 

1.2 순간속도

우리가 지금까지 배운 속도(or 속력)은 모두 일정거리 동안의 평균 속력이다. 속도의 변화는 알 수 없다.

속도의 변화를 알기 위한 순간속도는 물체의 어떤 한 순간에서의 속도를 말한다.

v = Δs / Δt 에서 시간의 변화량(Δt)가 매우 작은 값이 될 때의 값이 순간속도이다.

 

즉, 순간속도는 변위를 시간에 대해 미분한 결과이다.

더 자세한 설명은 아래 링크 참조 (이 글과 완벽히 연결되지는 않지만 이해에 도움을 준다.)

https://www.youtube.com/watch?v=9vKqVkMQHKk&t=1s

 

1.3 가속도

레이싱 게임에서 가속도(or 가속력)은 자동차의 속도를 얼마나 빨리 올릴 수 있는지를 의미한다.

더 정확히 말하면 평균 가속도이다. (평균속도와 같은 맥락)

 

평균가속도는 시간에 따른 속도의 변화량을 의미하고 식은 아래와 같다.

a = Δv / Δt (가속도 = 속도의 변화량 / 시간의 변화량)

순간속도와 같은 맥락으로 속도의 변화량을 시간에 대해 미분하면 순간 가속도가 나온다.

 

1.4 키네마틱 운동방정식

변위, 속도, 가속도의 관계를 나타낸 것을 키네마틱 운동방적식이라고 한다.

a = dv/dt = d²s/d²t

²는 미분 두번(2차미분)

v dv = a ds

 

가속도, 속도, 변위의 관계

 

2. 등가속도

더보기

이 글에서는 문제풀이를 다루지는 않지만 운동학에서 가장 풀기 쉬운 문제 중 하나가 등가속도가 포함된 문제다.

중력가속도가 그 예시로 중력가속도 g는 9.81m/s²으로 상수 값이다.

가속도가 일정하다면 적분을 통해 순간속도를 쉽게 구할 수 있다. (t초일 때의 속도)

 

t1이 0이라면 더 간단해 진다.

위 수식에 경과시간, 처음 속도, 등가속도만 대입하면 순간속도를 구할 수 있다.

 

또한 속도를 변위에 관한 식으로 만들 수도 있다.

v dv = a ds의 양변을 적분

 

v dt = ds 에 v2 = v1 + at를 대입하면 아래와 같은 결과를 얻을 수 있다.

 

정리하자면 세 가지 식을 알아봤다.

위 세 가지 공식은 모두 가속도가 일정할 때만 유효한 공식이다.

 

3. 가변가속도

더보기

등가속도는 매우 특별한 상황이 아니면 나오기 힘들다. 현실에서 흔히 겪는 상황은 모두 가변가속도이다.

그 예로는 움직이는 물체의 저항력이 있다.

일반적으로 저항력은 속도에 제곱에 비례하고 F=m a에 따라 가속도(a)는 저항력(F)에 따라 변한다.

 

저항력 때문에 생기는 가속도는 아래와 같다.

a = -kv²

-는 물체의 운동방향과 반대임을 의미하고 k는 저항력과 관련된 상수이다. (물체마다 다름)

 

위 식을 a = dv/dt에 대입하면

양변을 적분하면

v²를 v = ds / dt에 대입하고 적분하면

 

s1이 0이라면 아래와 같다.

(위 수식들은 간단한 미적분 공식만 알면 할 수 있다.)

 

위처럼 가변가속도의 문제는 꽤나 복잡하게 나오는 걸 알 수 있다.

또한 현실에서는 다양한 힘을 받기에 훨씬 더 복잡해진다.

 

위 식들을 완벽히 외우거나 알 필요는 없다.

이 글의 목적은 전문적으로 물리를 이해하고 적용시키는 게 아니라 게임 개발에 도움이 될 정도만 아는 것이다.

4. 파티클 운동학

더보기

4.1 2차원 파티클 운동학

1장에서 말했듯이 파티클은 질량은 있으나 크기가 매우 작아 선운동만 고려하는 물체이다.

(즉 계산 할 때 물체의 회전을 고려하지 않는다.)

 

1차원에서는 물체의 운동은 선운동으로 제한되지만

2차원 공간에서는 방향의 개념이 추가되므로 물리량들은 모두 벡터값으로 취급해야한다.

 

이 때 변위, 속도, 가속도 등을 계산할 때는 벡터의 성분을 이용한다.

+x축 방향의 단위 벡터를 i, +y축 방향의 단위벡터를 j라고 하면 속도와 가속도의 벡터는 아래와 같다.

x축 방향의 변위를 x, y축 방향의 변위를 y라고 한다면 변위벡터는 아래와 같다.

위 벡터는 미분 공식에도 적용된다.

 

예제 - 총알의 낙차 계산

간단한 예제를 들어보자.

FPS 게임의 총을 구현할 때 총알에 중력과 물리엔진이 적용됬다면 총알은 실제 조준한 곳보다 아래에 도달한다. 

(굳이 총이 아니라도 앵그리버드 같은 게임에도 적용 시킬 수 있다.)

(총알은 리지드바디로 생각하여 회전운동까지 계산해야하지만 예제 특성상 생략했다.)

 

위 그림에서 2차원 좌표계를 하나 정의해보자.

총구의 끝을 원점(0,0)으로, 왼쪽을 +x축으로, 위쪽을 +y축으로 정의한다.

그러면 중력가속도의 방향은 -y방향이 된다.

계산하기 쉽도록 총알은 공기저항을 받지 않고 바람도 없다고 가정하자.

(나중에 바람과 공기저항에 대해서 다룰 예정)

초기 총알 속도를 vm라고 한다면 x성분은 아래와 같다.

- 공기저항이 없으므로 속도가 유지된다. (가속도 = 0)

- x축 방향의 속도는 vm

- x성분(거리)은 속력(vx) × 시간(t)

 

또한 y축 성분은 아래와 같다.

- y축 방향의 가속도는 중력가속도와 같고 방향은 아래쪽(-)이다.

- y축 방향의 처음 속도는 0이므로 나중속도는 가속도×시간

- y성분(거리)은 1/2×가속도×시간²

 

각각의 성분을 구했으니 변위, 속도 가속도 벡터를 표현할 수 있다.

 

총알이 맞는 순간에 얼마나 아래로 내려갔는가(수직낙차)를 계산할려면

총알이 목표에 도달할 때까지의 시간을 계산해야한다.

 

- hit는 맞췄을 때의 크기이다.

- d는 수직낙차를 뜻한다.

 

실제로 값을 넣어 계산해보자

목표까지의 거리(n) = 400m

총알의 초기속도(vm) = 800m/s

 

위 수식에 대입하면 간단하게 구할 수 있다.

t(hit) = 0.5 sec

d = 1.22625m

즉, 목표보다 약 1.2m 위를 조준해야 한다.

 

4.2 3차원 파티클 운동학

2차원 파티클에서 z축 하나만 추가시키면 3차원 파티클으로 확장된다.

(i, j, k 는 각각 x,y,z 양의 방향 단위벡터이다.)

예제 - 포탄 발사

4.2.1 필요한 정보 구하기

2차원 파티클 예제와 비슷하게 공기저항 및 바람은 없고 포탄을 초기속도를 유지한다고 가정한다.

-> 가속도의 x 성분 0이 된다.

 

또한 포탄의 발사방향(총구속도)이 x축과 평행하지 않을 수도 있으니 포탄의 총구속도 벡터는 아래와 같다.

(i, j ,k는 각각 양의 x, y, z축의 단위 벡터이고 m은 총구(muzzle)의 약자이다.)

vm의 방향은 대포의 방향이 되고 크기는 속도(화약의 양)에 비례한다.

 

 

α(알파)는 xy평면에서의 대포의 각(상하), γ(감마)는 xz평면에서의 대포의 각(좌우)이다.

(yz평면에서의 대포의 각은 대포의 원통이 회전하는 거라 영향을 주지 않는다.)

 

Vm과 L의 방향이 같기 때문에 대포의 방향코사인은 아래와 같다.

(방향코사인은 벡터의 방향만을 나타내기 위해 크기를 1로 만든 벡터이다.)

(자세한 설명은 링크 참조 https://www.youtube.com/watch?v=SGmkYWIXiig)

 

대포의 끝을 나타내는 벡터 L(Lx,Ly,Lz)의 성분은 아래와 같다.

 (위는 대포를 xy평면과 xz평면에 투영시켜 구할 수 있다.)

 

그러면 각 축의 방향코사인은 아래와 같다.

 

4.2.2 각각 성분 구하기

계산에 필요한 정보들을 구했으니 변위, 속도, 가속도 벡터의 x,y,z성분들을 구해보자

x 성분의 가속도는 0이고 속도(Vx)는 (포탄속도의 크기(Vm) × x축의 방향코사인) 이다. 

속도(Vx) × 시간(t) = 거리(x)

 

y 성분의 가속도는 중력가속도이고 속도는 초기속도(Vmy) + (가속도 × 시간) 이다.

 

y 성분 변위에는 대포의 끝이 올라가 있으므로 처음 위치(Yo)를 고려해야 한다.

(Yb는 대포 시작부분의 높이, Lcosα는 Ly(대포의 끝의 y좌표)이다.)

 

 

z성분은 x성분과 같은 방식으로 구한다.

 

정리하면 이 예제의 포탄의 변위, 속도, 가속도 벡터는 아래와 같다.

어려워 보이지만 위에서 구한 식들을 대입한것 뿐이다.

 

(위 예제는 Physics for Game Developers의 Cannon예제로 코드는 아래 링크에서 받을 수 있습니다.)

https://resources.oreilly.com/examples/0636920012221

 

5. 리지드바디 운동학

더보기

파티클 운동학에서 사용했던 변위, 속도, 가속도 공식은 리지드바디 운동학에서도 똑같이 적용시킬 수 있다.

차이점이라면 리지드바디의 운동을 계산할 때는 질량중심을 기준으로 선운동을 계산하는 것이다.

 

그렇다면 리지드바디의 운동을 계산하는 과정은 크게 두가지이다.

물체의 질량중심의 선운동과 물체의 각운동을 계산하는 것이다.

 

이 글에서는 깊게 파고들지 않기 때문에 물체의 움직임을 한 평면 위로 제한하는 평면운동을 다룬다.

5.1 로컬좌표계

파티클에서 사용했던 좌표계는 월드좌표계로 어떤 물체든 절대적인 좌표계이다.

반대로 리지드바디에서 추가되는 로컬좌표계는 물체의 질량중심을 원점으로 하는 좌표계이다.

Ω는 두 좌표계 사이의 각도차로 흔히 오일러 각이라고 한다.

(일반적으로 3차원 운동은 3개의 오일러각를 가진다.)

 

5.2 각속도와 각가속도

각속도와 각가속도는 일반 속도와 가속도와 크게 다르지 않다. 선운동 대신 각운동에서의 속도와 가속도이다.

각변위, 각속도 각가속도는 각각 Ω, ω, α로 나타내고 단위는 rad(라디안), rad/s, rads=/s²이다.

 

각변위와 각속도, 각가속도의 관계는 아래와 같다.

어디서 본것 같다면 그거 맞다.

또한 키네마틱 운동방정식과 비슷하게 키네마틱 회전공식을 구할 수 있다. (각가속도가 일정할 때)

이것도 어디선가 본것같다면 그거 맞다.

 

5.3 리지드바디 회전

리지드바디가 어떤 축을 중심으로 회전할 때 그 물체를 구성하고 있는 모든 파티클도

같은 축을 중심으로 원을 그리며 회전한다.

그러면 파티클의 선운동은 물체의 각운동으로부터 구할 수 있다.

가운데 커다란 점은 질량중심(여기선 회전축), 원호 위의 점은 임의의 한 파티클이다.

리지드바디에 있는 한 파티클이 회전하면서 그리는 원호의 길이는 아래와 같다.

 

C(원호의 길이) = r(반지름) × Ω(중심각)

위 식을 시간에 대해서 미분하면

dC/dt = r dΩ/dt 이 된다.

 

리지드바디의 각속도보부터 파티클의 선속도를 구하는 공식이 나왔다.

또한 위 공식은 아래와 같이 쓸 수 있다.

v = rω

 

이 속도 벡터는 파티클이 그리는 원에서의 접선벡터가 된다.

v = r ω 를 시간에 대해서 미분하면

dv/dt = r dω/dt 가 나오고 식은 αt = r α 라고 쓸 수 있다. (αt 는t초 후의 가속도)

 

리지드바디의 회전으로 인한 파티클의 가속에 영향을 주는 것은 구심가속도도 포함된다.

구심가속도는 선속도에 수직이고 방향은 회전축을 가리킨다.

(구심가속도는 구심력의 가속도를 말한다.)

원호를 따라 각속도의 방향을 따라 오른손을 감싸면 엄지는 각속도의 방향과 평행하다.

구심가속도 an은 아래와 같다.

an = v²/r (v는 접선속도)

 

또한 위 식을 접선속도 식에 대입하면

an = r ω² 이다.

 

접선속도 벡터는 위 그림에서 ω과 r의 외적이므로 아래와 같이 쓸 수 있다.

v = ω × r(×는 외적기호)

 

각각 접선가속도와 구심가속도를 구하는 식에 대입하면

at = α × r

an = ω × (ω × r)  된다.

 

 

이동하면서 회전하는 리지드바디의 한 파티클의 속도는 아래와 같다.

 

 

빨간선은 물체(질량중심)의 이동경로이고 Vcg는 그 속도이다.

한 파티클의 속도 벡터 Vr는 Vt와 Vcg의 합이므로

Vr = Vcg + Vt

Vr = Vcg + (ω×r)

이다. 

 

또한 가속도 벡터 ar은 

ar = acg + an + at

ar = acg + (ω × (ω × r)) + (α × r)

이 된다.

 

위와 같이 리지드바디의 파티클의 각운동과 선운동에 대한 모든 키네마틱 특성을 계산할 수 있다.

 

'게임개발을 위한 TMI > 물리학 기초' 카테고리의 다른 글

기본 개념 정리  (0) 2020.04.11