벽면이 있는 탁구겜을 만드시나봐요?
단순히 입사각 반사각이면.. 큰 수학적 지식 없어도 충분합니다. 당구겜을 만든다면 얘기가 달라지겠지만..
지금까지 사실적인 당구겜을 못만든 이유가 단순히 정역학으로 계산되는게 아니라 논문 살펴보니 전자기학적으로 접근해야만 얼추 비슷한 환경이 만들어지더군요. ㅡ.ㅡ;;
2006.02.22 03:38:00 (*.250.76.187)
크로리
좀 도움이 되실런지 모르겠습니다만 일단 몇 자 끄적여봅니다.
20번 슬라이드
벽을 향해 '돌진'하는 물체의 속도성분을 분해하여 놓은 겁니다. Vn은 벽면의 법선방향, Vt는 V벡터를 벽면에 투영한 방향 입니다.
문맥상 N은 벽면의 법선 방향의 단위벡터를 의미하는 것 같습니다.
Vn는 V벡터와 N벡터를 내적(dot product)하여 얻어진 스칼라값에 N벡터를 구하면 얻어집니다.
Vn이 구해지면 Vt는 V에서 Vn을 빼면 나오는게 당연하겠죠 ^^;;
22번 슬라이드
충돌 전과 충돌 후의 속도 변화에 대한 이야기입니다. V가 충돌전, V'가 충돌 후의 속도벡터를 뜻합니다.
식에 의하면, 충돌면의 방향의 속도벡터는 변하지 않고, 법선방향(이를 normal direction이라고 합니다)의 속도 벡터는 방향은 반대가 되고, 그 크기는 '특정하게' 결정되는 상수에 의해 결정된다는 이야기입니다 (이 특정한 상수를 충돌계수라고 합니다)
24번 슬라이드
그 다음은, 힘을 받고 있는 물체가 벽과 충돌하는 '순간' 받는 힘에 대한 이야기입니다.
물체가 받는 힘을 20번 슬라이드에서와 같은 방법으로 나눠보면, 법선 방향의 힘은 벽이 물체에 가하는 힘에 의해 상쇄되어 투영방향 성분의 힘만 받는 형태의 거동을 한다는 이야기입니다.
비스듬히 놓인 벽면에 자유낙하하는 공이 충돌하는 경우를 생각하시면 이해가 빠를겁니다.
근데 식이랑 그 밑에 쓰여있는 설명이랑 좀 다른것 같네요;;
슬라이드 왼쪽의 그림과, 식 밑에 쓰여진 설명에 의하면 F'+Fn=0 이 맞습니다.
2006.02.22 03:40:17 (*.250.76.187)
크로리
입사각과 반사각이 같아지지 않는 이유는 22번째 슬라이드의 내용 때문에 그렇습니다. 법선방향의 속도가 충돌후 변하기 때문이죠.
단, 그 자료에서 언급된 내용을 토대로 게임을 만드실 때, 공의 움직임이 실제와 완벽히 똑같으리라는 기대는 안하시는게 좋습니다.(물론 상당히 비슷하긴 하겠습니다만;;)
이유가 여러가지가 있겠습니다만, 결정적으로 그 자료에선 공을 body'가 아닌 'particle'로 보고 있습니다. 모멘트를 생각하지 않았다는 거죠...
쓰고나니 설명이 좀...; 그렇군요. 고등학교 물리II 또는 대학교 일반물리 책의 충돌과 관련된 부분을 읽으시면 도움이 될겁니다 그럼~
2006.02.22 11:31:30 (*.107.113.189)
안군
벽에 부딪히는 부분에 대한 것은 그다지 어렵지 않습니다. 한쪽 벡터만 방향을 바꿔주면 되기 때문이죠..
예를 들어 X 축에 부딪히는 경우에는 Y 벡터의 부호만 바꿔주면 되구요, Y 축에 부딪히면 X 축의 부호만 바꿔주면 되는거죠. ( * (-1) )
문제는, 공과 공이 부딪히는 경우인데, 일단은 완전탄성체 충돌 공식과 동일하게 (질량이 서로 같으므로, 생각보다 쉽습니다.) 해주시면 되구요.
당구 게임을 만들 때 사용되는 공식은 고등학교 물리 정도의 지식만 있어도 가능하더군요.. (실제로 만들어본 적이 있어서.. ^^;;)
2006.02.22 11:36:39 (*.118.69.84)
박현만
두분모두 답변감사합니다.
크로리//이런 물리적인 식을 처음 적용해보는거라 초보적인 수준에서 만들어볼 생각입니다;; 공의 회전이라던지, 공의 휨이라던지 는 추후 구현 계획이구요..
2006.02.22 11:52:20 (*.107.113.189)
안군
그리고, 공의 스핀(시네루라고 하죠.. ^^;;)의 경우에는 조금 복잡해지긴 하는데, 그 이유는, 공과 공의 마찰계수라던지, 벽면과의 마찰계수 등에 대한 조절이 필요하기 때문이죠.
그게... 그냥 공식으로 딱 나와주면 좋은데, 쉽게 안돼요.. (실제 당구를 쳐봐도 당구장마다 서로 다르죠...)
일단, 공과 공이 부딪힐때의 회전의 전달은 일어나지 않는다고 가정하고, (사실은 일어나죠;;;) 벽면과의 충돌의 경우에만 생각해줘도 될겁니다. 여기까지 수평회전이고..
수직회전 (싯기, 오시... -.-;;) 의 경우에는 바닥과의 마찰을 고려해야 하는데.. 음.. 생각보다 되게 많군요 ㅡ,.ㅡ;;;
그리고, 실제 개발쪽으로 들어가면 더 골치아픈게 있는데, 공의 속도와 이동을 고려해서 프로그래밍을 해놔도, 실제로 공이 정확하게 서로 만나는 시점을 찾는게
쉽지가 않다는 겁니다. 오차가 생기는 경우가 무척 많죠... 공의 이동을 미리 다 계산해서 하지 않는 한, 실시간으로 공 끼리 부딪혔는지 판단하다 보면...
공 끼리 서로 파묻히는 경우가 생깁니다. 컴퓨터의 성능으로 극복하느냐.. 아니면 이동 경로를 미리 다 계산하느냐의 문제인데..
예를 들어 포켓볼처럼 공이 아주 많은 경우에는 이동 경로를 다 계산해서 서로 만나는 경우를 도출해내는게.. 사실상 거의 불가능. ㅡ,.ㅡ;;;
2006.02.22 12:09:49 (*.118.69.84)
박현만
안군// 이번에 만드는 것은 탁구와 비슷해요. 네오님 말씀처럼 벽면 있는 탁구거든요;; 공의 회전을 넣는다면 말씀하신것에서 유추해볼때 공과 탁구채의 마찰계수, 공과 벽면과의 마찰계수 등에 대한 것을 생각해야 되는군요.. 그리고 공과 벽면의 충돌 탐지, 공과 탁구채의 충돌 탐지도 해야 하는데 이 부분에 대한 것도 링크걸린 자료 만으로 가능할까요?
2006.02.23 15:22:39 (*.107.113.189)
안군
음.. 아주 옛날의 그 핑퐁인가.. 하는 탁구게임같은걸 생각하신다면, 링크걸린 자료까지도 필요없을 듯 합니다..
대략.. 음... 벽돌깨기 정도 생각하면 되나요? ^^;;
거기다가 약간의 연출 (채가 움직이고 있다면, 채의 움직이는 방향에 따라 약간의 벡터 변화가 있다거나...) 이 첨가되면 더 좋겠죠...
P.S: 원래 게임 프로그래밍은 온갖 꽁수와 편법(?)이 난무하는 분야입니다.. 너무 정공법으로만 생각하지는 마세요..
( 아.. 공부하는 입장에 있는 사람한테 이런 말 하면 안되는건가? -.-a)
2006.02.23 15:25:07 (*.107.113.189)
안군
아... 이제서야 링크에 있는 게임을 봤습니다.. 예전에 많이 해본 3D 핑퐁 플래시 게임이군요... ;;;
저 게임은... 스핀 개념도 들어가 있죠;;; 공기 저항까지 생각했다고 봐야 하나... 그렇게까지 계산해서 한거 같지는 않구요...
회전 방향에 따라서 어느 정도의 가속도... (가속도가 또 변한다고 보시면 되겠네요)가 있다고 생각됩니다..
역시나 편법.... 을 이용히면... (퍽퍽퍽!!)
단순히 입사각 반사각이면.. 큰 수학적 지식 없어도 충분합니다. 당구겜을 만든다면 얘기가 달라지겠지만..
지금까지 사실적인 당구겜을 못만든 이유가 단순히 정역학으로 계산되는게 아니라 논문 살펴보니 전자기학적으로 접근해야만 얼추 비슷한 환경이 만들어지더군요. ㅡ.ㅡ;;