| 표지 설명 | 이 책의 표지에 있는 동물은 고양이와 쥐입니다. 고양이와 쥐는 수 세기에 걸쳐 어린이 동화나 토요일 만화에 단골로 등장하는 라이벌이었죠. 이솝우화나 그림 형제의 동화책부터 톰과 제리에 이르 기까지 언제나 고양이는 쥐를 괴롭혔고 쥐는 잡아먹히지 않기 위해 도망다녔습니다. 고 양이가 덩치가 크고 힘도 더 셀지도 모르나 쥐는 작고 재빨라서 작은 공간에 쉽 게 숨을 수 있죠. 따라서 결과는 언제나 누가 더 영리하냐에 따라 결정됩니다. 이 표지 그림의 출처는 Dover Pictorial Archive에서 가져온 19세기의 판 화입니다.
게임 개발자를 위한 물리(개정2판) : 차량, 스포츠, 폭발, 모바일 등 게임 물리의 모든 것 초판발행 2015년 01월 05일 지은이 데이비드 버그, 브라이언 비발레츠 / 옮긴이 Pope Kim, 이정훈, 문정균 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부 전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124 등록 1999년 6월 24일 제10 – 1779호 / ISBN 978-89-6848-155-0 93000 총괄 배용석 / 책임편집 최현우 / 기획 조희진, 이상복 / 편집 이상복 디자인 표지 손경선, 내지 강은영, 조판 이경숙 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 서은옥, 김옥현 / 제작 박성우 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr
Published by HANBIT Media, Inc. Printed in Korea Copyright © 2015 Hanbit Media Inc. Authorized Korean translation of the English edition of Physics for Game Developers, 2nd Edition, ISBN 9781449392512 ⓒ 2013 David M. Bourg & Bryan Bywalec. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. 이 책의 저작권은 오라일리와 한빛미디어 (주)에 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다.
지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
추천사
3D 게임은 충돌검출collision detection과의 싸움이다. 콘솔 게이머라면 다들 아실 명작인 <ICO>와 <완다의 거상>을 제작한 우에다 후미토上田文人 씨 의 말입니다. 사람의 눈에는 단순한 점프, 파괴, 이동으로만 보이는 3D 오브젝트의 움직임이 지만, 그 이면에는 수많은 숫자와 수식이 복잡하게 얽혀 있으며, 그것들을 이용해서 게임의 오 브젝트들을 움직이고 충돌을 처리하는 것이 바로 게임 물리입니다. 비단 3D 게임뿐만 아니라 2D 모바일 게임에서도 물리는 게임의 근간을 이루는 가장 중요한 요소입니다. 모바일 게임의 시대를 열었던 <앵그리버드> 같은 2D 게임도 그 재미의 핵심은 물 리적으로 계산된 투사체(새)를 날리고, 그 반응으로 건물이 무너지고 파괴되는 물리적인 연쇄 작용이었습니다. 국내의 <쿠키런>이나 <애니팡> 같은 물리적 계산이 없을 것 같아 보이는 게임 에서도 사실 캐릭터나 오브젝트의 이동과 충돌처리 등에 모두 물리가 사용되고 있습니다. 최근 국내에서 가장 많이 쓰이고 있는 게임엔진인 유니티나 리얼한 그래픽을 자랑하는 언리얼 엔진에도 이제 물리엔진이 기본 컴포넌트로 포함되어 있습니다. 그만큼 게임에서 물리는 떼려 야 뗄 수 없는 가장 중요하고 가장 기본적인 요소가 되었습니다. 하지만 국내의 게임 개발자들 은 지금까지 게임에 필요한 물리만을 제대로 공부할 만한 서적이 거의 없다고 해도 과언이 아 닐 정도였습니다. 그래서 이번에 한빛미디어에서 『게임 개발자를 위한 물리』를 번역한다는 소 식을 듣고 매우 기뻤습니다. 사실 공대를 졸업한 개발자들에게도, 물리라는 단어는 어려움을 넘어 종종 공포를 느끼게 하는 단어입니다. 하지만 게임 개발에서 물리는 빼놓을 수 없는 요소이죠. 게임엔진에 포함된 물리 엔진을 사용하면서도, 내부에서는 어떤 계산이 일어나는지 잘 이해하지 못하고, 어떻게 사용해 야 하는지 고민하고… 리지드바디rigid body나 마찰friction 같은 용어가 생소해서 당황해본 경험이 다들 있을 겁니다. 그럴 때마다 물리 공부의 중요성을 느끼지만, 고등학교나 대학교 물리책을 다시 펴볼 용기는 쉽게 나지 않는 것도 사실입니다. 이 책 『게임 개발자를 위한 물리』는 바로 그 런 게임 개발자들을 대상으로 쓰여진 책입니다.
4
이 책은 물리학의 기초부터, 정말로 게임 개발에 꼭 필요한 물리 지식들이 꽉꽉 차 있습니다. 이 책 한 권만으로 리지드바디, 파티클은 물론, 총과 폭발, 비행기와 배와 같은 물리모델들을 직접 코딩하여 구현할 수 있게 되고, 스포츠 게임에 사용되는 물리나 3D 사운드 효과의 구현, 그리고 키넥트나 3D 디스플레이에 사용되는 물리까지 개념과 원리를 이해할 수 있습니다. 목차에서 볼 수 있듯이 게임 개발에 꼭 필요한 물리이론과 실제 구현 방법 모두, 곧바로 현업 에서 직접 구현할 수 있도록 잘 설명되어 있습니다. 조금 식상한 표현이지만, 말 그대로 게임 개발자의, 게임 개발자를 위한, 게임 개발자에 의한 게임 물리 책이라고 표현할 수 있을 정도 입니다. 물리라는 것이 원래 어려운 분야인 데다가, 더군다나 번역서이기 때문에 이해가 어려울지도 모 른다고 생각할 수도 있습니다. 하지만 (자칭) 꽃미남 게임 개발자 포프 님의 쉬운 구어체와 유 연한 표현을 활용한 번역 덕분에, 마치 국내 저자가 쓴 것처럼 쉽고 빠르게 게임 물리의 개념 원리를 이해할 수 있다는 점도 이 책을 추천하는 큰 이유 중 하나입니다. 어떤 분은 ‘물리엔진에서 다 해주는데, 왜 굳이 물리를 공부해야 하지?’라고 생각할지도 모릅 니다. 하지만 국내에서 개발한 <윈드러너>의 경우도, 유니티에 포함된 엔비디아의 물리엔진 (PhysX )이 무겁고 느리다는 이유로 게임에 적합한 물리만을 처리하는 물리엔진을 직접 자체 구현하여 게임을 빠르고 가볍게 만들 수 있었습니다. 이렇듯 게임에 적합한 물리처리의 경우, 범용 물리엔진을 사용하는 것보다 자체 물리엔진으로 구현하는 경우가 아직도 많이 있습니다. 물론 일반 물리엔진을 사용하여 게임을 개발하는 경우에도 물리의 개념 원리를 이해하는 것은 물리엔진을 잘 활용하기 위해 필수적입니다. 게임 개발에 직접 적용되고 활용되는 물리 지식에 목말라 있던 국내 개발자들에게 이 한 권의 책이 그동안의 갈망을 풀어줄 수 있는 책이 되기를 바랍니다. _ NHN NEXT 게임 전공 교수 박민근
5
지은이 소개
지은이
데이비드 버그David Bourg
다양한 선박의 설계 및 건조에 참여한 조선기사. 1998년 이래 상업용, 군용 선박 제조업체에 컨셉 디자인, 제안서 작성, 세부 설계 및 분석, 시각화, 소프트웨어 개발 등의 서비스를 제공해왔다. 그 의 설계 및 제안서는 미국 해안경비본부 경비정 교체 프로그램에 채택되기도 했다. 2006년에 동 료 조선기사인 케네스 험프리스Kenneth Humphreys와 합심해 조선해양공학 전문 서비스 회사인 MiNO
Marins, LLC를 설립했다. 1993년부터 학자로서 몸담았던 뉴올리언스 대학교에서 2008년에 공학 및 응용과학 박사학위를 땄고, 동 대학교 조선해양공학과에서 부교수직을 역임했다. 저서로 『게임 개발자를 위한 물리』 외 2권이 있다.
지은이
브라이언 비발레츠Bryan Bywalec
중학교 때 『시간의 역사』를 읽고는 천체물리학자가 되길 희망했다. 하지만 물리법칙을 실용적으로 적용할 수 있는 분야에 더 관심을 가지면서 뉴올리언스 대학교 조선공학과에 진학한다. 재학 당시 공학대학의 네트워크 관리자로 근무하며 엔터프라이즈 컴퓨팅을 경험할 수 있었고, 고성능 클러스 터와 데스크톱 원격관리, 로봇공학에 깊은 관심을 가지게 되었다. 2007년 졸업과 동시에 MiNO
Marine, LLC에 입사했고, 선박 배기가스 및 해양 구조물 주변 해류의 전산 유체역학 시뮬레이션 을 여러 건 완료했다. 조선공학자로서의 업무 외에도 네트워크를 이용해 일상생활에서 물체를 컨트 롤하는 것을 즐긴다. 문자 메시지를 보내 문을 여느 것부터 실시간 자동차 위치추적 프로그램에 이 르기까지 언제나 일상생활에 기술을 접목시킬 기회를 찾고 있다.
6
옮긴이 소개
옮긴이
Pope Kim
10년 이상 경력의 렌더링 전문 프로그래머. 연세대학교 법학과와 캐나다 브리티시컬럼비아 대학교 공과대학을 졸업한 뒤, EA, 렐릭 엔터테인먼트, 스퀘어에닉스(에이도스) 등 세계 유수의 게임 개발 사에서 선임그래픽프로그래머로 근무했으며, 밴쿠버 예술대학, 시그래프, KGC 등에서 강연하기도 했다. 20개 이상의 다양한 콘솔 게임에 참여했으며, 엑스박스 원 및 플레이스테이션 4용 <FIFA 14> 를 마지막으로 게임계를 떠나 새로운 분야를 개척하고 있다. 현재 미국 전자상거래 3위 기업의 자 회사에서 리드프로그래머로 일하면서 조지아 공과대학교에서 컴퓨터공학 석사 과정을 밟고 있다. 또한 마이크로소프트 Visual C++ MVP로도 왕성히 활동 중이며, 서강대학교 게임교육원의 초빙교 수직도 겸임하고 있다. 저서로 『셰이더 프로그래밍 입문』(한빛미디어, 2012 )이 있다.
옮긴이
이정훈
경북대학교 컴퓨터공학과 재학 중 병역특례요원으로 민커뮤니케이션에서 약 3년 6개월 동안 <란 온라인>을 개발했다. 현재 캐나다 밴쿠버에서 유학 중이다.
옮긴이
문정균
5년 경력의 클라이언트 프로그래머. 레몬, 겜블릭에서 여러 모바일 게임을 만들었고, 지피스튜디오 에서 <지피레이싱> 개발에 참여했다. 현재 미국에서 백수(유학) 생활 중이다.
7
옮긴이의 말
오랜만에 번역하는 책입니다. 사실 더 이상 번역은 하지 않을 거라고 맘을 먹고 전문번역가의 업을 관둔 지가 오래되었습니다. 그런 상황에서도 출판사에서 이 책의 번역 제의가 왔을 때 선 뜻 수락할 수 있었습니다. 일단 국내에 나와 있는 물리서적 중에 게임 개발자에게 필요한 내용 을 모두 담고 있으면서 물리학도가 아닌 사람들이 쉽게 읽을 수 있는 서적이 없기 때문입니다. 이 책은 2013년에 출판된 『Physics for Game Developers』 2판을 번역한 것입니다. 한국에 출판된 서적 중 게임 물리를 다루는 것이 많지 않고, 그마저도 기초적인 부분만을 다루는 경우 가 대부분입니다. 이 책에서는 기초적인 내용부터 복잡한 물리 시뮬레이션에 관련된 내용까지 게임에서 다루는 물리를 전반적으로 설명합니다. 몇몇 장들은 ‘이런 부분까지 시뮬레이션을 해 가면서 게임을 만들진 않을 텐데’ 하는 생각도 들었습니다. 하지만 돌아가는 원리를 알고 나니 비슷한 효과를 내거나 간략한 버전을 만들 때 실제로 도움이 되더군요. '아, 저자가 다 생각이 있어서 그랬구나' 하고 수긍하게 되었습니다(최근에 괜찮은 아이디어가 나와서 참여 중인 게임 이 있는데 이 책의 도움을 많이 받고 있습니다^^). 게임엔진의 대중화에 힘입어 게임의 전반적인 그래픽 수준은 올라갔지만, 게임 물리의 경우는 아직도 예전부터 사용하던 것들을 그대로 답습하는 경우가 많습니다. 이런 기초적인 물리만 가 지고는 게이머들의 높아진 눈높이를 맞추기 힘듭니다. 이 책의 내용을 잘 이해하시면 이것을 토대로 게임에 좀 더 사실적이고 흥미로운 물리효과를 추가할 수 있을 것입니다. 기술서적을 번역할 때마다 가장 애매한 부분이 용어입니다. 특히 물리학에서는 이미 학계에서 통용되는 외계어(?) 같은 한글 용어가 존재하지만, 실무에서는 그와 전혀 다른 영어 용어를 주 로 사용하므로 더욱 그렇지요. 이 책은 게임 개발자들을 위한 책입니다. 따라서 용어를 선택할 때도 현업 개발자들이 주로 쓰는 용어를 골랐습니다. 학계에서 사용하는 한글 용어라도 개발자 들 다수가 그냥 영어 독음으로 사용한다면 책에서도 영어 독음을 사용했다는 말입니다. 만약 물 리학을 전공하신 분들이라면 이런 용어가 조금 낯설게 다가올 수도 있습니다. 따라서 용어가 처 음 나올 때 최대한 영어 원문을 병기하였습니다. 외국에서 주로 개발을 해온 저는 개인적으로 한국에서 쓰는 용어를 잘 모릅니다. 한국에서 오랫동안 게임을 개발한 경력이 있는 문정균 님과
8
이정훈 님을 공동역자로 초대한 이유가 바로 이런 저의 부족함을 해결하기 위해서였습니다. 또한 이 책을 번역하면서 최대한 구어체를 사용하려고 노력했습니다. 상당히 많은 기술서적들 이 딱딱한 문어체를 많이 사용하는데, 블로그나 동영상 강좌에 익숙해진 개발자들에게는 부드 러운 반존칭의 구어체가 더 거부감이 적다고 생각합니다. 다행히 제가 이전에 한빛미디어에서 출판한 서적도 구어체를 사용하여 좋은 반응을 얻었고, 이번에도 편안한 문체로 번역하는 것을 한빛미디어 관련자분들이 지지해주셨습니다. 많은 감사를 드립니다. 원서의 양이 적지 않고 나름 바쁜 일정으로 번역을 했는데도, 많은 주변 분의 도움이 있어 이 일을 시간 안에 마칠 수 있었습니다. 일단 밤낮을 가리지 않고 열심히 원고를 검토해주신 한빛 미디어의 이상복 님, 조희진 님, 그리고 번역 일을 좀 더 쉽게 할 수 있도록 문서 정리를 도와주 신 안진우 님, 번역물을 검토해주신 Aria Kim 님께 감사의 말씀을 드립니다. _ Pope
Kim
9
이 책에 대하여
대상 독자 간단히 말해 이 책은 물리학에 대한 깊은 지식이 없지만 사실적인 물리법칙을 게임에 넣고 싶 은 게임 개발자들을 대상으로 합니다. 이 책을 읽는 독자들은 게임 개발자겠죠? 개발자인 동시에 게이머인 분들도 많으실 겁니다. 그 렇다면 현실적인 물리엔진이라는 광고를 본 적이 있죠? 아니면 마케팅 담당자가 물리에 기초 한 사실주의를 통해 게임을 개선시킬 묘안이 없냐고 물어왔을 수도 있습니다. 아니면 게임에 새로운 무언가를 추가하고 싶은데 여기에 물리 지식이 필요할 수도 있죠. 물론 이미 존재하는 훌륭한 물리엔진을 구매해 사용할 수도 있습니다. 하지만 그 내부 작동원리를 전혀 모르면 그 속에서 돌릴 물리모델조차 만들기 어렵죠. 아니면 다른 사람이 작성한 물리 코드를 튜닝하는 업무를 받았는데 그게 어떻게 작동하는지조차 모르면 곤란하겠죠? 그렇다면 이 책을 제대로 고른 겁니다. 물론 인터넷, 전문 간행물, 잡지 등을 뒤져 게임에 물리학적 사실성을 추가하는 방법을 찾을 수 도 있습니다. 오래된 물리 교과서를 처음부터 읽어봐도 되죠. 하지만 곧바로 실무에 적용하기 엔 이 자료들이 너무 일반적이거나 난이도가 높아서, 책 한 권으론 안 될 겁니다. 이 책은 게임 개발자에게 필요한 기초부터 실제 코드에 이르는 모든 정보를 포함하고 있습니다. 이 책은 다양한 문제에 대한 샘플 코드만 달랑 던져주는 책이 아닙니다. 그런 예제 프로그램은 인터넷에 널려 있죠. 그 대신 관련 주제에 대한 기초 지식을 제공하여 독자 스스로 다양한 문제 에 대한 해법을 만들 수 있는 힘을 주는 게 목적입니다. 따라서 이 책은 게임 개발에 곧바로 적 용이 가능한 물리 원리를 자세히 설명한 뒤, 샘플 프로그램과 계산 과정 등을 보여줍니다.
10
미리 알아야 할 내용 이 책을 읽기 위해 물리학 박사가 되어야 하는 건 아니지만 최소한 고등학교 수준의 물리학 정 도는 이해하고 있다고 가정하겠습니다.* 물리 수업 시간에 배운 내용을 다 기억하지 못해도 크 게 상관은 없습니다. 어차피 이 책의 처음 몇 장에서 게임 물리에 관련된 기본 지식을 복습하니 까요. 또한 삼각함수, 벡터, 행렬수학에 대해서도 잘 안다고 가정하겠습니다. 이게 잘 기억나지 않는 다면 이 책의 부록을 보셔도 됩니다. 그리고 미적분에 대한 기초 지식도 가지고 있다고 가정하 겠습니다. 수치미적분기법은 모르셔도 상관없습니다. 이건 이 책의 뒷부분에서 자세히 설명드 리겠습니다.
역학 이 책을 처음 구상하기 시작할 때 주변 지인들과 이야기를 나눠봤는데 대부분 ‘사실적인 물리’ 나 ‘실시간 시뮬레이션’이란 표현을 듣자마자 비행 시뮬레이션을 생각하더군요. 물론 최첨단 비 행 시뮬레이션도 이런 주제와 깊은 관련이 있습니다. 하지만 이외의 다양한 종류의 게임들이 물리에 기초한 현실성의 혜택을 받을 수 있습니다. 이런 예를 생각해보세요. 블록버스터급의 사냥 게임을 만들고 있습니다. 이 게임은 일인칭 3D 슈팅게임이고, 고해상도 텍스처와 훌륭한 음향효과를 갖추고 있습니다. 근데 뭔가 빠져 있군 요. 바로 현실감입니다. 특히 사실적인 조준 및 사격을 구현하여 게임을 더욱 사실적으로 만들 면 괜찮을 거 같네요. 그러려면 표적까지의 거리, 바람의 속력 및 방향, 총구속도 등을 고려해 야 할 겁니다. 물론 대충 속임수로 이런 것들을 해결할 수도 있지만 그 대신 제대로 된 물리법 칙을 사용해 시뮬레이션하는 게 더 나을 겁니다. MathEngine Plc의 게리 파월Gray Powell은 다
* 역주_ 원문은 대학 수준이나 해외에서 대학 수준이라고 하는 게 한국에선 고등학교 2~3학년 과정이라 고등학교 수준이라고 옮겼습니다.
11
음과 같이 말했습니다. “아무리 하이폴리곤 모델과 고해상도 텍스처, 고급 조명 기법으로 가상 세계의 환상과 몰입감 있는 경험을 잘 꾸며놓아도 물체가 움직이기 시작하는 순간 그 모든 환 상이 깨진다.”* 한편 하복닷컴Havok.com의 CEO 스티븐 콜린스Steven Collins 박사는 “상호작용성과 몰입감이 모든 걸 좌우한다”라고 말했습니다.† 이 둘은 모두 맞는 말입니다. 게임 속에 있는 물 체가 사실적으로 행동하지 않는다면 게임월드를 사실적으로 보이게 만들기 위해 엄청난 시간 을 투자한들 무슨 소용이 있을까요? 다음은 사실적인 물리법칙의 혜택을 볼 수 있는 몇 가지 게임 요소의 예입니다. ●●
로켓과 미사일의 탄도. 연료 소모 효과도 포함
●●
당구공 같은 물체의 충돌
●●
행성과 우주전함과 같은 대형 물체 사이의 인력 효과
●●
경주용 차가 급커브를 돌 때의 안정성
●●
선박 및 기타 해양 운송수단의 역학
●●
야구방망이로 맞힌 야구공의 비행경로
●●
포커 카드를 모자 속으로 던질 때 카드의 비행경로
이 목록에는 빠진 것이 많지만 이 정도면 대충 어떤 일이 가능한지 감이 오시죠? 게임에서 튕 기거나, 날거나, 구르거나, 미끄러지거나… 즉, 가만히 있지 않는 물체들은 전부 사실적인 시뮬 레이션을 통해 믿음직스럽게 행동하게 만들 수 있습니다. 그러면 현실감은 어떻게 성취할까요? 물론 물리법칙을 이용해서죠. 물리학은 매우 다양한 주 제를 섭렵하는 광범위한 과학 분야인데, 그중 사실적인 게임 콘텐츠에 가장 적합한 주제가 역 학입니다. 이 책에서 사실적인 물리법칙이라 칭하는 것도 바로 역학입니다.
* 1판의 출판 시점에 게리 파월은 MathEngine Plc에서 근무했습니다. MathEngine Plc는 단일물체 및 다중물체 동역학을 처리하는
Dynamics Toolkit 2와 Collision Toolkit 1이란 제품으로 유명합니다. 현재 이 회사는 CM Labs란 이름으로 사명을 바꿨습니다. † 1판이 나올 때 콜린스 박사는 하복닷컴의 CEO였습니다. 하복의 엔진은 리지드바디, 소프트바디, 클로스, 유체, 파티클 역학을 처리합니다. 하복은 2007년에 Intel이 인수했습니다.
12
역학은 정지 또는 이동 중인 물체 자체와 그 물체가 받는 힘의 효과를 다루는 학문입니다. 이걸 좀 더 자세히 나누면 정지 중인 물체만을 다루는 정역학과 운동 중인 물체만을 다루는 동역학 이 있습니다. 역사가 가장 깊고 연구도 가장 많이 진행된 물리학 분야인 역학의 공식적
dynamics
인 뿌리는 2000년 전 아리스토텔레스입니다. 이 주제를 이보다 먼저 다룬 자료로 『Problems
of Mechanics』도 있지만 이 책의 근원은 알려져 있지 않습니다. 초기 물리학자들은 몇몇 물리 현상이 마법 때문에 생긴다고도 했지만, 갈릴레오, 케플러, 오일러, 라그랑주, 달랑베르, 뉴턴, 아인슈타인 등 뛰어난 학자들이 물리학을 발전시켜 오늘날의 눈부신 기술 발전의 토대를 마련 했죠. 게임 속 물리는 주로 움직이는 물체를 대상으로 하므로 이 책에서도 주로 동역학을 자세히 다 룹니다. 동역학도 더욱 세분화됩니다. 물체가 받는 힘에 관계없이 물체의 운동만을 다루는 운 동학 kinematics과 물체의 움직임 및 물체가 받는 힘을 모두 고려하는 동역학 kinetics이 있지요.* 이 두 주제에 대해서 이 책의 여러 부분에 걸쳐 자세히 살펴볼 것입니다.
디지털 물리 이 책의 1판은 역학만을 다뤘습니다. 하지만 10년이 지난 지금은 디지털 물리도 이 책에 포함 시켰습니다. 우주론에서 말하는 디지털 물리학이 아니라, 스마트폰 등의 장치에서 쓸 수 있는 독특한 유저인터페이스와 관련된 물리입니다. Wii나 플레이스테이션, 엑스박스, 스마트폰 등 많은 플랫폼들이 새로운 입력장치 및 센서 기술을 소개하고 있습니다. 따라서 개발자도 이런 신기술을 잘 이해해야 최첨단 게임을 만들 수 있겠죠. 이것을 짐이라 생각하지 마세요. 게이머 는 언제나 새로운 것을 원하기에 이런 신기술은 게이머에게 새로운 경험을 제공할 수 있는 기 회입니다.
* 역주_ dynamics는 정지한 물체가 아닌 운동 중인 물체만을 다루는 분야이고, kinetics는 dynamics를 세분화한 것 중 물체의 운동을 변화시키는 힘을 다루는 분야를 일컫습니다.
13
이 책의 구성 물리에 기초한 현실성은 게임에서 새로운 영역이 아닙니다. 시중에 유통되는 많은 게임들이 이 미 물리엔진을 탑재하고 있지요. 또한 3D 모델링 및 애니메이션 프로그램도 자체 물리엔진을 가지고 있어 특정 형태의 움직임을 사실적으로 만드는 걸 도와줍니다. 물리 기반 게임 콘텐츠 의 다양한 측면을 논하는 기사들도 간간이 볼 수 있죠. 이와 동시에 실시간 리지드바디 시뮬레 이션 연구도 지난 수년간 매우 활발했고 기술 저널은 다양한 측면에서 이 주제를 다루는 글들 로 가득 차 있습니다. 그리고 학술 자료를 뒤지면 연결된 다중 리지드바디의 시뮬레이션부터 클로스cloth 시뮬레이션에 이르기까지 다양한 주제의 논문을 찾을 수 있을 겁니다. 이 모든 자료 는 매우 값지고 흥미로운 주제이지만 앞에서도 말했듯이 이 중 상당수가 곧바로 게임에 사용하 기에는 무리입니다. 역학에 대한 확실한 이해 없이는 이런 자료를 이해할 수도 없죠. 또한 이 중 많은 자료가 운동방정식을 푸는 데 필요한 수학 공식에 초점을 맞출 뿐 물체에 가해지는 힘 이나 시뮬레이션 대상이 되는 물체를 실용적으로 처리하는 법을 다루지 않습니다.
Animats의 존 네이글John Nagle에게 물어봤습니다.* 게임용 물리 기반 시뮬레이션을 개발할 때 가장 어려운 게 무엇이냐고. 그의 대답은 수치적으로 안정적이고 튼튼한 코드를 개발하는 것이 라더군요. 게리 파월도 매개변수 튜닝을 최소화하면서도 안정적이고 사실적인 행동을 만드는 것이 가장 힘든 일이라고 말했죠. 그렇습니다. 이동 중인 물체의 수학을 다룰 때에는 속도와 안 전성이 시뮬레이터의 핵심적인 요소입니다. 이외에도 시뮬레이션을 시작 및 지속시키는 힘들 을 정확하고 완전히 나타내는 것도 매우 중요합니다. 이 책에서 나중에 볼 수 있듯이 힘은 물체 의 행동을 관장하므로 물체가 사실적으로 행동하길 바란다면 힘 모델을 정확하게 만들어야 합 니다. 이처럼 역학과 힘의 성질을 제대로 이해하는 게 중요하기에 그에 맞게 이 책을 구성했습니다. 이 책은 크게 4부로 나뉘며, 각 부는 그 뒤에 이어지는 부의 기반이 됩니다.
* 1판이 출판될 때 존 네이글은 Softimage|3D용 동역학 플러그인 Falling Bodies의 개발자였습니다.
14
제1부. 물리학의 기초 역학을 복습합니다. 제1장. 기본 개념 이 책에서 사용하는 가장 기본적인 원칙을 설명합니다. 질량과 질량의 중심, 뉴턴의 법칙, 관성, 단위와 측정, 벡터 등의 주제를 살펴봅니다. 제2장. 운동학 선형속도 및 각속도, 가속도, 운동량, 2차원과 3차원에서 파티클과 리지드바디의 일반적인 운동을 설명합니다. 제3장. 힘 이 장에서 배우는 힘과 회전력의 원리는 운동학과 동역학을 연결하는 교두보입니다. 저항 력, 역장, 압력 등, 힘의 일반적인 분류를 논합니다. 제4장. 동역학 제2장과 제3장에서 배운 내용을 합쳐 동역학에 대해 설명하고 운동학과 동역학 사이의 차 이를 알아봅니다. 그리고 2차원과 3차원에서 파티클 및 리지드바디의 동역학을 다룹니다. 제5장. 충돌 파티클 및 리지드바디의 충돌반응에 대해 알아봅니다. 충돌반응이란 서로 부딪힌 두 물체 에 생기는 일입니다. 제6장. 발사체 이 장은 간단한 발사체의 물리법칙에 대해 설명하면서 나중에 나올 주제들의 물리모델을 만드는 초석을 다집니다.
15
제2부. 리지드바디 동역학 실시간 시뮬레이션을 소개합니다. 제7장. 실시간 시뮬레이션 실시간 시뮬레이션을 소개하면서 수치적분기법에 대해 설명합니다. 다양한 기법들을 소개 하고 안정성과 튜닝에 대해서도 논합니다. 제8장. 파티클 리지드바디 시뮬레이션에 들어가기 전에 파티클 시뮬레이션을 구현하는 법을 설명합니다. 제9장. 2D 리지드바디 시뮬레이터 제8장에서 구현한 파티클 시뮬레이터를 확장하여 리지드바디 시뮬레이터를 구현하는 법을 보여줍니다. 여기서 만드는 리지드바디 시뮬레이터는 회전과 관성텐서도 처리합니다. 제10장. 충돌반응 구현하기 앞에서 만든 2D 시뮬레이터에 충돌검출과 충돌반응을 더해 실시간 충돌을 구현합니다. 제11장. 3D 리지드바디 시뮬레이션에서의 회전
3D에서 리지드바디 회전을 처리하는 법을 배웁니다. 관성텐서를 처리하는 법과 2D 시뮬 레이터를 3D로 확장하는 법도 보여드리겠습니다. 제12장. 3D 리지드바디 시뮬레이션 이 장에서는 서로 연결되지 않은 여러 물체를 시뮬레이터에 추가합니다. 따라서 다수의 리 지드바디 충돌법도 소개하고, 안정성 문제 및 사실성에 관한 내용도 소개합니다. 제13장. 연결된 물체 이 장에서는 한 단계 더 나아가 리지드바디를 서로 연결해봅니다. 이것은 인체나 자동차 등
16
의 게임 물체를 시뮬레이션하는 데 사용할 수 있겠죠. 다양한 커넥터의 종류에 대해서도 알 아봅니다. 제14장. 물리엔진 물리모델, 시뮬레이션 물체 관리자, 충돌, 힘 이펙터, 수치적분기 등 물리엔진의 요소들을 살펴봅니다.
제3부. 물리모델 만들기 실제세계에서 일어나는 물리법칙을 살펴보는 부분입니다. 제15장. 비행기 추진력, 저항, 기하학, 질량, 그리고 가장 중요한 양력에 이르기까지 비행 물리를 집중적으 로 알아봅니다. 제16장. 배 부력, 안정성, 부피, 저항, 속력 등 배에 적용되는 물리법칙을 다룹니다. 제17장. 차량과 호버크라프트 공기동역학적 저항, 회전저항, 제동거리, 뱅크 등, 자동차의 성능에 영향을 미치는 물리법칙 을 배워봅니다. 차량과 선박의 중간쯤 되는 운송수단인 호버크라프트를 두드러지게 만드는 특성들도 알아보겠습니다. 공중부양, 공기정역학적 양력, 방향조정 등의 주제를 다룹니다. 제18장. 총과 폭발 폭발 강도, 반동, 탄도 등 총의 물리법칙에 대해 집중적으로 다룹니다. 게임에서 총을 쏘면 폭발이 일어나는 게 보통이므로 폭발의 물리법칙과 모델을 만드는 법에 대해서도 여기서 설명하겠습니다.
17
제19장. 스포츠 야구, 골프, 테니스 등 구기종목의 물리에 대해 알아봅니다. 여기서 다루는 물리는 발사체 에 그치지 않고, 투구, 타격, 방망이와 공의 충돌, 골프채 스윙, 골프공 충돌, 테니스채 스윙 이나 테니스채와 테니스공의 충돌에 대해서도 적용할 수 있습니다.
제4부. 디지털 물리 가속도계, 터치스크린, GPS와 같은 장비의 물리법칙을 배우고 게임에서 이들을 사용하는 법을 알아봅니다. 제20장. 터치스크린 터치스크린은 모바일 게임에서 촉각 인터페이스를 가능하게 합니다. 이 장에서는 터치스크 린의 물리에 대해 설명하고 게임에서 이 인터페이스를 사용하는 방법을 알아봅니다. 특히 제스처를 통해 게임 속 물체와 물리적으로 교류하는 법을 다루겠습니다. 제21장. 가속도계 가속도계는 모바일 기기와 게임컨트롤러에서 많이 쓰는 장치로 플레이어와 게임 물체 사이 에서 가상적인 물리 상호작용을 가능하게 해줍니다. 이 장에서는 가속도계가 작동하는 원 리와 이로부터 얻을 수 있는 데이터, 그리고 그 데이터를 이용해서 게임 속 물체와 물리적 으로 상호작용하는 법에 대해 알아볼 것입니다. 여기서 다루는 주제는 가속도 데이터를 적 분하여 속도와 변위 및 회전을 구하는 법 등입니다. 제22장. 위치기반 게임 스마트폰은 보통 GPS를 탑재하고 있습니다. 이 장에서는 GPS 장치의 물리법칙을 설명합 니다. 심지어는 상대론적 효과까지도요. 그리고 GPS에서 얻어올 수 있는 데이터를 설명하 고, 이 데이터를 이용하여 게임 속 물체와 상호작용하는 법도 알려드립니다. 일례로 GPS 데이터를 미분하여 그로부터 속력과 가속도를 구하는 법을 살펴볼 겁니다.
18
제23장. 압력센서와 로드셀 압력을 감지하는 장치도 게임에서 사용합니다. 예를 들어 Wii의 밸런스보드는 압력센서를 이용하여 Wii Fit 게임을 지원하지요. 이 장에서는 압력센서의 물리이론을 설명하고, 이로 부터 구할 수 있는 데이터와 이 데이터를 게임 입력에 사용하는 법을 설명하겠습니다. 제24장. 3D 디스플레이 플레이스테이션 무브Move나 마이크로소프트의 키넥트Kinect는 광학추적장치를 사용하여 플 레이어의 움직임이나 게임컨트롤러의 위치를 감지합니다. 이 장은 광학추적장치의 물리이 론과 이 기술을 게임에 접목하는 법에 대해 알아보겠습니다. 제25장. 광학추적 기법 텔레비전과 휴대용 게임 콘솔이 3D 디스플레이를 구현하려고 경쟁함에 따라 여러 다양한 기술이 개발되었습니다. 여기서는 반드시 3D 안경이 필요한 스테레오스코픽 디스플레이 와 안경이 필요 없는 자동 스테레오스코픽 디스플레이에 대해 알아봅니다. 또한 홀로그램 과 볼륨 디스플레이의 미래를 예측해서 나중에 이런 기술을 쓸 기회가 올 때 그에 잘 대비 할 수 있게 도와드리겠습니다. 제26장. 소리 소리는 게임의 몰입감에 특히 중요한 요소입니다. 하지만 오늘날까지 소리의 물리법칙을 다루는 게임 물리 책이 없었죠. 이 장에서는 소리의 속력과 도플러효과 등 소리 물리에 집 중하겠습니다. 부록A. 벡터연산
2D 및 3D 시뮬레이션에 필요한 모든 벡터연산을 C + + 클래스로 구현합니다. 부록B. 행렬연산
3×3 행렬을 처리하는 데 필요한 모든 연산을 C + + 클래스로 구현합니다
19
부록C. 쿼터니언 연산
3D 리지드바디 시뮬레이션에서 처리해야 하는 모든 쿼터니언 연산자를 클래스로 구현합 니다. 다시 요약하자면 제1부 ‘물리학의 기초’는 운동학 및 동역학 등 뉴턴역학의 기본 원리를 집중적 으로 알아봅니다. 운동학이란 물체의 운동을 다루는 학문입니다. 여기서 선형속도 및 각속도, 가속도를 모두 다룰 겁니다. 동역학은 힘과 그로 인해 생기는 운동을 담당하는 학문입니다. 제
1부는 제2부 ‘리지드바디 동역학’을 배우기 전에 반드시 잘 이해해야 하는 내용입니다. 이미 고 전역학에 대해 잘 아는 독자들은 건너뛰어도 별 문제가 없습니다. 제2부 ‘리지드바디 동역학’은 리지드바디 동역학과 단일물체 및 다중물체 시뮬레이션을 모두 개발하는 법을 살펴봅니다. 이 부분은 수치적분, 파티클 및 리지드바디의 실시간 시뮬레이션, 연결된 리지드바디 등을 다룹니다. 제2부는 게임 프로그래머들이 흔히 물리엔진의 구성요소라 고 생각하는 내용들을 담고 있습니다. 제3부 ‘물리모델 만들기’는 물리적 모델을 만드는 법을 설명합니다. 제3부의 목적은 독자들이 물리적 안목을 갖추게 하여 물리모델에 반드시 포함해야 하는 것과 그러지 않아도 현실성을 해 치지 않는 것을 판단할 수 있도록 하는 겁니다. 시뮬레이션의 대상이 되는 모든 물체들을 여기 에서 소개할 순 없습니다. 그 대신 게임에서 시뮬레이션할 법한 몇 가지 것들을 다루겠습니다. 항공기, 선박, 스포츠에 쓰이는 공 등을 다루면서 이들의 물리적 성질에 대해 설명하고, 이에 적합한 물리모델을 개발하려면 내려야 할 결정들에 대해 살펴봅니다. 제4부 ‘디지털 물리’는 광범위한 디지털 물리를 다룹니다. 디지털 물리란 스마트폰이나 닌텐도
Wii 등의 게임 콘솔에서 사용하는 흥미로운 기술을 포함합니다. 가속도계, 터치스크린, GPS 등의 물리법칙들을 설명하면서 게임에서 이들을 사용하는 법을 소개하겠습니다. 여기에 나오 는 주제들은 대부분의 게임 프로그래머가 게임 물리라고 생각지 않는 것입니다. 하지만 이 기 술들이 최신 모바일 게임에서 차지하는 비중이 점점 증가하고 있으니 모두 잘 알아두시길 바랍 니다.
20
실시간 시뮬레이션을 만들기 위해 알아본 내용 외에도 이 책의 마지막에 있는 ‘참고문헌’에서 역학, 수학, 기타 기술적인 주제에 대한 자료들을 찾아볼 수 있습니다. 책에서 사용한 예제의 전체 소스 코드는 http://physicsforgamedevelopers.com에서 다운 로드할 수 있습니다.
감사의 말 우선 이 책의 편집자인 앤디 오럼Andy Oram에게 감사의 말을 드리고 싶습니다. 앤디 씨가 저희의 원고를 꼼꼼히 검토해주고 훌륭한 제안을 해줬기에 이 책이 나올 수 있었죠. 또한 1판에 살을 붙여 이 책을 쓸 수 있게 허용해준 오라일리와 임직원들에게 감사의 말씀을 드립니다 이 책의 감수자 크리스천 스토버Christian Stober와 폴 저클Paul Zirkle의 폭넓은 지식도 2판에 매우 큰 도움이 되었습니다. 저자 중 데이비드는 사랑스런 반려자이자 최고의 친구인 헬레나Helena의 끝없는 지원과 격려에 고마움을 느끼고, 매일매일을 특별하게 만들어주는 딸 내털리아Natalia에게도 고맙단 말을 하고 싶습니다. 저자 중 브라이언은 2판에 참가할 기회를 준 공저자 데이비드와 세계에 호기심을 가지도록 잘 키워주신 부모님 배리Barry와 섀런Sharon에게도 감사의 말을 전하고 싶다는군요. 마지막으로 그 의 약혼녀 앤 해슬리Anne Hasuly의 격려가 없었다면 이 책을 완성하기가 어려웠을 거라 합니다.
21
CONTENTS
추천사 .......................................................................................................................
4
지은이 소개 ...............................................................................................................
6
옮긴이 소개 ...............................................................................................................
7
옮긴이의 말 ...............................................................................................................
8
이 책에 대하여 . .......................................................................................................
PART
10
I 물리학의 기초
CHAPTER
1 기본 개념 1.1 뉴턴의 운동법칙 ......................................................................................................... 37 1.2 단위와 측정 ............................................................................................................... 38 1.3 좌표계 ...................................................................................................................... 42 1.4 벡터 ......................................................................................................................... 42 1.5 미분과 적분 ............................................................................................................... 43 1.6 질량, 질량중심, 관성모멘트 ........................................................................................... 44 1.7 뉴턴의 제2운동법칙 .................................................................................................... 55 1.8 관성텐서 ................................................................................................................... 59 1.9 상대론적 시간 ............................................................................................................ 65
CHAPTER
2 운동학 2.1 속도와 가속도 ............................................................................................................ 70 2.2 등가속도 ................................................................................................................... 73 2.3 가변가속도 ................................................................................................................ 75
22
2.4 2차원 파티클 운동학 ................................................................................................... 77 2.5 3차원 파티클 운동학 ................................................................................................... 80 2.5.1 X 성분 ............................................................................................................ 81 2.5.2 Y 성분 ............................................................................................................ 83 2.5.3 Z 성분 ............................................................................................................ 83 2.5.4 벡터 ............................................................................................................... 83 2.5.5 목표물 맞히기 .................................................................................................. 84
2.6 키네마틱 파티클 폭발 .................................................................................................. 90 2.7 리지드바디 운동학 ...................................................................................................... 97 2.8 로컬좌표축 ................................................................................................................ 98 2.9 각속도 및 각가속도 ..................................................................................................... 98
CHAPTER
3힘 3.1 다양한 힘 ................................................................................................................ 107 3.2 역장 ....................................................................................................................... 109 3.3 마찰력 .................................................................................................................... 109 3.4 유체저항 ................................................................................................................. 111 3.5 압력 ....................................................................................................................... 113 3.6 부력 ....................................................................................................................... 113 3.7 스프링과 댐퍼 .......................................................................................................... 116 3.8 힘과 회전력 ............................................................................................................. 117 3.9 마치며 .................................................................................................................... 120
23
CONTENTS
CHAPTER
4 동역학 4.1 2차원 파티클 동역학 ................................................................................................. 123 4.2 3차원 파티클 동역학 ................................................................................................. 127 4.2.1 X 성분 .......................................................................................................... 130 4.2.2 Y 성분 .......................................................................................................... 131 4.2.2 Z 성분 .......................................................................................................... 131 4.2.3 다시 살펴보는 대포 예제 ................................................................................... 132
4.3 리지드바디 동역학 .................................................................................................... 136
CHAPTER
5 충돌 5.1 충격-운동량 법칙 ..................................................................................................... 140 5.2 충돌 ....................................................................................................................... 141 5.3 선형충격 및 각충격 ................................................................................................... 148 5.4 마찰 ....................................................................................................................... 151
CHAPTER
6 발사체 6.1 단순 탄도 ................................................................................................................ 157 6.2 저항 ....................................................................................................................... 161 6.3 마그누스 효과 .......................................................................................................... 169 6.4 가변질량 ................................................................................................................. 175
24
PART
II 리지드바디 동역학
CHAPTER
7 실시간 시뮬레이션 7.1 운동방정식의 적분 .................................................................................................... 180 7.2 오일러 기법 ............................................................................................................. 182 7.3 더 나은 방법들 ......................................................................................................... 189 7.4 마치며 .................................................................................................................... 195
CHAPTER
8 파티클 8.1 단순한 파티클 모델 ................................................................................................... 200 8.1.1 적분기 .......................................................................................................... 202 8.1.2 렌더링 .......................................................................................................... 203
8.2 기초적인 시뮬레이터 ................................................................................................. 204 8.3 외부힘 구현하기 ....................................................................................................... 207 8.4 충돌 구현하기 .......................................................................................................... 209 8.4.1 파티클-지면 충돌 ........................................................................................... 209 8.4.2 파티클-장애물 충돌 ......................................................................................... 216
8.5 튜닝 ....................................................................................................................... 221
CHAPTER
9 2D 리지드바디 시뮬레이터 9.1 모델 ....................................................................................................................... 224 9.1.1 좌표변환 ....................................................................................................... 232 9.1.2 적분기 .......................................................................................................... 233 9.1.3 렌더링 .......................................................................................................... 235
25
CONTENTS
9.2 기초적인 시뮬레이터 ................................................................................................. 236 9.3 튜닝 ....................................................................................................................... 240
CHAPTER
10 충돌반응 구현하기 10.1 선형충돌반응 ........................................................................................................ 245 10.2 각효과 ................................................................................................................. 252
CHAPTER
11 3D 리지드바디 시뮬레이션에서의 회전 11.1 회전행렬 .............................................................................................................. 268 11.2 쿼터니언 .............................................................................................................. 272 11.2.1 쿼터니언 연산 .............................................................................................. 274
11.3 3D 시뮬레이션에서의 쿼터니언 ................................................................................ 281
CHAPTER
12 3D 리지드바디 시뮬레이션 12.1 모델 .................................................................................................................... 286 12.2 적분 .................................................................................................................... 290 12.3 비행조종 시스템 .................................................................................................... 293
CHAPTER
13 연결된 물체 13.1 스프링과 댐퍼 ....................................................................................................... 301 13.2 파티클 연결하기 .................................................................................................... 302 13.2.1 로프 ........................................................................................................... 302
26
13.3 리지드바디 연결하기 .............................................................................................. 310 13.3.1 고리사슬 ..................................................................................................... 310
CHAPTER
14 물리엔진 14.1 자신만의 물리엔진 만들기 ....................................................................................... 327 14.1.1 물리모델 ..................................................................................................... 330 14.1.2 시뮬레이션 물체 관리자 .................................................................................. 331 14.1.3 충돌검출 ..................................................................................................... 332 14.1.4 충돌반응 ..................................................................................................... 333 14.1.5 힘 이펙터 .................................................................................................... 334 14.1.6 수치적분기 .................................................................................................. 335
PART
III 물리모델 만들기
CHAPTER
15 비행기 15.1 기하구조 .............................................................................................................. 341 15.2 양력과 저항 .......................................................................................................... 343 15.3 다른 힘들 ............................................................................................................. 348 15.4 조종 .................................................................................................................... 350 15.5 모델 만들기 .......................................................................................................... 351
27
CONTENTS
CHAPTER
16 배 16.1 복원성과 침몰 ....................................................................................................... 371 16.1.1 복원성 ........................................................................................................ 371 16.1.2 침몰 ........................................................................................................... 373
16.2 배의 움직임 .......................................................................................................... 375 16.2.1 상하동요 ..................................................................................................... 376 16.2.2 롤 .............................................................................................................. 376 16.2.3 피치 ........................................................................................................... 377 16.2.4 짝운동 ........................................................................................................ 377
16.3 저항과 추진 .......................................................................................................... 377 16.3.1 일반적인 저항 .............................................................................................. 377 16.3.2 추진 ........................................................................................................... 383
16.4 조작성 ................................................................................................................. 385 16.4.1 키와 추력편향 .............................................................................................. 385
CHAPTER
17 차량과 호버크라프트 17.1 차량 .................................................................................................................... 389 17.1.1 저항 ........................................................................................................... 390 17.1.2 동력 ........................................................................................................... 391 17.1.3 제동거리 ..................................................................................................... 392 17.1.4 스티어링 ..................................................................................................... 393
17.2 호버크라프트 ........................................................................................................ 396 17.2.1 작동원리 ..................................................................................................... 396 17.2.2 저항 ........................................................................................................... 398 17.2.3 조종 ........................................................................................................... 402
28
CHAPTER
18 총과 폭발 18.1 발사체의 움직임 ..................................................................................................... 403 18.2 조준 .................................................................................................................... 405 18.2.1 영점조정 ..................................................................................................... 407 18.2.2 호흡과 자세 ................................................................................................. 410
18.3 반동과 충격 .......................................................................................................... 412 18.4 폭발 .................................................................................................................... 413 18.5 파티클 폭발 .......................................................................................................... 413 18.6 폴리곤 폭발 .......................................................................................................... 417
CHAPTER
19 스포츠 19.1 골프스윙 모델 만들기 ............................................................................................. 423 19.1.1 골프스윙 방정식 풀기 . ................................................................................... 426
19.2 당구 .................................................................................................................... 431 19.2.1 구현 ........................................................................................................... 434 19.2.2 초기화 ........................................................................................................ 436 19.2.3 시뮬레이션 .................................................................................................. 440 19.2.4 힘 계산 ....................................................................................................... 442 19.2.5 충돌처리 ..................................................................................................... 448
29
CONTENTS
PART
IV 디지털 물리
CHAPTER
20 터치스크린 20.1 터치스크린 종류 .................................................................................................... 461 20.1.1 저항막방식 .................................................................................................. 461 20.1.2 정전용량방식 ............................................................................................... 462 20.1.3 적외선방식 및 광학영상 기법 ........................................................................... 462 20.1.4 색다른 방식: 진동파신호 및 표면음파 ................................................................ 462
20.2 터치스크린의 물리 ................................................................................................. 463 20.2.1 저항막방식 터치스크린 . ................................................................................. 463 20.2.2 정전용량방식 터치스크린 ................................................................................ 468
20.3 예제 프로그램 ....................................................................................................... 469 20.3.1 멀티터치 ..................................................................................................... 470
20.4 다른 고려할 점 ...................................................................................................... 470 20.4.1 햅틱 피드백 ................................................................................................. 471 20.4.2 게임 속에서 터치스크린을 이용하기 .................................................................. 471 20.4.3 마우스 입력과의 차이 . ................................................................................... 472 20.4.4 커스텀 제스처 .............................................................................................. 472
CHAPTER
21 가속도계 21.1 가속도계 이론 ....................................................................................................... 474 21.1.1 MEMS 가속도계 .......................................................................................... 476 2.1.2 일반적인 가속도계 스펙 .................................................................................... 478 2.1.3 데이터 클리핑 ................................................................................................ 478
30
2.2 방향 감지 ................................................................................................................ 479 2.3 기울기 감지 ............................................................................................................. 481 2.3.1 폰을 기울여 스프라이트 조종하기 ....................................................................... 481 2.3.2 2 자유도 ....................................................................................................... 482
CHAPTER
22 위치기반 게임 22.1 위치기반 게임 ....................................................................................................... 489 22.1.1 지오캐싱과 리버스 지오캐싱 ............................................................................ 490 22.1.2 혼합현실 ..................................................................................................... 490 22.1.3 증강현실 게임 .............................................................................................. 491
22.2 몇 시예요? ............................................................................................................ 491 22.2.1 2차원 수학 처리 ........................................................................................... 492
22.3 위치, 위치, 위치 ..................................................................................................... 496 22.3.1 거리 ........................................................................................................... 496 22.3.2 대권 선수방향 .............................................................................................. 498 22.3.3 항정선 ........................................................................................................ 500
CHAPTER
23 압력센서와 로드셀 23.1 압력 .................................................................................................................... 504 23.1.1 높은 압력의 효과 .......................................................................................... 504
23.2 버튼 연타 ............................................................................................................. 506 23.2.1 로드셀 ........................................................................................................ 507
23.3 기압계 ................................................................................................................. 512
31
CONTENTS
CHAPTER
24 3D 디스플레이 24.1 양안비전 .............................................................................................................. 515 24.2 스트레오스코픽의 기본원리 ..................................................................................... 518 24.2.1 좌우 절두체 ................................................................................................. 518
24.3 디스플레이의 종류 ................................................................................................. 521 24.3.1 보색 애너글리프 ........................................................................................... 522 24.3.2 선형편광과 원형편광 . .................................................................................... 523 24.3.3 액정 플라즈마 .............................................................................................. 526 24.3.4 자동 스테레오스코픽 영상 ............................................................................... 527 24.3.5 첨단 기술 .................................................................................................... 529
24.4 프로그래밍 시 고려사항 .......................................................................................... 531 24.4.1 능동적 스테레오스코픽화 ................................................................................ 531 24.4.2 수동적 스테레오스코픽화 ................................................................................ 534
CHAPTER
25 광학추적기법 25.1 센서와 SDK ......................................................................................................... 536 25.1.1 키넥트 ........................................................................................................ 536 25.1.2 OpenCV .................................................................................................... 537
25.2 수치미분 .............................................................................................................. 538
CHAPTER
26 소리 26.1 소리란 무엇인가 ..................................................................................................... 543 26.2 음파의 특성과 작용 ................................................................................................ 547 26.2.1 조화파 ........................................................................................................ 547
32
26.2.2 중첩 ........................................................................................................... 549 26.2.3 음속 ........................................................................................................... 550 26.2.4 감쇠 ........................................................................................................... 551 26.2.5 반사 ........................................................................................................... 552 26.2.6 도플러효과 .................................................................................................. 553
26.3 3D 사운드 ............................................................................................................ 554 26.3.1 3D 사운드를 듣는 방법 .................................................................................. 554 26.3.2 간단한 예제 ................................................................................................. 556
APPENDIX
A 벡터연산 ............................................................................................................... 561
APPENDIX
B 행렬연산 ............................................................................................................... 573
APPENDIX
C 쿼터니언 연산 ................................................................................................... 585
APPENDIX
D 참고문헌 ............................................................................................................... 599
찾아보기 ...............................................................................................................................................
607
33
Part
I
물리학의 기초
제1부에서 배워볼 내용은 뉴턴역학의 기초 개념인 운동학kinematics과 동역학kinetics입니다. 운동학은 물체의 움 직임만을 연구하는 학문인데, 이 중에서 특히 선속도linear velocity와 각속도angular velocity, 그리고 가속도acceleration에 대해 알아보도록 하죠. 이와 반대로 동역학은 물체에 힘을 줬을 때 그 물체의 움직임이 어떻게 변하는지를 연 구하는 학문입니다. 여기서 나오는 내용들을 잘 이해해야 제2부에서 리지드바디(강체) 동역학을 배울 때 큰 어 려움이 없을 겁니다. 하지만 이미 고전역학을 잘 알고 있다면 그냥 제1부를 건너뛰어도 별 상관은 없어요.
1장 - 기본 개념
35
Part I
물리학의 기초
1장
기본 개념
2장
운동학
3장
힘
4장
동역학
5장
충돌
6장
발사체
CHAPTER
1
기본 개념
이 장에서 배울 내용은 가장 기초적인 물리법칙들입니다. 이 기초 물리법칙은 이 책 전체에서 두루두루 사용할 거에요. 우선 역학에서 정말 중요한 개념인 뉴턴의 운동법칙에 대해 알아보겠 습니다. 그다음에는 단위unit와 측정에 대해 논해보면서, 물리 계산을 할 때 올바른 단위를 사용 하는 게 얼마나 중요한지도 알려드리겠습니다. 뭐, 내친김에 다양한 물리량을 나타내는 단위들 까지도 살펴보도록 하죠. 어차피 이 책의 곳곳에서 사용할 것들이니까요. 또한 이 책에서 사용 할 표준좌표계도 하나 정의하겠습니다. 그다음으로는 질량, 질량중심, 관성모멘트의 개념을 소 개하고, 질량의 합을 계산하는 방법도 알려드리도록 하지요. 그리고 마지막으로 뉴턴의 운동법 칙 중 특히 제2운동법칙을 좀 더 자세하게 살펴본 뒤, 벡터vector와 상대론적 시간 relativistic time에 대해 간략히 알아보겠습니다.
1.1 뉴턴의 운동법칙 1687년 즈음 아이작 뉴턴은 역학에 대한 자신의 생각을 정리해 『자연철학의 수학적 원리 』란 책을 출간합니다. 이 책에서 뉴턴은 이제는 너무나도 유명
Philosophiae Naturalis Principia Mathematica
해진 운동법칙을 언급했는데, 그 내용은 다음과 같습니다.
1장 - 기본 개념
37
| 제1운동법칙: 관성의 법칙 | 한곳에 정지해 있는 물체는 외부의 힘을 받지 않는 한 계속 그 자리에 멈춰 있으며, 이동 중 인 물체는 외부의 힘이 없다면 계속 일정한 속도로 직선운동을 한다. 이것을 관성이라 한다. | 제2운동법칙: 가속도의 법칙 | 물체의 가속도는 그 물체에 가해지는 힘의 합(합력)에 비례하며, 이때 가속방향은 힘이 가 해지는 방향과 일치한다. | 제3운동법칙: 작용과 반작용의 법칙 | 물체에 가해지는 힘(작용)에는 언제나 그와 반대되는 힘(반작용)이 존재한다. 반작용의 크 기는 작용의 크기와 동일하고, 방향은 작용의 방향과 반대이다. 즉, 작용과 반작용의 방향은 일직선 상에 존재한다. 역학 분석 분야에서 이 법칙들은 모두 중요한 기반이 되지만 우리에게 특히 중요한 법칙은 두 번째입니다. 그럼 이 법칙을 공식으로 표현해볼까요?
F=ma 힘 = 질량 × 가속도 여기서 힘(F )은 물체에 가해지는 합력resultant force, 질량(m )은 물체의 질량, 가속도(a )는 이 물 체의 무게중심에 가해지는 선가속도입니다. 제2운동법칙에 대해서는 조금 이따 자세히 논해보 기로 하고 그 전에 먼저 반드시 알아야 할 기초 내용들을 배워보겠습니다.
1.2 단위와 측정 수년간 다양한 공학 수업을 가르쳐오면서 학생들이 흔히 저지르는 실수를 하나 발견했는데요. 그건 물리량에 엉뚱한 측정단위를 사용하는 것이었습니다. 예를 들자면, 선박의 성능을 측정할 때 흔히 잘못 쓰는 단위가 속도입니다. 근데 속도를 노트knots에서 미터/초(m/s )meter per second로 변환하는 것을 까먹는 학생들이 많더군요. 1 노트는 0.514 m/s니까 이미 이것만으로도 상당한 오차가 발생합니다. 게다가 이 분야에서 사용하는 물리량 중에 꽤 많은 수가 속도의 제곱에 비
38
1부 - 물리학의 기초
례하거든요? 그렇다면 최대 185%까지도 오차가 난다는 겁니다. 그러니 계산 결과가 기대치와 다르고 뭔가 이상하다면 제일 먼저 공식에서 측정단위를 일관되게 사용했는지 확인해보세요. 측정단위의 일관성을 확인할 때는 올바른 측정단위 자체를 썼는지를 확인하는 것도 중요하지 만 그 측정단위를 구성하는 기본단위도 정확한지 확인해야 합니다. 기본단위라 하면 질량, 길 이, 시간을 의미하는데 물리량을 측정할 때는 이들을 조합해서 만든 유도단위derived unit를 흔히 사용합니다. 따라서 유도단위뿐만 아니라 기본단위들의 일관성까지도 유지해야 올바른 계산 결과를 얻을 수 있는 거죠. 예를 들어 물체의 무게는 힘의 단위로 측정하는데, 이 단위는 다음과 같은 기본 단위로 이루어져 있습니다.
F = (M) (L / T2) 힘 = 질량 × (길이 / 시간2) 여기서 M은 질량, L은 길이, 그리고 T는 시간입니다. 어디선가 많이 본 공식이라고요? (L /
T2 )는 가속도의 단위니까 이걸 가속도 a로, 그리고 물체의 질량을 m으로 바꾸면 다음과 같은 식이 나오겠네요.
F=ma 힘 = 질량 × 가속도 바로 뉴턴의 제2운동법칙을 나타내는 공식이군요. 이 방정식에 대해서는 나중에 자세하게 살 펴보도록 하겠습니다. 그냥 심심해서 위 공식을 도출해본 건 아닙니다. 그보단 측정단위의 일관성을 검증하는 법을 보여드린 거죠(물론 그 방향은 반대였지만). 즉, 물체에 작용하는 힘을 나타내는 공식을 만들 때는 언제나 (M ) (L / T2 )와 같은 기본단위로 그 공식을 구성해야 합니다. 지금은 이 이야기 가 별로 가슴에 와 닿지 않죠? 하지만 나중에 좀 복잡한 공식을 다루다 보면 공식들을 이렇게 기본단위로 쪼개서 일관성을 확인할 일이 있을 겁니다. 이외에도 국제단위계le Système international d’ 를 사용해 물리량을 표현하기도 합니다. 국제단위계를 간단히 줄여
unités 또는 International System of Units
SI 단위라고도 합니다. 이외에도 다양한 단위계들이 있지만 게임 속에서 어떤 단위계를 사용해 도 큰 문제는 없습니다. 특히 게이머에게 그 단위를 직접 보여줄 일이 없다면 말이죠. 단, 각 단 위들의 일관성은 반드시 유지해야 합니다.
1장 - 기본 개념
39
그럼, 한 번 더 확인차 다음 공식을 살펴봅시다. 이 공식은 유체(예: 물과 같은 액체) 속에서 움직이는 물체들의 마찰저항*을 계산합니다.
Rf = 1/2 ρ V2 S Cf 마찰저항 = 1/2 (물의 밀도) × (물체의 속도)2 × (물속에 잠긴 면적) × (저항계수) 이 공식에서, 마찰저항(Rf )은 마찰에 의한 저항(력), ρ는 물의 밀도, V는 움직이는 물체의 속 도, S는 물속에 잠긴 물체의 면적, 그리고 저항계수(Cf )는 물체의 저항계수(이 값은 실험을 통 해 결정합니다)입니다. 자, 이제 이 공식의 변수들을 기본단위로 바꿔볼까요? 위 공식이 올바 르다면 좌변과 우변의 기본단위들이 완벽히 일치해야 합니다. 우선 좌변을 먼저 보죠. 마찰저 항(Rf )은 힘이므로 이것의 기본측정단위는 다음과 같은 형태를 가집니다.
(M) (L / T2) 질량 × (길이 / 시간2) 앞서 말했듯 이 방정식의 오른쪽에 있는 모든 항들을 합치면 그 기본단위가 이 수식과 같은 형 태여야 합니다. 그럼 우선 밀도, 속도, 표면적의 기본단위를 살펴보죠. ●●
밀도: (M ) / (L3 ), 질량 / 길이3
●●
속력: (L ) / (T ), 길이 / 시간
●●
면적: (L2 ), 길이2
이제 ρ V2 S 항의 기본단위들을 합치면 아래와 같습니다.
[(M) / (L3)] [(L) / (T)]2 [L2] (질랑 / 길이3) × (길이 / 시간)2 × 길이2 분수가 여러 개 보이는데 이 분수들을 합쳐봅시다.
(M L2 L2) / (L3 T2) (질량 × 길이2 × 길이2) / (길이3 × 시간2) 이제 분모와 분자 모두에 있는 기본단위들을 약분해볼까요?
* 역주_ 물리학에서는 마찰항력이라고도 합니다.
40
1부 - 물리학의 기초
M (L / T2) 질량 × (길이 / 시간2) 어라? 앞서 봤던 마찰저항 R f 의 기본단위와 동일하네요? 자, 그럼 이걸로 이 공식에서 사용하 는 단위들의 일관성이 확인되었군요. 이와 같은 연습을 통해 또 한 가지 알 수 있는 사실은 저 항계수 C f 가 반드시 무단위nondimensional여야 한다는 것입니다. C f 가 기본단위를 가진다면 좌항 과 우항의 단위가 달라질 테니까요. 자, 그럼 연습은 이쯤이면 된 것 같고 이제 흔히 사용하는 물리량을 살펴보도록 하죠. 이 책에 서 사용하는 여러가지 단위들을 모두 [표 1-1 ]에 정리해두었습니다. 표 1-1 흔히 사용하는 물리량과 측정단위 물리량
기호
측정단위
미터법(SI 단위)
야드파운드법
선가속도
A
L / T2
m/s2
ft/s2
각가속도
A
radian / T2
radian/s2
radian/s2
밀도
P
M / L3
kg/m3
slug/ft3
힘
F
M (L / T2)
newton, N
pound, lbs
동점도
N
L2 / T
m2/s
ft2/s
길이
L(또는 x, y, z)
L
meter, m
feet, ft
질량
M
M
kilogram, kg
Slug
모멘트(회전력)
M*
M (L2 / T2)
N ·m
ft·lbs
질량관성모멘트
I
M L2
kg·m2
lbs·ft·s2
압력
P
M / (L T2)
N/m2
lbs/ft2
시간
T
T
seconds, s
seconds, s
선속도
V
L/T
m/s
ft/s
각속도
Ω
radian / T
radian/s
radian/s
점도
µ
M / (L T)
N·s/m
lbs·s/ft2
2
* 일반적으로 대문자 M은 물체에 작용하는 모멘트( moment), 혹은 회전력( torque)를 나타내며, 소문자 m은 물체의 질량을 나타냅니다. 근데 질량의 기본단위도 대문자 M이네요? 흠, 조금 혼란스러울 때가 있겠네요. 이런 경우 대부분 문맥상으로 의미를 파악할 수 있지만, 그렇 지 않은 경우가 있다면 본문에서 그때그때 확실히 설명을 드리겠습니다.
1장 - 기본 개념
41
1.3 좌표계 이 책에서 공간상의 위치를 표기할 때 사용하는 표준은 오른손 직교좌표계right-handed Cartesian 입니다. 이것을 2차원에서 사용하면 [그림 1-1 ] (a )와 같이 반시계 방향으로 하
coordinate system
는 회전이 + 회전입니다. 그림 1-1 오른손 직교좌표계
(a) 2차원
(b) 3차원
3차원 회전은 [그림 1-1 ] (b )과 같습니다. x축 회전은 +y축에서 +z축으로 도는 회전이, y 축 회전은 +z축에서 +x축으로 도는 회전이, 그리고 z축 회전은 +x축에서 +y축으로 도는 회전이 + 회전입니다.
1.4 벡터 잠깐 고등학교 수학시간으로 돌아가서 벡터의 개념을 복습해보죠. 벡터는 크기와 방향을 가집 니다. 이와 달리, 스칼라는 방향 없이 오직 크기만을 가지죠. 역학에서 힘, 속도, 가속도, 운동 량과 같은 양quantity은 벡터이므로 이들의 크기와 방향을 모두 고려해야 합니다. 이와 반대로 거 리, 밀도, 점성 같은 양은 스칼라입니다. 이 책에서 벡터와 스칼라를 표기하는 방법은 다음과 같습니다. 벡터의 양은 볼드체(굵은 글꼴) 로 표현할 겁니다. 따라서 힘force은 F가 되겠죠. 이와 반대로 벡터의 크기만 명시할 때는 일반 적인 글꼴을 사용합니다. 예를 들어 힘 벡터, F의 크기는 F로 쓰는데 이걸 좌표축 성분과 같이 쓰면 Fx, Fy, Fz가 됩니다. 이 책의 예제 코드에서 쓰는 연산기호 * 와 ^에 대해서도 잠시 설명
42
1부 - 물리학의 기초
을 드려야겠네요. * 는 문맥에 따라 벡터의 내적dot product 또는 스칼라의 곱을 나타내며, ^은 벡 터의 외적cross product입니다.* 이 책에선 벡터를 참 많이 사용합니다. 따라서 벡터의 덧셈, 내적, 외적 등과 같은 기본 벡터연 산을 꼭 한번 복습해보길 바랍니다. 그렇다고 굳이 고등학교 수학책을 다시 꺼낼 필요는 없습 니다. 부록 A에 기본 벡터연산을 잘 요약 정리해놓았습니다. 부록 A에는 Vector 클래스 코드 도 있으니 벡터연산 코드를 살펴보고 싶은 분들도 이 부분도 함께 보세요. 그리고 어떤 경우에 백터연산(예: 내적, 외적)을 사용하는지에 대해서도 부록 A에 잘 설명해놓았습니다. 잠시 그 예를 들자면 동역학에서는 평면에 직각인 벡터(법선normal )를 찾을 때 외적을 사용합니다. 내적 을 사용하는 예로는 3D 공간에서 점과 평면 사이의 최단거리를 찾는 경우가 있겠네요. 이 두 연산들은 모두 부록 A에 잘 소개되어 있으니 이 책에 수록된 예제 코드를 살펴보기 전에 꼭 부 록 A에 실려 있는 내용들을 복습해보세요.
1.5 미분과 적분 미적분을 잘 모르신다고요? 뭐, 걱정하지 마세요. 미적분을 쓸 일이 있을 때마다 계산 과정을 상세히 보여드리겠습니다. 공업수학 시간이 아니니 미적분의 속성이나 용례를 속속들이 알려 하지 말고 초심으로 돌아가 물리학적인 내용만 신경 쓰도록 합시다. 미분을 가장 간단하게 이해하는 법을 알려드리겠습니다. 미분이란 두 변수 간의 변화율 차이입 니다. 즉, 미분은 한 변수가 다른 변수에 비해 얼마나 빨리(또는 느리게) 변화하는지를 나타냅 니다. 속력speed을 예로 들어보죠. 자동차가 일정한 속력으로 얼마 동안 달리면 그동안 이동한 거리가 있겠죠? 여기서 자동차의 속력이란 주어진 시간 안에 얼마만큼의 거리를 주행하는지를 나타내는 평균값입니다. 만약 자동차가 한 시간 동안 총 60 km를 달렸다면, 평균속력은 시속
60 km가 되겠죠. 나중에 이 책에서 시뮬레이션을 할 때, 매우 짧은 시간 동안에 자동차가 이 동한 거리를 살펴볼 일이 있을 것입니다. 이 시간의 간격이 정말정말 작아지면 이걸 속력의 순 간변화율 또는 순간속력이라 부르고, 다음과 같은 수식으로 표현합니다.
|v| = ds / dt * 역주_ *는 애스터리스크( asterisk), ^는 캐럿( caret)이라 읽습니다.
1장 - 기본 개념
43
여기서 v는 속력, ds는 한없이 짧은 거리(미분거리), 그리고 dt는 한없이 짧은 시간입니다. 사 실 시뮬레이션을 할 때 이처럼 무한히 작은 숫자를 사용하진 않습니다. 그 대신 완전히 무한히 작진 않지만 매우 짧은 시간(예: 밀리세컨드millisecond )을 사용하지요. 다음은 적분입니다. 적분은 미분의 반대 또는 역입니다. 적분을 기호로 쓸 때는 ∫ * 을 사용하 죠. 적분이란 어떤 변수의 변화량을 무한히 작은 단위로 나눈 것(미분값)들을 전부 합산하는 과정입니다. 미분에서 무한히 작은 조각을 사용하진 않는다고 말씀드렸죠? 여기서도 마찬가지 입니다. 그 대신 매우 작은 이산값 discrete value†들을 사용합니다. 이러면 적분기호를 합산기호 Σ 로 바꿔도 됩니다. 예를 하나 들어보죠. 균등한 두께로 짤린 식빵 덩어리가 있다고 합시다. 그 렇다면 식빵 전체의 부피를 다음과 같은 방법으로 구할 수 있죠. 우선 빵의 왼쪽 끝에서 첫 번 째 조각까지의 부피를 구합니다. 빵을 매우 잘게 썰었다면 이 조각을 감싸는 직육면체 부피를 계산하는 것만으로 매우 근사한 부피를 구할 수 있겠죠. 이제 마찬가지 방법으로 두 번째, 세 번째… 그리고 마지막 조각까지의 부피를 계산하여 전부 더해버리면 그게 식빵 전체의 총 부피 입니다. 간단하죠?
1.6 질량, 질량중심, 관성모멘트 물체의 특성들(질량, 질량중심, 관성모멘트. 통칭하여 질량특성이라고 합니다)은 역학 학문에 서 매우 중요한 개념입니다. 물체의 선운동 및 각운동,‡ 그리고 주어진 힘에 대한 물체의 반응 은 모두 질량특성에 대한 함수이기 때문입니다. 따라서 물체의 움직임을 정확히 시뮬레이션하 려면 질량특성과 그 계산법에 대해 잘 숙지하고 있어야 합니다. 그럼, 일단 몇 가지 정의부터 살펴보도록 하죠. 일반적으로 질량이라 하면 물체에 포함되어 있는 물질의 양이라고 생각합니다. 하지만 역학에 서 질량을 바라보는 관점은 여기에 그치지 않습니다. 질량이란 정지해 있는 물체를 움직이게 만드는, 또는 이미 운동 중인 물체의 움직임을 변화시키는 힘에 저항하는 척도이기도 합니다.
* 역주_ 인테그랄( integral)이라고 읽습니다. † 역주_ 연속적으로 변하지 않고 띄엄띄엄 변하는 값들을 의미합니다. 차트에서 곡선 대신 막대그래프를 촘촘히 그려 넣는 것처럼요. ‡ 선운동은 말 그대로 물체의 움직임을 의미하는데 이때 물체의 회전은 고려하지 않습니다. 그와 반대로 각운동은 특히 물체의 회전만을 따 로 지칭하는 것으로 그 회전의 중심이 되는 축은 어떤 것이든 될 수 있습니다. 또한 물체는 각운동을 하며 동시에 선운동을 할 수도 있습니다.
44
1부 - 물리학의 기초
즉, 물체의 질량이 클수록 정지된 물체를 움직이거나 이미 이동 중인 물체의 움직임을 바꾸기 가 쉽지 않다는 거죠. 질량중심에 대한 일반인과 역학의 관점도 역시 좀 다릅니다. 보통 사람 들이 이해하는 질량중심(무게중심이라고도 합니다)은 물체의 한 점인데, 그 점 주위로 질량이 균일하게 분포되어 있다는 게 특징입니다. 하지만 역학에서의 질량중심은 그 점에 힘을 가해도 물체의 회전이 일어나지 않는 게 특징이죠. 질량이나 무게중심 등은 일반인에게도 친숙한 용어이지만, 관성모멘트란 용어는 좀 낯설게 느 껴질 겁니다. 그러나 역학에서는 이 모든 개념들이 똑같이 중요하답니다. 물체의 질량관성모멘 트mass moment of inertia (회전관성이라고도 합니다)는 어떤 축 주위를 회전하는 물체가 있을 때 물 체의 질량이 원형으로 분포되는 정도를 측정한 양입니다. 물체의 선운동에서 질량이 저항의 역 할을 하듯이 질량관성모멘트도 회전운동에 대한 저항이 됩니다. 그럼 여태까지 배워본 질량특성을 계산하는 방법을 알아볼까요? 수많은 입자로 구성되어 있는 물체가 있다고 생각해보죠. 이 물체의 총 질량은 그 물체를 구성 하는 각 입자의 질량을 모두 합한 것과 같습니다. 이때 각 입자의 질량은 밀도(d ) × 부피(V ) 입니다. 따라서 밀도가 균일하게 분포되어 있는 물체의 총 질량은 (물체의 밀도) × (물체의 총 부피)와 같습니다. 이것을 수식으로 써보죠.
m = ∫ ρ dV = ρ ∫ dV 사실 물체의 질량을 구하기 위해 부피를 적분해야 할 일은 거의 없죠. 특히 자동차나 비행기처 럼 다양한 밀도의 부품들로 구성된 물체라면 더더욱 그렇고요. 따라서 구조가 복잡한 물체의 질량을 구할 때는 물체를 부품 단위로 분해해서 질량을 따로따로 계산한 뒤, 그 부분질량을 모 두 다 더하는 방법이 훨씬 낫습니다. 이젠 무게중심을 계산할 차례인데요. 이것은 질량을 구하는 것보다 좀 더 어렵습니다. 무게중 심을 계산하려면 우선 물체를 유한 개의 작은 부분으로 나눕니다. 이렇게 작게 나눈 부분을 원 소질량 elemental mass 또는 점질량 point mass이라 부릅니다. 이때 각 원소질량의 질량중심 mi는 공간 좌표로 표현합니다. 즉, 3D 공간에서는 x, y, z를 사용하겠죠. 다음은 각 원소질량마다 1차모 멘트를 구해 그 결과를 모두 더할 차례입니다. 1차모멘트를 계산하는 방법은 각 좌표축마다 원 점으로부터 질량중심까지의 거리를 구한 뒤, 그 결괏값을 질량에 곱하면 됩니다. 이제 모멘트 의 총합을 총 질량으로 나누면 물체의 질량중심까지의 좌표를 구할 수 있습니다. 이 계산은 각
1장 - 기본 개념
45
좌표축마다 한 번씩 해야 합니다. 따라서 2D일 때에는 두 번, 3D일 때에는 세 번 계산하게 되 겠죠? 그렇다면 3D에서 물체의 질량중심을 구하는 방정식을 한번 살펴봅시다.
x c = {∫x o dm} / m y c = {∫y o dm} / m z c = {∫z o dm} / m 여기서 (x, y, z )c는 물체의 질량중심의 좌표이며, (x, y, z )o는 각 원소질량의 질량중심의 좌 표입니다. 그리고 xo dm, yo dm, zo dm 물리량은 각 좌표축 주위의 원소질량 dm의 1차모멘 트입니다. 다시 한 번 말씀드리지만, 방정식에 사용한 적분기호를 두려워하지 마세요. 실전에서는 적분 대신에 유한 개의 질량을 더할 거니까요. 따라서, 실전에서 사용하는 공식은 다음과 같이 간단 해집니다.
x c = {Σ x o m i } / {Σ m i } y c = {Σ yo m i } / {Σ m i } z c = {Σ zo m i } / {Σ m i } 여기에 한 가지 재밌는 사실이 있습니다. 이 공식에서 질량을 무게로 바꿀 수 있다는 건데요, 분모와 분자 모두에 중력가속도 상수 g가 포함되어 있기 가능한 일입니다. 이것을 약분하면 남 는 건 무게뿐이지요. 물체의 무게는 (질량) × (중력가속도)인 건 아시지요? 참고로 중력가속 도는 해수면 높이에서 9.8 m/s2이랍니다. 이 정도면 대충 다 된 거 같은데 x, y, z마다 공식을 따로 써주자니 좀 번잡스럽군요. 앞의 공식 을 벡터표기법을 사용해서 다시 쓰면 좀 더 간단하게 정리할 수 있습니다.
mt = Σ mi CG = [Σ (cg i ) (m i )] / m t 여기서 mt는 총 질량이고, mi는 점질량, CG는 점질량의 무게중심center of gravity을 모두 합쳐서 얻은 최종 무게중심입니다. 그리고 cg i 는 각 점질량의 무게중심의 위치죠. 이렇게 CG와 cg i 를 벡터로 표기할 수 있는 이유는 이들이 직교좌표계 상의 위치를 나타내기 때문입니다. 귀찮 게 x, y, z 좌표를 다 쓰는 것보다 낫죠? 이제 샘플 코드를 하나 보여드리도록 하겠습니다. 우선 꽤 많은 수의 점질량을 다뤄야 하니 이
46
1부 - 물리학의 기초
들을 배열에 저장하죠. 이때 점질량을 구조체로 정의해두면 간단히 이 구조체의 배열을 만들 수 있겠죠? 이 구조체에 기본적으로 저장할 정보는 각 점질량의 좌표와 질량입니다. 또한 현재 점질량에서 물체의 최종 무게중심까지의 좌표를 저장하기 위한 변수도 하나 넣어두겠습니다. 그런데 이 값을 구하려면 먼저 최종 무게중심을 계산해야겠죠? 불행히도 최종 무게중심은 모 든 점질량의 무게중심을 합한 후에야 알 수 있으니 이 값은 나중에나 계산할 수 있겠네요. typedef struct _PointMass { float mass; Vector designPosition; Vector correctedPosition; } PointMass; // _NUMELEMENTS는 미리 정의해둔 상수입니다 PointMassElements[_NUMELEMENTS];
이제 총 질량과 최종 무게중심을 구하는 코드를 살펴봅시다. int i; float TotalMass; Vector CombinedCG; Vector FirstMoment; TotalMass = 0; for(i=0; i<_NUMELEMENTS; i++) TotalMass+= Elements[i].mass; FirstMoment = Vector(0, 0, 0); for(i=0; i<_NUMELEMENTS; i++) { FirstMoment += Element[i].mass * Element[i].designPosition; } CombinedCG = FirstMoment / TotalMass;
이제 최종 무게중심의 위치를 찾았으니 각 점질량의 상대위치relative position를 다음과 같이 계산 할 수 있습니다.
1장 - 기본 개념
47
for(i=0; i<_NUMELEMENTS; i++) { Element[i].correctedPosition = Element[i].designPosition - CombinedCG; }
질량관성모멘트를 계산하려면 물체를 구성하는 각 성분질량의 2차모멘트를 좌표축별로 구해 야 합니다. 2차모멘트를 구하는 공식은 거리의 제곱 × 질량입니다. 참고로 여기서 말하는 거 리는 질량중심 계산에서 사용했던 것과 좀 다릅니다. 질량중심을 계산할 때는 좌표축을 따라 원소질량중심까지의 거리를 사용했었죠? 관성모멘트를 계산할 때는 관성모멘트를 구하고자 하는 좌표축으로부터 원소질량중심까지의 수직거리를 사용합니다. 자, 그럼 [그림 1-2 ]에 나와 있는 3D 물체의 관성모멘트를 계산해봅시다. 우선 x축 주위의 관 성모멘트 Ixx를 계산해보죠. 거리 r이 yz 평면 상에 존재하므로 rx2 = y2 + z2가 됩니다. 마찬가 지로 y축 주위의 관성모멘트 Iyy는 rx2 = z2 + x2, z축 주위의 관성모멘트 Izz는 rz2 = x2 + y2이 되겠죠. 그림 1-2 3D 상의 임의의 물체 물체
yz 평면
xy 평면
xz 평면
3D 좌표축 주위의 질량관성모멘트를 구하는 식은 다음과 같습니다. Ixx = ∫ rx2 dm = ∫ (y2 + z2) dm Iyy = ∫ ry2 dm = ∫ (z2 + x2) dm Izz = ∫ rz2 dm = ∫ (x2 + y2) dm 실무에서 종종 접하게 되는 관성모멘트를 하나 예로 들어보겠습니다. 어떤 물체가 하나 있고, 그 물체의 질량중심을 관통하는 축(중립축이라고 합니다)이 있습니다. 하지만 여기서 구하려
48
1부 - 물리학의 기초
고 하는 건 이 축 주변의 관성모멘트 Io가 아닙니다. 이 값은 이미 주어졌다고 가정하죠. 이때 중립축과 평행하지만 약간 거리가 떨어져 있는 다른 축 주변의 관성모멘트 I를 구하고 싶다면 어떡할까요? 이럴 때는 평행축 정리parallel axis theorem를 이용합니다. 평행축 정리의 공식은 다음 과 같습니다.
I = Io + m d2 여기서 m은 물체의 질량, d는 두 축 간의 수직거리*입니다. 여기서 한 가지 주목할 점이 있습니다. 이 새로운 관성모멘트는 두 축 간의 거리의 제곱에 대한 함수입니다. 즉 Io의 값이 d의 값보다 상대적으로 작고 d의 값이 Io의 값보다 상대적으로 크다 면 Io를 무시해도 큰 문제가 없다는 뜻입니다. 이런 경우 m d2가 위 공식의 결과에 결정적인 영 향을 미치기 때문이죠. 물론 이럴 경우 약간의 오차는 생기게 되니 각자 잘 판단하시길 바랍니 다. 위 평행축 정리 공식에서 알 수 있는 또 다른 사실 하나는 최소 관성모멘트를 구하려면 물 체의 무게중심을 통과하는 축 주위의 관성모멘트를 취하면 된다는 것입니다. 그 외의 축에서 관성모멘트를 계산하면 그 결괏값이 m d2에 비례하여 증가하기 때문이지요. 이렇듯 단일밀도를 가지고 모양이 매우 단순한 물체의 질량관성모멘트를 구하는 것은 쉬운 편 입니다. 하지만 그렇지 않은 물체의 질량관성모멘트를 구하는 건 다른 이야기죠. 이런 경우에 는 흔히 그 물체와 유사하게 생긴 다른 단순한 기초도형들을 이용해 근사치를 구하곤 합니다. 아니면 물체들을 여러 부분으로 나누어서 각 부분들의 관성모멘트를 구하기도 하는데, 이때 중 립축에서 멀리 떨어진 부분들에 대해서는 Io를 생략하는 방법으로 공식을 단순화할 수도 있답 니다. 이렇게 Io를 생략할 수 있는 이유는 m d2가 공식에서 차지하는 비중이 월등이 커지기 때 문이라고 좀 전에 말씀드렸죠? [그림 1-3 ]에서 [그림 1-7 ]에 걸쳐 단순한 기초도형들을 몇 개 보여드리겠습니다. 이 물체들 은 전부 단일밀도이므로 쉽게 질량관성모멘트를 계산할 수 있습니다. 각 물체의 질량관성모멘 트를 구하는 공식도 그림 아래에 달아놨으니 한 번씩 살펴보세요. 이 공식들은 대학교 역학 교 과서에서도 쉽게 찾아볼 수 있습니다(역학책 목록은 이 책의 부록 뒤에 나오는 ‘참고문헌’에서 찾아볼 수 있습니다).
* 역주_ 따라서 최단거리입니다.
1장 - 기본 개념
49
그림 1-3 원기둥: Ixx = Iyy = (1/4) m r2 + (1/12) m l2; Izz = (1/2) m r2
그림 1-4 속이 빈 원기둥: Ixx = Iyy = (1/2) m r2 + (1/12) m l2; Izz = m r2
그림 1-5 사각기둥: Ixx = (1/12) m (a2 + l2); Iyy = (1/12) m (b2 + l2); Izz = (1/12) m (a2 + b2)
그림 1-6 구: Ixx = Iyy = Izz = (2/5) m r2
50
1부 - 물리학의 기초
그림 1-7 속이 빈 구: Ixx = Iyy = Izz = (2/3) m r2
위 도형들의 공식은 비교적 쉽게 구현할 수 있습니다. 따라서 복잡한 물체의 관성을 구할 때는 이것을 여러 개의 작고 단순한 도형으로 조각낸 뒤, 각각의 관성 값을 구해 합산하면 되죠. 물 론 이것은 근삿값일 뿐이므로 오차허용 범위에 따라 이 방법의 사용 여부를 결정해야 합니다. 그럼, 간단한 2D 예를 들어 이 절에서 살펴본 공식을 사용해봅시다. 탑다운 뷰 시점의 자동차 경주 게임을 만든다고 해보죠. 그러면 2D 리지드바디 동역학을 이용해 자동차의 움직임을 시 뮬레이션 할 수 있겠네요. 게임이 시작할 때, 자동차에는 기름이 가득 차 있습니다. 그럼 시뮬 레이션을 시작하기 전에 자동차, 운전자, 연료의 질량을 계산해야겠군요. 이 예에서 물체는 자 동차, 운전자, 연료통으로 구성되어 있습니다. 그리고 나중에 게임을 진행함에 따라 연료가 소 모되거나 사고로 인해 운전자가 튕겨 나가면 그만큼 전체 질량이 줄어들겠죠. 지금은 일단 [그 림 1-8 ]에 나와 있는 초기 상태만 신경 씁시다. 그림 1-8 자동차와 운전자, 연료통으로 구성되어 있는 물체 운전자
자동차
연료탱크
[그림 1-8 ]에 있는 물체의 각 구성부분component의 물리특성들은 [표 1-2 ]에 정리했습니다. 여 기서 길이는 x축, 너비는 y축입니다. 그리고 탑다운 뷰이므로 높이는 화면 바깥쪽을 가리킵니 다. 또한 각 구성부분의 중점을 나타내는 좌표 (x, y )는 월드공간에 있습니다.
1장 - 기본 개념
51
표 1-2 예제에 사용된 물리특성 자동차
운전자(앉아 있음)
연료
길이 = 4.70 m
길이 = 0.90 m
길이 = 0.50 m
너비 = 1.80 m
너비 = 0.50 m
너비 = 0.90 m
높이 = 1.25 m
높이 = 1.10 m
높이 = 0.30 m
무게 = 17,500 N
무게 = 850 N
연료의 밀도 = 750 kg/m3
중심 = (30.5, 30.5) m
중심 = (31.50, 31.00) m
중심 = (28.00, 30.50) m
첫 번째로 구할 것은 물체의 질량입니다. 이미 차와 운전자의 무게를 알고 있으니 별로 어렵지 않겠네요. 유일하게 무게를 계산해야 하는 것은 연료인데, 연료의 질량밀도와 연료탱크의 모양 을 알고 있으니 뭐 식은 죽 먹기죠. 연료탱크의 부피(v )를 계산한 다음, 밀도(ρ)와 중력가속도 (g )를 곱해주면 됩니다. 아래처럼 계산을 해보면 993 N이 나올 겁니다.
W연료 = ρ v g = (750 kg/m3) (0.50 m) (0.90 m) (0.30 m) (9.81 m/s2) = 993 N TIP
중력가속도는 물체가 지면으로 떨어질 때 받는 가속도입니다. 물체의 무게는 물체의 질량 × 중력가속도입니 다. 중력가속도는 g로 나타내며, 지구에서 g의 값은 해수면 높이에서 약 9.81 m/s2입니다. 미터법에서 물체 의 무게에 쓰는 단위는 뉴턴(N)입니다.
이제 물체의 총 무게는 다음과 같이 구할 수 있습니다.
W총 = W자동차 + W운전자 + W연료 W총 = 17,500 N + 850 N + 993 N = 19,343 N 물체의 질량을 구하려면 물체의 총 무게를 중력가속도로 나누면 됩니다.
M총 = W총 / g = 19,343 N / (9.81 m/s2) = 1972 kg 이제 물체의 무게중심을 구해보죠. 이 예제에서는 무게중심을 월드공간 좌표로 계산할 것입니 다. 따라서 x좌표와 y좌표에 한 번씩 1차모멘트 공식을 적용합니다.
Xcg 물체 = {(xcg 자동차) (W자동차) + (xcg 운전자) (W운전자) + (xcg 연료) (Wf연료)} / W총 Xcg 물체 = {(30.50 m) (17,500 N) + (31.50 m) (850 N) + (28.00 m) (993 N)} / 19,343 N Xcg 물체 = 30.42 m Ycg 물체 = {(ycg 자동차) (W자동차) + (ycg 운전자) (W운전자) + (ycg 연료) (W연료)} / W총
52
1부 - 물리학의 기초
Ycg 물체 = {(30.50 m) (17,500 N) + (31.00 m) (850 N) + (30.50 m) (993 N)} / 19,343 N Ycg 물체 = 30.52 m 이 식에서 질량 대신 무게를 사용한 거 보이죠? 이게 가능한 이유는 무게에 포함되어 있는 중 력가속도가 일정하고, 분모와 분자에 모두 나오기 때문입니다. 이걸 약분하면 무게만 남죠. 이제, 물체의 질량관성모멘트를 구할 차례입니다. 이건 별로 어렵지 않겠네요. 본 2D 예제에서 는 회전축이 물체의 높이방향, 하나밖에 없으니 계산도 한 번만 하면 됩니다. 우선 각 구성부분 의 로컬 관성모멘트를 계산합니다. 이때 관성모멘트의 회전축은 각 구성부분의 중립축 neutral axis 입니다. 근데 각 구성부분의 형태 및 질량분포에 대한 정보가 별로 없네요? 계산을 좀 쉽게 만 들기 위해 각 구성부분이 직육면체라고 가정하겠습니다. 이러면 [그림 1-5 ]에 나와 있는 관성 모멘트 수식을 사용해서 근사치를 구할 수 있겠죠? 이후의 계산식에서 너비를 표현할 때 소문 자 w를 사용할 건데 앞에서 대문자 W로 표기했던 무게와 헷갈리지 않도록 주의하세요.
Io 자동차 = (m/12) (w2 + L2) Io 자동차 = ((17,500 N / 9.81 m/s2) / 12) ((1.80 m)2 + (4.70 m)2) = 3765.5 N · s2 · m Io 운전자 = (m/12) (w2 + L2) Io 운전자 = ((850 N / 9.81 m/s2) / 12) ((0.50 m)2 + (0.90 m)2) = 7.7 N · s2 · m Io 연료 = (m/12) (w2 + L2) Io 연료 = ((993 N / 9.81 m/s2) / 12) ((0.90 m)2 + (0.50 m)2) = 8.9 N · s2 · m 이들은 각 구성부분의 중립축 주위의 관성모멘트이므로 이제 평행축 정리를 이용해 물체의 중 립축(물체의 무게중심에 위치함)으로 전송transfer해야 합니다. 그러려면 물체의 무게중심으로 부터 각 구성부분의 무게중심까지의 거리를 구해야 하죠. 다음과 같이 그 거리의 제곱을 구할 수 있습니다.
d자동차2 = (xcg 자동차 – Xcg)2 + (ycg 자동차 – Ycg)2 d자동차2 = (30.50 m – 30.42 m)2 + (30.50 m – 30.53 m)2 = 0.01 m2 d자동차2 = (xcg 운전자 – Xcg)2 + (ycg 운전자 – Ycg)2 d자동차2 = (31.50 m – 30.42 m)2 + (31.25 m – 30.53 m)2 = 1.68 m2 d연료2 = (xcg 연료 – Xcg)2 + (ycg 연료 – Ycg)2 d연료2 = (28.00 m – 30.42 m)2 + (30.50 m – 30.53 m)2 = 5.86 m2
1장 - 기본 개념
53
이제 평행축 정리를 적용합니다.
Icg 자동차 = Io + m d2 Icg 자동차 = 3765.5 N · s2 · m + (17,500 N / 9.81 m/s2) (0.01 m2) = 3783.34 N · s2 · m Icg 운전자 = Io + m d2 Icg 운전자 = 7.7 N · s2 · m + (850 N / 9.81 m/s2) (1.68 m2) = 153.27 N · s2 · m Icg 연료 = Io + m d2 Icg 연료 = 8.9 N · s2 · m + (993 N / 9.81 m/s2) (5.86 m2) = 602.07 N · s2 · m 운전자와 연료의 Icg를 계산할 때, 결정적인 영향을 미치는 것이 m d2 항인 거 보이나요? 이 예 제에서 운전자의 로컬 관성은 m d2의 2.7%, 연료통의 로컬 관성은 2.1%밖에 안 됩니다. 드디어 물체의 총 관성모멘트를 구할 차례입니다. 아래처럼 모든 구성부분의 Icg를 합해주세요.
Icg 총 = Icg 자동차 + Icg 운전자 + Icg 연료 Icg 총 = 3783.34 N · s2 · m + 153.27 N · s2 · m + 602.07 N · s2 · m = 4538.68 N · s2 · m 물체의 질량특성(자동차, 운전자, 연료의 합)은 [표 1-3 ]과 같습니다. 표 1-3 예제의 질량특성들 특성
계산 결과
총 질량(무게)
1972 kg (19,343 N)
질량의 중심위치
(x, y) = (30.42 m, 30.53 m)
질량관성모멘트
4538.68 N·s2·m
이 예제에서 사용한 개념들을 잘 기억해두세요. 나중에 더 복잡한 시뮬레이션을 할 때, 기초가 될 개념이니까요. 특히 3차원 공간에서 일반적인 운동을 다룰 때는 식이 훨씬 더 복잡해질 겁 니다. 게다가 물체의 운동은 이 질량특성들의 함수입니다. 질량은 물체가 힘에 어떻게 반응하 는지를 결정하고, 질량중심은 물체의 위치를 구할 때 사용하며, 질량관성모멘트는 질량중심이 아닌 곳에 힘이 가해질 때 물체의 회전을 계산합니다. 지금까지 살펴본 관성모멘트는 3D 공간의 세 좌표축 주위를 회전했습니다. 하지만 일반적인
3D 리지드바디 동역학에서 다루는 물체는 물체가 임의의 축 주위를 회전할 수도 있습니다. 즉, 로컬좌표축들이 물체의 질량중심을 지나가더라도 물체가 전혀 다른 좌표축 주위를 회전할 수도
54
1부 - 물리학의 기초
있죠. 이런 문제를 해결하려면 관성모멘트 공식에 몇 가지 항을 더해야 합니다. 이에 대해서는 이 장의 뒷 부분에서 살펴보고, 일단 뉴턴의 제2운동법칙에 대해 자세히 알아보겠습니다.
1.7 뉴턴의 제2운동법칙 이 장의 첫 절에서 언급했듯이 뉴턴의 제2운동법칙은 역학 분야에서 특별한 의미를 가집니다. 뉴턴의 제2운동법칙 방정식을 다시 한 번 보죠.
F=ma 힘 = 질량 × 가속도 여기서 F는 물체에 작용하는 힘의 합이고, m은 물체의 질량, a는 질량중심에서의 선가속도입 니다. 이제 양변을 m으로 나눠봅시다.
F/m=a 힘 / 질량 = 가속도 이 식을 보니, 질량이 물체의 운동을 방해하는 요인이 된다는 사실을 알 수 있습니다. 물체가 받는 힘이 일정하다면, 분모에 있는 질량이 늘어남에 따라 물체의 가속도가 줄어드니까요. 즉, 질량이 큰 물체일수록 움직이기 어렵단 이야기지요. 마찬가지로 힘이 일정할 때 질량이 감소한 다면 물체의 가속도가 늘어납니다. 그러니 질량이 작은 물체일수록 움직이기가 쉬운 겁니다. 뉴턴의 제2운동법칙은 물체가 받는 힘의 방향과 가속의 방향이 같다고 합니다. 방향의 개념이 있으니 힘과 가속도는 둘 다 벡터여야 합니다. 보통 물체가 받는 힘은 여러 가지입니다. 이때 모든 힘의 벡터합을 구하면 그게 최종 합력입니다. 이를 수식으로 쓰면 다음과 같습니다.
ΣF=ma 여기서 a는 가속도 벡터를 나타냅니다.
3D에서 힘과 가속도 벡터는 직교좌표계 내에서 x, y, z 값을 가집니다. 이때 각 성분의 운동방 정식은 다음과 같습니다.
1장 - 기본 개념
55
Σ Fx = m ax Σ Fy = m ay Σ Fz = m az 뉴턴의 제2운동법칙은 ‘물체가 받는 모든 힘의 합은 시간의 경과에 따라 물체의 운동량이 변화 하는 정도와 같다’고 해석할 수도 있습니다. 즉, 물체에 작용하는 힘은 운동량을 시간으로 미분 한 결과입니다. 운동량은 질량 × 속도이고, 속도와 운동량 모두 벡터이므로 다음과 같은 식을 만들 수 있습니다.
G=mv 선형운동량 = 질량 × 무게중심 속도 여기서 G는 물체의 선형운동량linear momentum, m은 물체의 질량, 그리고 v는 물체의 무게중심 속도입니다. 운동량의 시간변화율은 운동량을 시간으로 미분한 것입니다.
dG / dt = d / dt (m v) 일단 물체의 질량이 일정하다고 가정하면, 다음과 같이 식을 쓸 수 있습니다.
dG / dt = m dv / dt 속도의 시간변화율인 dv/dt는 가속도이니 식을 다음과 같이 쓸 수도 있습니다.
dG / dt = m a Σ F = dG / dt = m a 여태까지 우리가 다룬 물체의 운동은 평행이동뿐이었습니다. 그러나 3D 운동에는 회전운동도 포함되지요. 그럼 물체의 움직임을 제대로 표현하기 위해 방정식을 몇 개 추가하겠습니다. 구 체적으로 말씀드리면 모든 모멘트(회전력)의 합과 회전운동량의 변화율(각운동량을 시간으로 미분한 것) 사이의 관계를 구하는 공식이 필요합니다. 다음을 보세요.
Σ Mcg = d / dt (Hcg) 여기서 Σ Mcg는 물체의 무게중심 주위를 회전하는 모든 모멘트의 합이고, H는 물체의 각운동 량 angular momentum입니다. Mcg는 다음과 같이 쓸 수 있습니다.
Mcg = r × F
56
1부 - 물리학의 기초
여기서 F는 물체에 작용하는 힘입니다. r은 F로부터 물체의 무게중심까지의 거리벡터로 F 벡 터와 직교합니다. 그리고 ×는 벡터의 외적 연산자입니다. 물체의 각운동량은 물체 안에 있는 모든 파티클의 운동량 모멘트를 합친 것과 같습니다. 이때 파티클의 회전축은 물체의 무게중심을 통과한다고 가정합니다. 이것을 식으로 표현하면 다음 과 같습니다.
Hcg = Σ r i × mi (ω × r i) 이 식에서 i는 물체를 구성하는 파티클 중 i번째 것을 나타내고, ω는 물체의 각속도입니다. 그 리고 (r i × mi (ω × r i ) )는 i번째 파티클의 각운동량으로, 그 크기magnitude는 m i ω r i2입니다. 이 식을 어떤 축 주위의 회전에 대해 다시 쓰면 다음과 같습니다.
Hcg = ∫ ω r2 dm 여기서는 리지드바디를 구성하는 모든 파티클의 각속도가 같으므로 ω를 밖으로 뽑아도 됩니다.
Hcg = ω ∫ r2 dm 그리고 관성모멘트 I 가 ∫ r2 dm와 같았으므로 I를 대신 사용하겠습니다.
Hcg = I ω 이제 이 수식을 시간에 대하여 미분해보죠.
dHcg / dt = d / dt (Iω) = I dω / dt = I α 여기서 α는 축 주변을 회전하는 물체의 각가속도입니다. 결국, 공식이 이렇게 간단해지는군요.
Σ Mcg = I α 앞서 질량관성모멘트를 설명하면서 말씀드렸듯이 어떤 물체축 주위의 회전이라도 처리할 수 있도록 관성모멘트와 각모멘트angular moment 공식들을 좀 더 일반화해야 합니다. 보통 M과 α는 벡터 값일 겁니다. 한편, 물체의 관성모멘트의 크기는 회전축에 따라 달라질 수 있으므로 I는 텐서*가 됩니다(다음 ‘텐서’ 글상자 참조).
* 이 경우 I는 2차 텐서입니다. 2차 텐서는 3×3 행렬입니다. 참고로 벡터는 1차 텐서, 스칼라는 0차 텐서입니다.
1장 - 기본 개념
57
텐서 텐서tensor는 크기와 방향을 가지는 수학표기법입니다. 그런데 텐서의 크기는 방향에 따라 값이 달라질 수도 있어서 이런 물질의 특성을 나타내기 위해 흔히 사용합니다. 이렇게 방향에 따라 다 른 특성을 갖는 물질을 이방성anisotropic이라 합니다(그와 반대로 등방성isotorpic은 모든 방향에서 같은 크기를 가집니다). 이해를 돕기 위해 흔히 볼 수 있는 두 물질의 탄성(혹은 강도)을 예로 들어보겠습니다. 우선 종이를 양쪽으로 잡아당겨보죠. 가로로 한 번, 세로로 한 번, 그리고 대각 선으로도 한 번씩 잡아당겨보세요. 어떻게 잡아당기든 간에 종이의 탄성이 변하지 않죠? 이런 것 이 등방성이고, 단 하나의 스칼라 값으로 모든 방향에 대한 강도를 나타낼 수 있습니다. 이제 격자무늬로 짜여진 느슨한 천cloth 조각을 찾아보죠. 넥타이 정도면 괜찮겠네요. 종이에 했던 것처럼 위/아래/대각선 방향으로 당겨보세요. 아무래도 격자방향이 아니라 대각선으로 잡아당 기는 쪽이 더 많이 늘어나죠? 이 천은 잡아당기는 방향에 따라 탄성(또는 강도)이 달라지니 이 방성입니다. 즉, 모든 방향으로의 힘을 표현하려면 벡터양(텐서)들이 여럿 필요하죠. 지금 우리가 다루고 있는 주제는 관성모멘트입니다. 임의의 회전축에서 3D 관성모멘트를 나타 내려면 9개의 성분이 필요합니다. 종이와 천 예제에서와는 달리, 관성모멘트가 나타내는 특성은 강도가 아닙니다. 오히려 회전축에 따라 변화하는 물체의 특성이죠. 관성모멘트를 표현하려면 9 개의 값이 필요하다고 했죠? 따라서 관성모멘트는 3×3 행렬(2차 텐서)로 일반화시킬 수 있습 니다. 이에 대해서는 나중에 알아보겠습니다.
나중에 물리 시뮬레이션 코드를 짤 때 도움이 될 만한 이야길 잠깐 하겠습니다. 좌표에 대한 건 데요. 지금까지 다루었던 두 가지 운동방정식은 로컬공간 좌표가 아니라 월드공간 좌표를 이용 했습니다. 선운동방정식에선 이래도 됩니다. 어차피 월드공간 안에서 물체의 위치와 속도를 구 하니까요. 하지만 각운동방정식에서 이러면 계산량이 너무 많아집니다.* 이유는 월드공간 좌 표를 사용해서 관성모멘트를 계산하면 물체의 위치와 방향에 따라 이 값이 바뀌기 때문입니 다. 결국, 시뮬레이션을 하는 동안 관성행렬(그리고 역행렬)을 계속 계산해야 한다는 건데, 이 건 꽤 비효율적이죠. 차라리 운동방정식을 수정해서 로컬공간 좌표를 사용하는 편이 낫습니다. 그러면 시뮬레이션을 시작할 때 딱 한 번만 관성행렬(그리고 역행렬)을 계산하면 되기 때문이 죠.
* 2차원의 경우에는 관성모멘트가 스칼라 상수이므로 역시 큰 문제가 되지 않습니다.
58
1부 - 물리학의 기초
일반적으로 고정좌표계(회전하지 않는 좌표계)에서 벡터 V의 시간미분은 회전좌표계의 시간 미분과 다음의 관계를 가집니다.
(dV / dt)고정 = (dV / dt)회전 + (ω × V) (ω × V ) 항은 고정좌표계에서의 V에 대한 시간미분과 회전좌표계에서의 V에 대한 시간미분 간의 차이입니다. 이 관계를 이용하면 각운동방정식을 로컬좌표계로 변환할 수 있습니다. 또한 각운동량 벡터 Hcg도 사용하겠습니다. Hcg = I ω이고, 그 시간미분은 물체의 무게중심을 축으 로 삼는 모멘트의 합과 같다는 걸 기억하시죠? 이들이 새로운 각운동방정식을 만드는 데 필요 한 정보입니다. 이제 앞의 미분 식에서 V 대신에 Hcg를 대입하여 식을 전개해보죠.
Σ Mcg = dHcg / dt = I (dω / dt) + (ω × (I ω)) 여기서 모멘트, 관성텐서, 각운동량은 모두 로컬공간에 있습니다. 이전의 식보다 좀 더 복잡해 보인다고요? 그래도 시뮬레이션 중에 I가 전혀 변하지 않으므로 훨씬 사용하기 편한 공식이랍 니다(단, 시뮬레이션 중에 물체의 질량이나 형태가 변하면 얘기가 달라집니다). 그리고 로컬 좌표계에서 모멘트를 계산하는 것이 더 쉽기도 하죠. 제15장에서 간단한 3D 리지드바디 시뮬 레이션을 할 때, 이 공식을 사용할 것입니다.
1.8 관성텐서 각운동방정식을 다시 살펴보면, 관성 I를 볼드체로 표기한 게 보이죠? 이는 벡터 값이라는 의 미입니다. 앞서 본 바와 같이, 2차원 문제에서 관성 항은 결국 단일 축 주위의 관성모멘트를 나 타내는 스칼라 값이 됩니다. 그러나 3차원의 경우에는 물체가 회전할 수 있는 좌표축이 셋입니 다. 게다가 일반적인 3차원 공간에서 물체는 아무 축 주위나 회전할 수 있죠. 따라서 3차원 문 제에서 I는 3×3 행렬(2차 텐서)입니다. 그럼 관성행렬을 만들어볼까요? 각운동량 방정식을 다시 봅시다.
Hcg = ∫ (r × (ω × r)) dm 여기서 ω는 물체의 각속도, r은 물체의 무게중심에서 각 원소질량 dm까지의 거리, 그리고 (r × (ω × r ) ) dm은 각 원소질량의 각운동량입니다. 괄호 안에 들어 있는 항은 삼중 벡터곱
1장 - 기본 개념
59
으로서 외적 연산을 통해 전개할 수 있죠. r과 ω는 다음과 같은 벡터입니다.
r=xi+yj+zk ω = ωx i + ωy j + ωz k 위 식의 세 벡터곱을 확장하면 식이 다음처럼 됩니다.
Hcg = ∫ {[(y2 + z2) ωx – x y ωy – x z ωz] i + [–y x ωx + (z2 + x2) ωy – y z ωz] j + [–z x ωx – z y ωy + (x2 + y2) ω z] k} dm 다음의 몇몇 항을 이용해서 식을 좀 더 단순화하겠습니다.
Ixx = ∫ (y2 + z2) dm Iyy = ∫ (z2 + x2) dm Izz = ∫ (x2 + y2) dm Ixy = Iyx = ∫ (x y) dm Ixz = Izx = ∫ (x z) dm Iyz = Izy = ∫ (y z) dm I로 시작하는 변수들 중에 익숙해 보이는 것도 있을 겁니다. 이것들을 이전 식에 대입해보죠. Hcg = [Ixx ωx – Ixy ωy – Ixz ωz] i + [–Iyx ωx + Iyy ωy – Iyz ωz] j + [–Izx ωx – Izy ωy + Izz ωz] k 이제 한 단계 더 나아가 I를 다음과 같은 행렬이라고 합시다.
Ixx –Ixy –Ixz I = –Iyx Iyy –Iyz –Izx –Izy Izz 그러면 공식을 매우 간단하게 바꿀 수 있죠.
Hcg = I ω I가 관성모멘트라는 것은 이미 알고 있죠? 그리고 이미 우리에겐 꽤 익숙한 Ixx, Iyy, Izz는 세 좌
60
1부 - 물리학의 기초
표축 주위의 관성모멘트입니다. 나머지 항들은 관성곱product of inertia이라고 합니다(그림 1-9 ).
Ixy = Iyx = ∫ (x y) dm Ixz = Izx = ∫ (x z) dm Iyz = Izy = ∫ (y z) dm 그림 1-9 관성곱
평행축 정리와 마찬가지로 관성곱에 적용할 수 있는 축전송 공식이 있습니다. 아래의 공식을 봐주세요.
Ixy = Io(xy) + m dx dy Ixz = Io(xz) + m dx dz Iyz = Io(yz) + m dy dz 여기서 Io 항은 로컬 관성곱(물체의 무게중심을 관통하는 축 주위의 관성곱)이며, m은 물체의 질량, 그리고 d 항은 물체의 무게중심을 통과하는 좌표축과 그에 평행한 다른 축 사이의 거리 입니다(그림 1-10 ). 이전에 [그림 1-3 ]에서 [그림 1-7 ]까지는 각 기초도형의 관성곱 공식을 보여드리지 않았습니 다. 관성모멘트들이 그 도형들의 주축principal axis 주위를 회전했기 때문입니다. 어떤 물체든 주축 을 갖는데, 주축이란 관성텐서 안에 있는 관성곱 항의 값이 모두 0이 되는 축을 말합니다.
1장 - 기본 개념
61
그림 1-10 축의 전송
앞서 보여드렸던 기초도형들의 모양은 각 좌표축에 대해 대칭적입니다. 따라서 각 좌표축은 대 칭평면이 되는 거죠. 관성곱 공식을 보면 알 수 있듯이 대칭평면인 축 주위의 관성곱은 0입니 다. 예를 들어 도형이 [그림 1-11 ]처럼 y축에 대해 대칭이면, 적분식에 있는 모든 (x y )항은 그에 대응하는 -(x y )항에 의해 지워집니다. 그림 1-11 대칭
한편 어느 평면에도 대칭이지 않은 물체도 있습니다. 이런 경우에는 주축의 방향을 명백히 알 수가 없죠. 게다가 주축을 리지드바디의 로컬좌표축으로 쓰기도 꽤 어려우니 차라리 안 그러는 게 나을 겁니다. 제15장에서 살펴볼 FlightSim.exe의 비행기를 예로 들어보죠. 여기서 사용 하는 로컬좌표축들은 파일럿을 기준으로 전후/상하/좌우 방향을 가리킵니다. 이런 좌표계 설
62
1부 - 물리학의 기초
계는 날개, 꼬리날개, 승강타elevator* 같은 부품들을 쉽게 찾을 수 있게 해줍니다. 하지만 이 축 들이 반드시 비행기의 주축이 되는 건 아니지요. 즉, 사용하기 편리한 좌표축을 사용하는 대신
0이 아닌 관성곱들을 처리해줘야 하는 경우도 있다는 겁니다(참고로 관성곱은 양수가 될 수 도, 음수가 될 수도 있습니다). 여러 부분으로 구성된 복합체의 관성모멘트의 합을 계산하는 방법은 이미 앞에서 설명했습니 다. 관성곱 항을 구하는 방법 역시 동일한 절차를 따릅니다만, 보통 각 부분의 로컬 관성곱이
0이 된다는 게 좀 다르죠. 이건 각 부분들을 점질량, 구, 사각형 등의 단순한 도형으로 나타낼 때만 가능한 일입니다. 만약 그렇다면 리지드바디의 관성곱 계산에 가장 큰 영향을 미치는 것 은 축전송 항이 됩니다. 샘플 코드를 보기 전에 우선 점질량 구조체에 새로운 멤버변수를 추가 하겠습니다. 이 변수는 로컬 관성모멘트를 저장합니다. 아래의 코드를 보세요. typedef struct _PointMass { float mass; Vector designPosition; Vector correctedPosition; Vector localInertia; } PointMass;
3개의 로컬 관성모멘트 항들을 저장하기 위해서 여기서 벡터를 사용했습니다. 또한 각 요소의 로컬 관성곱은 0이라고 가정하겠습니다. 다음은 요소들의 관성곱을 계산하는 코드입니다. float Ixx, Iyy, Izz, Ixy, Ixz, Iyz; Matrix3x3 InertiaTensor; Ixx = 0; Iyy = 0; Izz = 0; Ixy = 0; Ixz = 0; Iyz = 0; for (i = 0; i<_NUMELEMENTS; i++) { Ixx += Element[i].LocalInertia.x + Element[i].mass * (Element[i].correctedPosition.y * Element[i].correctedPosition.y +
* 역주_ 비행기를 상승시키거나 하강시킬 때 사용되는 꼬리날개의 부품
1장 - 기본 개념
63
Element[i].correctedPosition.z * Element[i].correctedPosition.z);
Iyy += Element[i].LocalInertia.y + Element[i].mass * (Element[i].correctedPosition.z * Element[i].correctedPosition.z + Element[i].correctedPosition.x * Element[i].correctedPosition.x);
Izz += Element[i].LocalInertia.z + Element[i].mass * (Element[i].correctedPosition.x * Element[i].correctedPosition.x + Element[i].correctedPosition.y * Element[i].correctedPosition.y);
Ixy += Element[i].mass * (Element[i].correctedPosition.x * Element[i].correctedPosition.y);
Ixz += Element[i].mass * (Element[i].correctedPosition.x * Element[i].correctedPosition.z);
}
Iyz += Element[i].mass * (Element[i].correctedPosition.y * Element[i].correctedPosition.z);
// e11은 1행 1열의 요소, e12는 1행 2열의 요소… 등등 InertiaTensor.e11 = Ixx; InertiaTensor.e12 = -Ixy; InertiaTensor.e13 = -Ixz; InertiaTensor.e21 = -Ixy; InertiaTensor.e22 = Iyy; InertiaTensor.e23 = -Iyz; InertiaTensor.e31 = -Ixz; InertiaTensor.e32 = -Iyz; InertiaTensor.e33 = Izz;
관성텐서의 회전축은 리지드바디의 최종 무게중심을 통과합니다. 따라서, 축전송 공식을 사용 할 때, 반드시 각 요소에 올바른 좌표(최종 무게중심에 대한 상대좌표)를 사용해야 합니다. 위의 연산은 로컬좌표(물체에 고정된 좌표)를 사용하여 관성텐서를 계산합니다. 이 장의 앞 부분에서 말했듯이 로컬좌표를 이용하여 각운동방정식을 다시 쓰고 로컬 관성텐서를 이용하면 계산량이 줄어듭니다.
64
1부 - 물리학의 기초
1.9 상대론적 시간 혹시 우주선의 작동원리에 대해 배워보고 싶은가요? 아니면 시간여행의 개념을 게임하고 추가 하고 싶다거나요? 만약 그렇다면 상대성이론이 좀 도움이 될 겁니다. 특히 상대성이론이 시간 에 미치는 영향요. 저희 집 벽에 걸려 있는 시계의 속도는 여러분의 시계와 동일할 것입니다. 그게 시계의 용도니 당연한 이야기지요. 그러나 알베르트 아인슈타인은 시간의 속도는 일정하 다는 통념과는 달리, 빛의 속력이 광원의 움직임과 상관없이 항상 일정하다고 주장하였습니다. 이를 다시 말하면 다음과 같습니다. 진공상태에서 손전등을 비추면 여기서 가시광선의 형태로 방출되는 전자기파 electromagnetic radiation는 언제나 c ( 299,792,458 m/s )의 속도로 이동합니다. 이제 0.5 광속으로 비행 중인 로켓의 머리 부분에 이 손전등을 매달았다고 해보죠. 그 로켓이 우리 쪽으로 날아오고 있다면 로켓에 달려 있는 손전등에서 나오는 빛의 속도가 1.5c일 거라고 생각하기 쉽겠죠? 아니요, 여기서 나오는 빛의 속도는 여전히 c입니다. 아인슈타인의 특수상대 성이론이 완성되어감에 따라, 이 가설은 “시공간연속체space-time continumm* 내에서 정보를 전송 할 수 있는 최대속도가 존재한다”라는 표현으로 발전했습니다. 이것을 국소성locality의 원리라고 합니다. 전자기파는 질량을 갖지 않으므로† 진공상태 속에서 이동속도가 위에서 말한 최대속도 가 됩니다. 이 이론에서 얻을 수 있는 가장 놀라운 결론은 시간이 더 이상 절대적이지 않다는 점입니다. 어 떤 상황에서도 빛의 속력이 동일하려면, 속도가 증가함에 따라 시간이 감소(팽창)해야만 하거 든요. 이건 꽤 쉽게 증명할 수 있습니다. 그럼 예를 하나 들어보죠. 보통과는 조금 다른 가상의 시계가 하나 있습니다. 이 시계는 2개의 거울과 그 사이에서 반사되는 광선으로 구성되어 있습니다. 이 광선이 두 거울 사이를 왕복하 는 데 걸리는 시간을 틱tick이라고 하겠습니다. 그럼 틱을 다음과 같이 계산할 수 있죠.
Δt = 2L / c 여기서 L은 두 거울 사이의 거리이고, c는 빛의 속력입니다. 이제, 이 시계가 공간 속을 이동한 다고 합시다. 그럼 이 시계 위에 올라타서(즉, 시계와 같은 속도로 이동하면서) 거울을 내려다 보면 [그림 1-12 ]와 같이 보일 겁니다. * 역주_ 공간과 시간을 하나로 합친 개념 † 전자기파의 입자 형태인 광자( photon)는 상대론적 질량을 가지지만 정지질량( rest mass)은 가지지 않는다고 가정합니다. 이걸 제대로
다루려면 양자전기역학까지 파고 들어야 하는데 그건 너무 복잡하므로 이 책에서는 그냥 질량이 없다고 하겠습니다.
1장 - 기본 개념
65
그림 1-12 시계와 같은 속도로 움직이며 관찰한 모습 거울 A
L
거울 B
이제 시계에서 내려서 우리 눈앞을 왼쪽에서 오른쪽으로 스쳐 지나가는 시계를 보면 [그림
1-13 ]과 같을 것입니다. 그림 1-13 눈앞을 스쳐 지나가는 시계를 관찰한 모습
V 거울 A
거울 A
거울 A
H L
거울 B
거울 B
거울 B
t=0
t=1
t=2
이 시계의 한 틱은 (빗변의 거리) × 2 / (빛의 속도)가 됩니다. 근데 여기서 H가 L보다 길죠? 따라서 [그림 1-13 ] 시계의 한 틱에 걸리는 시간이 [그림 1-12 ] 시계의 틱보다 길다는 결론 을 얻을 수 있습니다. 아직도 이게 잘 이해되지 않는 분들을 위해 다른 방법으로 설명해볼게요. 두 거울 사이의 왕복 거리를 왕복에 걸린 시간으로 나눈 것을 빛의 속도라고 정의해보죠. 그러면 다음과 같은 수식 을 얻을 수 있습니다.
c = 2L / Δt 하지만, 국소성의 원리에 따르면 빛의 속도는 그 어떤 경우에도 동일해야 하므로 다음의 식도 유효합니다.
66
1부 - 물리학의 기초
c = 2H / Δt 두 식이 동치가 되려면 두 공식에 쓰인 Δt가 다른 값을 가져야 합니다. 이것이 의미하는 바는 다음과 같습니다. 고속비행 중인 로켓이 눈 앞을 지나갈 때, 그 로켓의 안쪽 벽에 걸린 시계를 본다면 저희 집 벽에 걸린 시계보다 느리게 도는 게 보일 겁니다. 이때 로켓 안에 있는 사람이 제 시계를 본다면 저희 시계가 빨리 돈다고 생각할 것 같지요? 하지만 사실은 그 반대입니다. 그 사람은 자신이 정지상태라고 생각하니 그 사람 앞을 휙~ 지나가는 제 시계가 더 느리게 가 는 것처럼 보이지요. 응? 상식적으로 좀 말이 안 되는 거 같죠? 하지만 이걸 원근법에 빗대어 생각해보면 말이 됩니다. 철수와 영희가 멀리 떨어져 서로 바라보는 경우, 철수의 눈에 영희가 작게 보인다고 영희의 눈엔 철수가 크게 보이는 건 아니거든요. 로렌츠 변환 Lorentz transformation에 의하면, 속도 v가 팽창하는 양은 다음과 같습니다.
Δt' = γ Δt 여기서 γ은 아래와 같으며 이를 로렌츠 인자 Lorentz factor라고 부릅니다.
γ=
1
2 1 – v2 c
속도가 광속에 가까워짐에 따라 시간팽창의 효과가 증가합니다. 쌍둥이 여동생이 한 명 있다고 상상해봅시다. 동생이 광속의 75% 속도로 비행 중인 우주선에 탑승해서 지구를 떠난 뒤, 본인 의 시간으로 20년 후에 지구에 돌아온다면 우리는 이미 30년이나 더 늙어 있을 겁니다. 시간팽 창 때문이죠. 근데 쌍둥이 여동생이 보기에는 우리의 시간이 더 느리게 흐르므로 이 결과가 좀 모순같이 들립니다(쌍둥이 역설). 하지만 특수상대성이론은 쌍둥이 동생의 관성계inertial frame of *가 일정하게 유지되지 않으므로 이 역설은 성립하지 않는다고 합니다. 지구를 떠난 우
reference
주선이 다시 돌아오기 위해서는 방향을 바꿔서 가속해야 합니다. 이때 우주선은 비관성계가 되 고, 그 순간 우리가 갑자기 나이를 먹는 것처럼 보일 겁니다. 뭔가 이상하죠? 그렇지만 사실입 니다! 상대속도에 의한 시간팽창 외에도 시간의 흐름이 느려지는 경우가 있습니다. 아인슈타인의 일 반상대성이론에 의하면 강한 중력의 영향을 받아도 시간이 느려집니다. 중력에 의한 시간팽창
* 역주_ 가속운동을 하지 않는 좌표계. 즉, 등속운동 중인 또는 정지상태의 좌표계
1장 - 기본 개념
67
은 상대적이지 않습니다. 영희가 철수보다 블랙홀에 가까이 있다면, 누가 보기에도 영희의 시 계가 더 느리게 움직이기 때문이지요. 하지만 블랙홀 근처에서는 모든 물리적인 현상이 느려질 것이기에 어느 시계가 더 빠르거나 느리다고 말할 여지조차 없습니다. 이 모든 게 상대적이거 든요! 여기서 배운 시간팽창의 개념은 게임 속에서 시간의 흐름을 제어할 수 있는 능력의 이론적 근 거로 사용할 수 있습니다. 게임 속 주인공이 임무 수행을 위해 가까운 미래로 여행해야 한다면, 원심분리기에 들어가서 광속에 가까운 가속을 받습니다. 이제 원심분리기에서 나오면 미래로 시간여행을 한 거나 다름이 없죠. 그러나 물리학에 따르면 이런 형태의 시간여행은 편도여행입 니다. 상대성이론에서는 시간을 되돌릴 방법이 없거든요! 주인공을 가까운 항성으로 보내는 것 도 물리학의 한계 내에서 할 수 있습니다. 우주선을 충분히 가속하면 인간의 수명 안에 여행할 수 있는 거리가 꽤 되지요. 예를 들어 9.8 m/s2의 등가속도로 여행한다면, 지구에 있는 것처럼 느끼면서 가시거리 안에 있는 모든 은하를 여행할 수도 있습니다. 하지만 그동안 지난 시간은 수십억 년이 되어버리지요. 어때요? 물리학을 이용하면 꽤 흥미로운 게임을 만들 수 있을 것 같죠? 시간팽창의 개념은 우주비행이나 고속여행에만 적용되는 게 아닙니다. 심지어는 디지털 전자 제품도 이 개념을 사용하지요. 그 예로 제22장에서 살펴볼 GPS 장치도 상대론적 시간팽창 개 념을 이용해 위치를 계산합니다. 고속으로 공전 중인 인공위성 안의 시계는 지구의 시계보다 느립니다. 하지만 이것이 지구의 중력에서 멀리 떨어져 있기 때문에 시계가 빨라지기도 합니 다. 이 두 현상이 합쳐져서 발생하는 효과에 대해서는 제22장에서 구체적으로 다루겠습니다. 상대성이론에서 얻을 수 있는 또 다른 결론은 ‘물체가 빛보다 빠르게 이동할 수 없다’입니다. 물 체의 이동속도 v가 빛의 속도 c와 같아지면 로렌츠 인자의 분모가 0이 되거든요. 그러니 게임 속에서 광속 이상으로 여행을 해야 한다면 분모가 0이 되지 않도록 그럴듯한 가설을 만들어봐 야겠지요. 어차피 규칙을 깨야 한다면 그래도 좀 그럴듯한 이유를 대는 게 낫잖아요?
68
1부 - 물리학의 기초
CHAPTER
2
운동학
이 장에서는 운동학 kinematics의 기본을 배워보겠습니다. 특히 선형변위linear displacement와 각변위 , 속도, 가속도의 개념을 집중적으로 다룰 예정입니다.* 또한 독자분들의 이해
angular displacement
를 돕기 위해 파티클 운동방정식을 계산하는 예제 프로그램도 하나 준비해놓았습니다. 파티클 운동을 마친 뒤에는 리지드바디rigid-body 운동에 대해 알아보겠습니다. 이 장과 다음 장에서 배 우는 내용은 제4장의 동역학을 이해하는 데 기초가 되니, 이 장에서 기본 개념을 꼭 익히고 가 도록 하세요. 책의 맨 앞에서 운동학이란 물체가 받는 힘을 전혀 고려하지 않은 채, 물체의 움직임만을 연구 하는 학문이라고 말씀드렸었죠? 즉, 운동학은 오직 시간에 따른 물체의 위치 및 속도, 그리고 가속도의 변화에만 관심을 가지는 학문입니다. 이제 리지드바디와 파티클에 대해 생각해보죠. 먼저 리지드바디란 외부의 힘을 받아도 형태가 바뀌지 않는 물체를 말합니다. 즉, 물체에서 임의의 두 점을 고른 뒤, 물체에 힘을 가해도 두 점 사이의 거리가 절대 변하지 않죠. 그러므로 리지드바디를 다룰 때는 리지드바디의 크기와 방향 이 중요하고, 선운동과 각운동을 둘 다 고려해야 합니다. 반면 파티클은 질량은 있지만 크기가 매우 작은 물질입니다. 그 크기가 너무 작은 나머지 문제 를 풀 때 무시해도 될 정도라죠. 예를 들어 로켓같이 아주 먼 거리를 비행하는 발사체를 생각해 봅시다. 로켓의 궤적trajectory을 분석할 때 로켓의 크기는 무시해도 될 만큼 크기가 작은 변수입 * 역주_ 변위란 위치변화를 뜻하는 말로서, 크기나 위치 등의 차이를 뜻합니다.
2장 - 운동학
69
니다. 그러므로 파티클을 다룰 때는 오직 선운동만이 중요하고, 파티클 자체의 각운동은 무시 해도 됩니다. 이렇게 생각해보면 어떨까요? 저 멀리 떨어져서 전체적인 그림을 보면 그게 파티 클이고, 그와 반대로 아주 가까이에서 각회전까지 자세히 들여다보면 리지드바디라고요. 파티클 문제를 풀든 리지드바디 문제를 풀든 간에 공통되는 운동학적kinematic* 특성들이 있습니 다. 물체의 위치와 속도, 가속도가 바로 그들이지요. 이 특성들에 대해서는 다음 절에서 자세히 알아보겠습니다.
2.1 속도와 가속도 일반적으로, 속도velocity는 크기와 방향을 가지는 벡터입니다. 그리고 흔히들 말하는 속력speed이 바로 속도의 크기지요. 속력을 이동률이라고 표현할 수도 있습니다. 다시 말해 속력은 이동거 리와 이동시간 간의 비율이고, 수학식으로는 다음과 같이 표현합니다.
v = Δs / Δt 여기서 v는 속력(즉, 속도의 크기)이고, Δt는 시간입니다. 그리고 이 시간 동안 이동한 거리 가 Δs입니다. 이로부터 알 수 있는 사실 하나! 속력의 단위가 2개의 기본단위로 구성되어 있 죠? 길이를 시간으로 나눈 거네요(즉, L/T의 형태). 흔히 사용하는 속력 단위로는 초당 미터 를 뜻하는 m/s, 시간당 킬로미터를 뜻하는 km/h 등이 있습니다. 예를 하나 들어보죠. [그림
2-1 ]에 직선 도로를 달리고 있는 자동차가 있습니다. 이 자동차는 두 지점을 각각 t1 (0초), t2 (1.136초)에 지났고, 두 지점 사이의 거리(S )는 30 m입니다. 이때 차의 속력을 계산해볼까 요? 그림 2-1 자동차 속력의 예
* 역주_
70
여기서는 운동학적이라 번역했지만, 어감에 따라 키네마틱이라 옮기기도 하겠습니다.
1부 - 물리학의 기초