언어/기타
2007.03.12 00:23

[고난도 시스템] 당구를 만들어 보자

SSS
조회 수 1259 추천 수 3 댓글 5
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

이번에 다뤄볼 시스템은 바로


 


당구,  빌뤼아~드    입니다  ㅡㅡ;


 


 


 


 


구상한건 벌써 1~2년전 이지만... 그때 잠시 시도하다가 엉뚱한데서 자꾸 막혀서


접어버린 시스템이죠 OTL


 


사실 2k 로 당구를 만들기란 참 어려웠습니다


힘의 배분이라거나 두 공이 부딧힐 경우 그 공들의 이동경로... 등등을 계산하는것이 2k의 사칙연산으로는 부족해서


좀 꽁수를 사용해서 억지로 끼워맞춘거라 1픽셀 단위지만 꽤나 큰 오차가 생기는 단점이 있기도 합니다만..


꽤나 재미있는(사람 피말리는) 연구였었죠    


 


이 글도 아마 2k비법이라기보다는... 거의 수학이 될거 같습니다 ㅡㅡ;


 


 


 


 


 


 


우선 당구를 만드는데 있어서 기본 설정(가정)은 한공이 멈춰있고 한공이 와서 부딧힐 경우 두 공이 튕겨나가는 각도는 90도,


그 속도는 두 공이 부딧히는 순간의 접선의 sin,cos 값에 비례하고 마찰 등으로 조금의 손실이 있다....   이지만


이제 실제로 맞는지도 모르겠고 나중에 나올 계산 등이 설정이랑 다를수도 있습니다 ㅡㅡ;    적당히 이해해 주시길.. ㅎㅎ


 


 


 


 


 


우선 공을 치는 것은 간단합니다    피타고라스를 이용해 원형으로 이동하는 조준점을 만들어서


조준점의 x,y*파워  의 속도로  이동을 시켜주면 되죠


 


그리고 나서 이제 공이 충돌하는 과정이 이 시스템의 대부분이라 할수 있는데요


 


 


우선 충돌 했는지를 판단하는것은 두 공의 거리를 이용합니다


두 공의 원점 사이의 거리가 구의 지름과 같을때, 충돌했다라고 판단 할수 있습니다


 


식으로 나타내자면 (구1x-구2x)^2 + (구1y-구2y)^2 <= 구지름^2     이 되겠죠


어느정도 오차가 생기기 때문에 = 가 아닌 <= 로 한것이구요


 


 


그리고 충돌을 했을 경우 공의 진로를 어떻게 변경 하느냐.. 하는것이 문제인데요


제 마음대로이지만 충돌시 힘의 이동을 계산하는 방법으로는


구1 -> 구2  로 가하는 충격과   구2 -> 구1 으로 가하는 충격을 동시에 적용시키면 될거 같았습니다


 


여기서 충격은 두 공의 접선에 수직인 방향으로 가해진다고 가정했고 구하는 방법은 다음처럼 했습니다..


 


구1,2의 접선과 구1의 속도벡터가 이루는 각 A 에 대한 sin 값 에 구1의 속도를 곱한 값이 충격량이 되고


구2의 중점의 x,y좌표에서 구1,2의 원점이 이루는 직선의 중점의 x,y좌표를 뺀 X,Y값을 이용해


(X,Y / r) * 충격량 만큼을 구2에 가산하고 구1에 감산한다.


 


여기서 이 각A가 제일 골치 아픕니다 ;;  접선만으로는 구할수가 없으니까요


어찌어찌 복잡하게 해서 구하긴 했었는데......   솔직히 기억이 안납니다 ㅜㅜ


 


그때는 미적분 삼각함수를 배우기 전이라 어려웠지만


지금생각해보니 삼각함수의 차(맞나?)  를 이용하면 구할수 있을거 같습니다만...


죄송합니다 그 공식도 기억이 안납니다 ㅡㅡ;    수능칠때도 안외웠던거라


 


하여간 구1과 구2를 바꾸어 역시 같은 계산을 반복합니다


 


 


 


 


접선를 구하는 방법은 두 구의 원점을 이은 선분을 90도 회전시키는것인데


원점의 좌표차를 이용해서 구한 선분이 (X,Y) 라면  법선은 (-Y,X),(Y,-X) 로 구하면 됩니다


 


그리고 여기서는 삼각함수가 필요하지만.. 2k에는 삼각함수가?  당연히 없죠


