Post Lists

2018년 8월 24일 금요일

Physics, Part 2: Angular Effects

http://chrishecker.com/images/c/c2/Gdmphys2.pdf

Physics, Part 2: Angular Effects
나는 그냥 무거운 어떤 걸로 문을 막아놓고 싶다. 그래서 나쁜 녀석이 못들어오게 말이다. 그것은 요구하기에 너무 한가? 나는 조심스럽게 놓아진 폭발물로 그의 차를 뒤집고 싶다. 나는 부딪히기전에  내가 묶여진 곳에 큰 장비를 넣고싶고, 나는 그의 성을 보호하는 벽에 멋있게 불타는 선물을 날려버리기 위해 시소같은 것을 만들고 싶다. 너는 나의 적이 내가 이러한 것들을 하지 못하게 하는 사람으로 생각할지도 모르지만, 나를 멈추게 하는 사람은 실제로는 게임 물리 엔진 뒤의 프로그래머이다. 이러한 작업들의 중심부에 angular effect가 놓여있기 때문이다. 몇 가지 게임들은 오늘날 angular effects를 모델링하려고 한다. 그것들을 옳게 하려는 것은 물론이고.

오늘날의 게임에서 angular (너는 rotational이라고 부르기도 한다) effects를 위한 지원의 부족에 대한 주된 이유는, 프로그래머들이 angular physics가 이해하고 구현하기에 어렵다고 인지한다는 것이다. 고등학교 물리 수업들 (우리는 거기에서 모두 F = ma를 배웠다)은 보통 angular effects를 다루지 않는다. 그래서 한 오브젝트에 적용된 힘을 그 오브젝트에 대한 회전으로 바꿀지에 대한 것이 바로 명확하지는 않다. angular motion의 역학은 선형 움직임의 역학보다 다소 이해하기에 어렵지만. 그것들은 그렇게 복잡한 것은 아니다. 우리가 이전 칼럼에서 다루었던 material을 기반으로 linear physics engine을 구현할 수 있는 누구나 이 칼럼에 있는 정보를 기반으로 angular effects를 지원하는 것을 구현할 수 있을 것이다.







Recap(개요)
내가 단일 주제에 대한 시리즈 칼럼을 쓸 때 마다, 나는 항상 새로운 것을 시작하기 전에 나의 지난 칼럼을 다시 읽는다. 그래서 나는 내가 어디에서 시작할 지를 알 수가 있다. 나는 물리에서 이 시리즈의 첫 번째 부분을 완료했는데, 우리는 많은 기반을 다루었다, 어떤 코드나 레퍼런스도 없이! 우리가 시작하기전에, 빠르게 지난 시간의 것들을 다시 봐보자

Table 1은 linear rigid body dynamics의 중요한 결과들을 포함한다. Eq.1은 위치 벡터 (r로 표기되는), 속도 벡터(v), 그리고 가속도 벡터(a)가 모두 도함수와 관련되어있다는 것을 보여준다 (그리고 반대 방향으로 적분과). reminder로서, 우리는 시간에 대한 미분을 점이 찍어진 벡터로 표현한다. 그래서 dot(r)은 dr/dt와 같고, dot(dot(r))은 2차 도함수와 같다. Eq.2는 힘이 linear momentum(선형 운동량, 질량 * 속력), 질량, 그리고 가속도와 어떻게 관련있는지를 보여준다. Eq.3은 질량의 중심(center of mass, CM)의 정의를 준다. 이것은 모든 질량과 거리가 서로 균형을 이루는 지점이다. Eq.4는 rigid body에 대한 총 linear momentum(선형 운동량)이 모든 운동량의 합계인 것을 말하고, 우리에게 운 좋게도, CM의 운동량과 동일하다. Eq. 5은 가장 중요한 것이다; 그것은 우리의 오브젝트의 CM의 가속도가 총 힘과 관련되어있다는 것을 보여주기 위해 Eq. 4를 사용한다. - 우리의 오브젝트에 현재 작용하는 모든 힘들의 벡터 합 - 간단한 스칼라로, 오브젝트의 총 질량이다.