하지만 여기서 각도는 위의 A를 제외하고는 두 공의 접선 정도이니 그 접선의 기울기를 이용해서 삼각함수를 대신한것입니다..


우선 당구공은 구라서 두 공이 충돌 하는 순간 구의 원점사이의 거리는 구의 반지름의 두배, 즉 지름으로 항상 같기때문에


두 구의 원점x,y 좌표의 차 를 구의 지름으로 나누면 그것이 곧 sin,cos 값이 된다는 것...


귀찮고 오차가 생기는 제곱근 계산 등도 할필요가 없죠


 


 


 


그리고 실험은 안해봤지만 이대로 적용했을경우


 


두 구 중에서 한공만이 움직여서 부딧힐 경우에는 공이 충돌후 튕겨나가는 방향은 각각 


가해(?)구 는 접선의 방향으로,  피해(?)구 는 접선에 수직인 방향으로 튕겨나가고


그 속도는 가해구 는 구의 속도벡터와 두 구의 접선이 이루는 각의 cos 값,


피해구 는 그 각의 sin 값에 비례할것으로 예상됩니다... 


 


두 공이 모두 속도를 가지고 있다면 이래저래 해서 달라지겠지만요 ^^;


 


 


 


 


그리고 공이 벽에 부딧혓을 경우는 세로축에 부딧히면 X속도, 가로축에 부딧히면 Y속도의  부호를 바꿔주어


튕겨나오는 효과를 만듭니다


 


 


 


 


 


 


이것을 적용시키는 자세한 방법이라거나 사분면에 따른 법선,충격의 부호 설정 등등


다른 자잘한 부분은 생략 하도록 하겠습니다 ㅡ0ㅡ   그거까지 쓰려면 시간이 얼마나 걸릴지...


 


그리고 좀 건방지게 보일수도 있지만 우선 가장 큰문제는 이런 계산 들이니 이걸 이해하고 만들 분이라면


그런 부분은 쉽게 해결하실거라고 믿습니다 ^^;


 


 


사실 제가 쓰고도 이게 뭔가 싶어서 자세한 설명을 쓰려니 막막하기도 하구요 ㅋ

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1004 언어/기타 목에 좋은것들.... 1 켄타 2005.05.17 2070
1003 RPG Maker 좌표대입(ARPG) 사고실험.[이론편] 늑대소년 2005.05.18 1509
1002 언어/기타 스킬데미지를 10000이상 뜨게해보자.(턴알,액알 둘다) Dship 2005.05.18 1888
1001 언어/기타 Fruity Loops에서 FX탭 사용방법 (1) Mr^Lee 2005.05.18 1709
1000 RPG Maker RPG XP 배워보기 <변수를 마스터하자 상편> 1 덩키동크 2005.05.18 2205
999 언어/기타 100%고수강의!(변수이론) 늑대소년 2005.05.18 2470
998 언어/기타 나름대로 - 변수강좌 켈리시 2005.05.18 1624
997 언어/기타 변수(變數)의 기초 바람을 가르는 자 2005.05.19 1270
996 언어/기타 이번에는 오프닝을! 장아찌 2005.05.20 2635
995 RPG Maker 액션RPG 속성무기를 만들어보자!! 천룡수 2005.05.20 1538
994 RPG Maker 아르바이트를 만들자 . - 1 Norid 2005.05.20 1739
993 언어/기타 플레이어가 자기의 이름을 정한다 . [영어] file Norid 2005.05.21 1780
992 언어/기타 레벨업을 하라 . 그리하면 살것이니.. 1 file Norid 2005.05.22 1574
991 [RPG2000] 가이드북 -7- 창조도시 2005.05.22 11106
990 언어/기타 나라의 PHP 초보탈출 - 1편 나라 2005.05.22 1732
989 RPG Maker 경영 RPG만들기[콤플리트판] 늑대소년 2005.05.24 2039
988 [RPG2000] 가이드북 -1- (표지내용무) 창조도시 2005.05.25 14508
987 언어/기타 [c++] 생성자,파괴자 챔피온 2005.05.26 1668
986 언어/기타 《완벽하게 현실적인 게임을 만들려면 해야되는 조작 몇 가지》-[上편] 자이크로 2005.05.27 1852
985 언어/기타 [R2000] 초간단 단거리액알 2 비밀소년 2005.05.27 2521
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51


[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)