그래서, 지난 칼럼의 결과를 요약하기 위해서, 우리는 그 body에 (중력같은 것을 포함해서, 그 나쁜 녀석의 tractor beam, 근처 폭발, 우리의 엔진의 thrust, 무엇이든) 적용되는 모든 힘들을 합하여, 우리의 CM에 대한 총 힘을 찾는다. 그러고나서, 우리는 이것을 CM acceleration을 얻기위해, 이 벡터 합을 총 질량으로 나누고, 그 가속도를 시간에 대해서 적분한다 (지난 칼럼의 마지막에 언급한 numerical integration 기법을 사용하여). 우리의 body의 새로운 속도와 위치를 얻기 위해서.

비록 Eq.5가 좋은 작업물일지라도, 너는 그것이 그 몸에 대한 힘이 어디에서 작용하는지에 대한 어떠한 개념을 포함하지 않는다는 것을 알 것이다. 그리고 이것은 그러한 힘들이 어떻게 그 몸을 회전시키는지 알아내는데 있어서 중요한 부분이다. Eq.5는 잘못되지는 않았다 - 그것은 정확히 linear acceleration을 계산하기 위해 올바르다 - 우리는 그냥 그 이야기의 절반을 놓치고 있다. 그러나 그 시작을 해보자...

What's Your Angle?
그 마지막 칼럼은 회전을 무시했었다. 그래서 우리는 오직 위치 벡터와 2D에서 우리의 rigid body의 설정을 묘사하기 위해 그것의 도함수를 필요했었다. 우리는 이제 또 다른 운동량인  (Ω로 표기되는) orientation을 그 설정에 추가할 필요가 있다. 그래서, 우리는 우리의 angular effects를 지원할 수 있다. Ω를 정의하기 위해, 우리는 우리의 rigid body의 고정된 좌표 체계와 한 고정된 world 좌표계를 선택하고, Ω를 그것들 사이의 radians으로 각도 차이를 명시한다. 그림 1에서 나와 있듯이. 그림에서, x_w, y_w는 world 축들이고, x_b, y_b는 body 축이다. Ω는 시계 반대방향이 양이다. 이 시점에서, 우리가 3D로 올라가기전에 2D 역할을 배우는 이유가 명확해 져야 한다: 2D에서 방향은 스칼라이다 (라디안의 좌표계 시스템 사이의 각도여서), 반면에 3D에서 방향을 명시하는 것은 좀 더 복잡하다.

우리의 몸은 world에서 회전하기 때문에, Ω는 변화한다. 이 변화는 우리를 다음의 새로운 운동량인 angular velocity로 이끌게 된다 (ꞷ로 표기되는). 위치와 그것의 linear velocity와 대조적으로, 우리는 보통 angular velocity(각 속도)를 dot(Ω)라고 칭하지 않는다. 그러나, 우리는 가끔씩  그속도의 시간에 대한 도함수 또는 angular acceleration - 우리의 최종 새로운운도량인 -를 dot(ꞷ)이라고 칭하고, 가끔씩은 ɑ(alpha)라고 칭한다. 나를 비난하지 말아라, 나는 이러한 규칙을 안만들었고, 내가 읽은 모든 책은 다소 다른 전통을 가진다. Eq.1에 대해 유사한 우리의 angular는



Eq.1처럼, 만약 우리가 ꞷ를 시간에 대해 미분한다면, 우리는 ɑ를 얻는다; 그리고 만약 우리가 시간에 대해 ɑ를 적분한다면, 우리는 ꞷ를 얻고, 등등. 명백히, 이전 칼럼에서 선형 운동의 우리의 분석적 적분 예제어서 처럼, 만약 우리가 angular acceleration ɑ를 안다면, 우리는 새로운 방향을 찾기 위해 그것을 두 번 적분할 수 있다; 그러나 중요한 것은 우리가 이것을 하기 위해 ɑ를 알 필요가 있다는 것이다.

너가 기대하 듯이, 이 칼럼의 목적은 Table 1에서의 linear physics equations의 각각에 대해 angular analogs를 유도하는 것이다. 그러고나서 그 linear and angualr 방정식을 함께 연결할 것이다. 그래서 우리는 우리의 오브젝트에 주어진 힘을 취할 수 있고, linear acceleration a와 angular acceleration ɑ를 계산하기 위해 그것을 사용할 수 있다. 마지막으로, 우리는 우리의 body의 새로운 위치와 방향을 찾기 위해, 이러한 가속도들을 numerically하게 적분할 수 있다.

우리가 linear and angular 양을 함꼐 연결시킬 첫 번째 방식은 angular velocity를 사용하여 깔끔하고 그렇게  명백하지 않은 트릭으로 한다. 우리가 역학을 할 때, 우리는 종종 우리의 오브젝트에서의 임의의 점의 속도를 찾을 필요가 있다. 예를들어, 우리가 collision response를 다룰 때, 우리는 충돌지점들의 속도를 알 필요가 있는데, 그것들이 얼마나 세게 서로 부딪혔는지를 알아내기 위해서 이다. 만약 우리의 몸들이 회전하지 않는다면, 그 몸에서의 어떤 점의 속도는 같다; 우리는 그 몸의 CM의 속도를 추적할 수 있고, 그것으로 처리될 수 있다. 그러나, 만약 우리의 몸들이 회전하고 있다면, 그것들 안에 있는 모든 점은 다른 속도를 갖게 된다. 명백히, 우리는 우리의 rigid body의 무한한 점의 각각의 속도를 추적할 수 없고, 그래서 우리는 더 좋은 방식이 필요하다.

한 오브젝트 안에서 어떤 점의 linear velocity를 찾는 간단한 방식은 그 오브젝트의 angular velocity를 사용하는 것이다. 한 점 원점 O에 고정되어 회전하는 한 몸체의 경우를 다뤄보자. 그래서 그 몸체는 회전하지만, 평행이동 하지 않는다. Eq. 7은 이 회전하는 몸에서 한 점에 대해 속도를 어떻게 계산하는지를 보여준다.



Eq.7은 새로운 표기법을 많이 도입한다. 그래서 그것을 한 번에 하나씩 떼어내 보자. 처음에, 나는 어떤 파라미터가 어떤 점에 "속하는지 (belong)"를 표기하기 위해 superscripts를 사용하고 있다. 그래서 v^B는 우리의 몸체에서 점 B에서의 속도이다. 유사하게, r^OB는 우리의 몸체의 원점 O에서 점 B까지의 벡터를 의미한다. 그 재미있는 거꾸로된 T의 subscript는 "수직 연산자(perpendicular operator)"이고, 이것은 (Eq.7에서의 r처럼) 한 벡터를 취하고, 그것을 시계 반대방향 90도로 회전시킨다. 다시 말해서, 그것은 old vector에 수직한 새로운 백터를 만든다. 2D에서, 한 벡터 (x,y)에 수직한 것은 (-y, x)이고, 너는 그래프 페이퍼로 쉽게 증명할 수 있다. 나는 이 연산자에 대해서 짧게 좀 더 말할 것이다. 마지막으로, 그 수직 벡터는 선형 속도 v^B를 주기 위해 angular velocity ꞷ로 스케일링 된다. 내가 어떻게 이런 것을 생각해낼 수 있었을까? 음, 나는 한 책에서 그것에 대해 읽었지만, 그것은 명백히 이해될 수 있는 것이 아니였다, 그래서 우리스스로 그것이 작동하는지 증명해보자.

우리는 Eq.7이 두 단계에서 내가 말하듯이 그것이 하기로 한 것을 한다고 증명할 것이다. 처음에, 우리는 그 최종 속도 벡터의 크기가 옳은지를 증명할 것이다; 그러고나서, 우리는 그것이 옳은 방향으로 가리키고 있는지를 증명할 것이다. 첫 번째 부분을 증명하기 위해서 우리는 그림 2를 사용할 것이다. 그림 2는 몸체의 회전 동안 Ω radians를 움직이는 우리의 점 B를 보여준다.  그 원점에서 B로 가는 radius vector는 r 단위 길이이다. B는 원에서 호 길이의 C 단위로 움직였다, 거기에서 radians의 정의에 의해 C = Ωr 이다. (Radians 기준은 원의 반지름에 의해 스케일링된 호의 길이 기준이다. 한국식으로 치자면 l = rΘ(r이 반지름, theta가 그 호를 이루는 각). 한 원의 둘레는 잘 알려진 공식 2𝝅r 이다. 왜냐하면 그것이 2𝝅 (360도) 이기 때문이다 (arclength로)

한 점의 속도는 시간에 따른 위치 변화이다. 따라서, 우리는 시간과 관련하여 움직임에 대한 방정식으 미분하여 B의 속도(이것은 그것의 속도 벡터의 크기를 말하는 또 다른 방식이다)를 발견할 수 있다. C = Ωr은 그것의 움직임에 대한 공식이다 (호의 길이, 거리가 되기 때문).



그 반지름은 상수이기 때문에 그 도함수에서 떵러져 나온다 (B는 간단히 회전하고 있다, 또한 평행이동 하지 않고), 그리고 Ω에 대한 시간 미분은 Eq.6에 의해 ⍵이다. 따라서, B의 속도 벡터의 크기는 ⍵r 이다.

만약 우리가 Eq. 7을 본다면, 그 식이 그 크기를 옳게 한다는 것을 볼 수 있다. 수직 연산자가 명백히 벡터의 길이에 영향을 주지 않기 때문이고, r^OB는 그 원점에서 B로가는 radius vector이기 때문이다. 우리는 반쯤 왔다.

Eq.7에서 속도의 방향이 옳다는 것을 보여주기 위해, 우리는 우리 자신에게 속도 벡터의 방향은 그 반지름 벡터에 수직이 되어야 한다는 것을 설득하여 시작할 것이다. 이 가정은 직관적으로 말이 된다. 왜냐하면 다른 고정된 점에 대해 회전하는 한 점은 어느 순간이든 그 점 사이의 벡터에 수직으로 움직일 수 있기 때문이다; 그것은 더 가까이 가거나, 더 멀리 갈 수 없다. 그렇지 않으면 그것은 간단한 회전이 아닐 것이다. 우리는 아주 조금 벡터 적분을 사용하여 이 가정을 엄격하게 할 수 있지만, 나는 공간이 부족하다. 그래서 우리는 우리자신이 더 설득 되어지도록 할 것이다 (만약 너가 그것을 스스로 증명하고 싶다면, 한 고정된 길이 벡터와 그것 자체의 내적을 미분하려고 해보아라).

마지막으로, 우리는 속도 벡터의 부호가 정확한지 확인할 필요가 있다. 실제로 반지름에 수직인 같은 길이의 두 개의 벡터가 있기 때문이다. 우리가 시계 반대 방향으로 Ω을 측정하고 있기 때문에, ⍵는 점이 시계 반대 방향으로 회전할 때 양수이다. 그 perpendicular operator는 반지름 벡터를 기준으로 시계 반대 방향을 가리킨다. 그래서 그림 3에서 보여주듯이, Eq.7은 사실로 확인된다.

우리는 몸체의 회전과 평행이동을 동시에 다루기 위해 Eq.7을 확장할 수 있다. 우리는 rigid body의 어떤 움직임을 몸체에서 한 점의 간단한 평행이동과 그 점 주위의 몸의 나머지의 간단한 회전으로 고려할 것이다. 이것은 Chasles' Theorem으로 알려져있다.

Chasles' Theorem은 우리의 움직임을 linear and angular 컴포넌트들로 분해한다. 우리는 Eq.7에서 원점 O를 단일의 평행이동 점으로 고려하고, 그러고 나서 원점 O에 대한 회전을 추적하기 위해 ⍵를 사용한다. 이것은 우리에게 Eq.7에서의 일반적인 형태를 준다.



Eq. 9는 우리가 우리의 몸의 원점의 알려진 linear velocity를 취하고, 그것을 그 몸의 회전으로 생성된 속도를 그것에 더하여 움직이는 몸체의 어떤 점의 속도를 계산할 수 있다는 것을 말한다.

A Moment-us Occasion
이제 우리는 Eq.2의 angular와 유사한 것에, force equation 작업하기 위해 포지션에 있다. 우리는 다른 점 A에 대해 한 점 B의 angular momentum L^{AB}를 정의하여 시작할 것이다.



angular version은 공간에서 특정한 위치로부터 측정된다는 점에서 한 점의 angular momentum은 한 점의 linear momentum과 다르다.  즉, linear momentum은 한 주어진 점의 특징인 반면에 (그것의 질량 * 속도)인 반면에, 그 점의 angular momentum은 그 세계의 다른 장소로부터 측정되어져야 한다. Eq.10의 superscript는 이것을 보여준다. L^{AB}의 표기는 첫 번째 superscript, A,가 momentum이 측정되는 점이고, 두 번째 superscript는 angular momentum이 측정되고 있는 점이다. 첫 번째 superscript에서 두 번째로 가는 화살을 생각해보아라; A가 B의 운동량을 "바라보고" 있다. 이 A에서 B로 가는 화살은 두 점 사이의 반지름 벡터이고, r^{AB}로 지정된다. 그래서, 한 점의 angular momentum은 "perpendicularized" 반지름 벡터와 point의 linear momentum의 내적이다. 이 연산은 "perp-dot product" 이라고 불려진다. (3D 외적과 유사한 2D이지만, 이 토론은 다음 때 까지 기다려야 할 것이다.)

만약 너가 Eq. 10을 취하고, 한 종이에 무엇을 하고 있는지 그려본다면, - 나는 그림 4에서 한 예제를 그렸다 - 너는 그것이 B의 linear momentum이 얼마나 회전하고 있는지에 대한 측정치 숫자를 만들어낸 다는 것을 볼 것이다. 즉, 만약 B의 linear momentum이 A로 오른쪽으로 향하고 있거나 A로부터 직접향하고 있다면, Eq. 10은 0이다 (r-perpendicular는 p와 90도를 형서앟고, 그 내적은 0이기 때문이다. B의 운동량이 좀 더 A의 수직으로 향한다면, 그 Eq.10은 더 큰 angular momentum을 만들어 낸다. 너가 그림 4에서 보듯이, Eq. 10에서 내적은 r^{AB} perpendicular와 p^B 사이의 cosθ를 측정하고 있다. 그리고 이것은 너가 내적으로 부터 너가 기대하는 것이다. 그러나, 만약 우리가 그것을 다른 방식으로 본다면, 그 perp-dot product는 우리의 원래 unperpendicularized r^AB와 p^B 사이의 sinΦ를 측정하고 있는 것이다 (그 sine은 perp-dot과 3D cross product사이의 유사성에 대한 또 다른 단서이다). 우리가 그것을 어떤 방식으로 보든, Eq. 10은 B의 선형 운동량이 A와 관련된 방향으로 얼마나 많이 회전하고 있는지에 대한 측정량을 만들어 낸다.

우리는 force를 정의하기 위해, linear momentum의 도함수를 사용한 같은 방식으로, 우리는 force의 angular twin을 정의하기 위해, angular momentum의 도함수를 사용할 것이다, 그것은 torque이다 (𝛕로 표기되는, lowercase tau).



공간을 아끼기 위해, 나는 실제로 Eq.11에서 조금 속임수를 썼고, 도함수에 대한 내적을 포함하는 까다로운 단계를 제외했다. 그러나, 모든 것이 말해지고 처리 될 때, 그 torque는 perp-dot product에 의해 한 특정한 지점에서의 힘과 관련되있게 된다.

마침내 우리는 한 점이 적용되는 곳에서 그 점을 사용하는 역학 방정식을 발견하게 되었다. 그리고 그것은 linear movement의 방정식에서는 무시되어졌다. Eq.11은 점 B에 적용되는 힘이 얼마나 점 A에 대해서 "회전하고 있는지를" 측정하기 위해 perp-dot product를 사용한다; 즉, "rotating-around force"(힘에 대한 회전)이 torque라고 불려진다. Eq.11은 우리가 torque를 계산하게 한다 - 그러므로, angular momentum인, 만약 우리가 그 torque를 적분한다면 - 한 적용된 힘으로부터 그리고 그것의 적용된 위치에서부터.

그러나, 우리는 여전히 우리의 오브젝트를 회전시키는데 필요한 torque와 kinematic angular quantities사이의 관계를 가지고 있지 않다 - angular acceleration, angular velocity, or orientation; 그래서 우리는 우리의 새롭게 발견학 역학의 양으로 어떤 것도 할 수 없다. 우리가 몇 가지 더 방정식을 이끌어 낼 때 까지.

The Moment We've All Been Waiting For
우리가 역학량과 운동량 사이의 관계를 조사할 수 있기 전에, 우리는 총 angular momentum을 정의할 필요가 이싿. 우리가 Eq. 4에서 총 linear moentum을 정의했던 것 처럼. 나는 Eq.3에서 CM의 angular equivalent를 잊지 않았다; 그것을 total angular momentum equation에서 우리에게 올 것이다.

점 A에 대한 total angular momentum은 L^{AT}로 표기되고, Eq.12에 의해 정의된다.



Eq. 12는 모든 점에 대해 모든 angular momentums의 합이고, 점 A로부터 측정된다. 오른쪽 변에서, 나는 p를 mass * velocity (mv)로 확장하기 위해 linear momentum의 정의를 사용했다. 우리가 Eq.12를 어떤 관리 가능한 것으로 바꾸기 위해 이 항을 조작할 것이기 때문이다. 그것이 나타나 있듯이, 만약 우리가 우리의 오브젝트에 대한 total angular momentum을 계산하려고 한다면, 우리는 그 점들의 각각에 대해 angular momentums의 모든 것을 합해야만 한다. 분리된 점이라기 보다는 표면으로 구성된 rigid body에 대해, 우리는 discrete summation 대신에 적분을 수행해야만 한다.

운좋게도, 우리가 linear movement에서 방정식을 간단하게 하기 위해 CM을 도입한 방식과 같은 방법으로 이 계산을 새로운 quantity를 도입하여 간단하게 할 수 있다. 그것은 the moment of inertia라고 불려진다. 우리는 Eq. 7이 우리에게 angular velocity의 관점에서 한 점의 속도를 쓰는 또 다른 방법을 준다는 것으 기억하여 시작한다.  만약 Eq.12 우리가 그 점 A를 Eq.7에서의 원점으로 다루고, 그 점의 index i를 Eq.7에서의 원점으로 다룬다면, 우리는 Eq.7을 Eq.12로 대체할 수 있고 다음과 같이 쓸 수 있다.



나는 Eq. 13을 한 번에 한 단계씩 설명할 것이다.  처음에, 우리는 Eq.13의 첫 번째 합을 얻기 위해 Eq. 7을 Eq.12에 넣어서 바꾸었다. 이 대체 하는 것은 우리가 angular velocity의 관점에서 angular momentum을 쓰게 해준다. 다음으로, 우리는 summation에서 ω를 합에서 빼왔다. 왜냐하면 모든 점들에 대해 그것은 같기 때문이다 (angular velocity는 그 몸체에 대해 정의 되어있고, 개별적으로 점에 대해서는 아니다), 그리고 우리는 왼쪽 변에 점 i에 대한 질량을 쓴다. 그래서 우리는 우리가 반지름과 그 자체의 dot - product 를 취하게 되는 것을 볼 수 있다. 이 내적은 그냥 radius vector 길이의 제곱이다. (자기 자신의 내적은 길이의 제곱이다; perpendicular operaor가 벡터의 길이를 바꾸지 않는다는 것을 기억해라). 마지막으로, 우리는 문자 I^A를 점 A에 대한 the moment inertia를 지정하기 위해 쓴다. 2D rigid body에 대한 The moment of inertia(관성모멘트)는 특히 좋은 숫자이다. 왜냐하면 그 몸을 구성하는 점들은 그것들의 질량을 바꿀 수 없고, 측정 지점으로부터의 거리를 바꿀 수 없기 때문이다. 이러한 두 가지 특정들은 Eq.13에서의 합이 각 body에 대해 상수가 되게 만든다. 그래서 우리는 우리가 시작하기전에 그것을 미리 계산할 수 있다. 영어에서 rephrase하기 위해, I^A는 점 A에서 그 몸의 각 다른 점까지는 제곱 거리의 합계이다. 그리고 각 제곱 거리는 각 점의 질량으로 스케일링 된다. CM처럼, 만약 그 몸체가 discrete points로 만들어지기 보다는 continuous 하다면, 위의 합계는 적분이 된다. 그러나, 관성모멘트는 여전히 존재할 것이고, 같은 방식으로 정의 된다.

한 점에 대한 관성 모멘트의 정의는 매우 길지만, I^A를 점 A에 대해 그 몸체를 회전하는 것이 얼마나 어려운지에 대해 측정치로 생각해라. 예를들어, 한 연필을 생각해라 (2D pencil). 만약 우리가 그 펜의 중간에 대해 관성모멘트를 측정한다면, 우리는 그 질량으로 스케일링된 제곱 거리를 합하여 어떤 값을 얻는다. 그러나, 만약 우리가 그 같은 연필의 끝에 대해서 관성을 측정한다면, 우리는 더욱 큰 값을 얻게 된다. 왜냐하면 Eq.13에서 제곱 항은 더 멀리 있는 (우리의 연필의 지우개쪽) 질량체가 그 값에 더 기여하도록 하기 때문이다. 이것은 수학적으로 우리가 직관적으로 아는 것이다: 한 연필을 그것의 중심에 대해 돌게 하는 것은 더 쉽다 (read : takes less force, 덜 힘을 취한다), 그것을 그것의 끝에 대해서 돌게 하는 것 보다.

마침내, 우리는 angular dynamics 방정식과 angular kinematics 방정식 사이의 유용한 연결 고리를 제공할 준비가 되었다. 만약 우리 Eq.13을 미분한다면, 우리는 왼쪽변에서 총 torque를 얻고, 오른쪽 변에서 우리는 관성 모멘트 * angular acceleration을 얻는다 (I^A는 상수이고, 그래서 그것을 미분에서 떨어져 나온다.)



이 방정식은 Eq.5의 angular equivalent이다; 그것은 기본적으로 angular dynamics의 F = ma이다. 그것은 스칼라 관성모멘트를 통해 전체 torque와 몸체의 angular acceleration을 연관짓는다. 만약 우리가 우리의 몸에 대한 torque를 안다면, 우리는 그것의 angular accelerartion을 알 수 있다 - 그러므로, 적분을 통한 그 angular velocity와 orientation을 알 수 있다 - 그 torque를 관성 모멘트로 나누어서.

The Dynamics Algorithm
우리는 많은 방정식들로 인지하지 않았을지도 모르지만, 그것이 다이다. 우리는 오브젝트들을 움직이게 하고 회전하게 할 임의의 힘과 torques가 있는 훌륭한 2D dynamics를 할 충분한 방정식들을 개발 했다. 우리는 어떻게 이러한 방정식들을 사용하는가? 여기에서 기본 알고리즘이 있다:


  1. CM을 계산하고, CM에서의 관성모멘트를 계산해라.
  2. 그 몸의 초기 위치, 방향, 그리고 linear and angular velocities를 설정해라.
  3. 적용 지점을 포함하여 그 몸체에 대한 모든 힘을 계산해라.
  4. 모든 힘을 합하고, CM의 linear acceleration을 찾기 위해 총 질량으로 나누어라.
  5. 각 힘에 대해, CM에서 힘의 적용지점까지의 perp-dot product를 구하고, 그 값을 CM에서의 전체 torque에 더하라( Eq.11)
  6. 그 angular accelerartion을 찾기 위해 그 total torque를 CM에서의 관성모멘트로 나누어라. (Eq.14)
  7. 위치, linear velocity, orientation, 그리고 angular velocity (마지막 이슈를 보아라)를 업데이트하기 위해 linear acceleration and angular acceleration를 Numerically 적분해라.
  8. 새로운 위치에서 그 오브젝트를 Draw하고, Step 3로 가라.
위의 알고리즘에서 내가 아직 설명하지 않은 두 개의 단계들이 있다. 첫 번째로, 어떻게 어떤 이는 Step1에서 한 continuous object에 대한 관성 모멘트를 계산할 수 있는가?  두 번째로, 어떻게 너는 Step3에서 한 오브젝트에 대한 힘을 알아내는가? 첫 번째 질문에 대한 답은 이 자료의 끝에서 참조되는 sample program에서 발견되어질 수 있다 (너는 그 오브젝트의 표면에 대해 적분을 수행한다). 대부분의 dynamics books는 뒤에 기재된 공통된 모형의 관성 모멘트를 가진다. 그래서 너는 보통 그것들을 밑바닥부터 유도할 필요가 없다.

Step 3에서 힘들을 어떻게 연산할지에 대한 답은 프로그램 마다 다르지만, 몇 가지 일반적인 가이드라인들이 적용된다. 첫 번째, 항상 같은 방향을 가리키는 (중력의 경우에 아래로) 중력같은 힘들은 한 오브젝트에 대한 torques를 유발하지 않는다. 그것들이 동시에 그리고 같은 방향으로 모든 점들을 당기기 때문이다; 따라서, 우리는 그러한 힘들을 직접적으로 CM에 적용한다. 한 오브젝트에 특정한 점에 적용된 spring같은 힘은 torques를 유발할 것이고, 그래서 우리는 그것을 보통 다룬다. 우리가 그 마지막 이슈에서 봤듯 이, drag는 너의 속도와 반대 방향을 가리키는 힘이다. 너는 간단한 drag model을 할 수 있고, 그냥 그 힘을 CM에 적용할 수 있다. 또는 너는 너의 오브젝트의 어떤 부분이 DRAG를 갖는지 알아내고, 그러한 부분에 특정한 drag forces를 적용할 수 있다. 그리고 그것은 너의 오브젝트에 torque를 유발할 수 있을지도 모른다. 충돌하는 동안 경험되는 힘들은 다소 좀 더 복ㅈ갑하고, 다음 칼럼까지 기다려야만 할 것이다. rocket engines으로부터의 힘은 아마도 적용점을 가진 힘으로서 다뤄질 것이다. (그 방식으로, 만약 너의 엔진들 중 하나가 실패한다면, 너는 회전하기 시작할 것이다, 만약 너가 torque에 작용하는 또 다른 힘을 제공하기 위해 너의 키를 조절 하지 않는다면!) 만약 너가 tractor beam같은 어떤 것을 가진다면, 그것은 중력처럼 행동해야하는가, 그리고 torque가 없는 것처럼 해야하는가? 또는 그것은 그 오브젝트의 특정한 점에 적용되어야 하는가 그래서 그 오브젝트가 그 빔쪽으로 회전하기 위해서? 잡아당겨지듯이? 너는 그것을 결정해야만 할 것이다. 그 열쇠는 다른 방식으로 계싼되는 다른 힘들을 가지고 실험하는 것을 두려워 하지 않는 것이다 - 너는 진짜 2D dynamics simulator를 얻었으니, 너는 모든 종류의 힘들을 실도할 수 있다.

나는 나의 웹사이트에 수 많은 레퍼런스들과 몇 가지 코드를 두었다. 여기에서 더 이상 남는 공간이 없기 때문이다. 그 샘플 프로그램은 2D dynamics algoithm을 한 스프링에 의해 부착된 몇가지 오브젝트들에 구현한다; 그것들은 회전하고 움직이고, 회전으로 벽들과 충돌한다, 우리가 이것은 다음에 다룰 것이다. 









댓글 없음:

댓글 쓰기