RPG2K 원의 방정식 알고리즘
2006.09.17 08:50
공부하다 생각나서.. --;;
고1 수학 10-나 에 나오는 원의 방정식을 이용한 원형 공격식입니다.
말이 거창해서 그렇지 X,Y 좌표를 이용한 쉬운 식입니다.
이걸 이용하시면 원 형태의 일정 범위 안의 적에게 위해(...)를 끼칠수 있는 이벤트를 만드실 수 있습니다.
다만 이 방법은 액알에 기초하며, Hp를 가지고 있는 몬스터가 있고, 이 이벤트가 몬스터에게 있다는 가정 하에 성립합니다.
우선 원의 방정식에 대해 설명하면,
원의 방정식도 엄연히 피타고라스의 정리를 이용하는 것이므로 중학생 분들도 쉽게 이해하실수 있을 겁니다.
이제부터 좀 횡설수설할겁니다. 이해하시려면 공부하세요 ㅡㅡ;;;
(사실 제가 말주면이 없어요)
원의 중심(주인공)의 좌표를 Sx, Sy 라 하고
범위 R(반지름)과 만나는 점을 E(a,b) 라고 합니다.
그렇다면 이 원의 방정식은
(a-Sx)^2 + (b-Sy)^2 = R^2 (^2는 제곱입니다.)
이 됩니다.
여기서 원래 루트를 씌워 변환하여 정확한 원을 구해야 하나
RPG 만들기 툴에서 좌표는 자연수밖에 되지 않으므로
제곱한 상태에서 근호(루트)로 변형하지 않고 진행합니다.
(만약 여기서 a가 Sx보다 작으면 조건분기를 써서 a와 Sx의 자리를 바꿔주면 됩니다. b와 Sy도 마찬가지.)
이것을 RPG식으로 식을 변형하면
원점(주인공)의 X좌표를 가지는 변수를 Sx, Y좌표를 가지는 변수를 Sy 라고 합니다.
그렇게 되면
변수의 조작 : Sx에 주인공 X 좌표를 대입한다.
변수의 조작 : Sy에 주인공 Y 좌표를 대입한다.
그리고 적의 좌표를 구해야 하므로
적의 X좌표를 가지는 변수를 a, 적의 Y좌표를 가지는 변수를 b라고 합니다.
이 연산을 좀더 쉽게 하기 위해 변수를 하나 더 넣어서
AttX , AttY 라는 변수를 추가하겠습니다.
그렇다면 위의 식에 의해
(이제부터 V는 변수를 뜻함)
변수의 조작 : v[a] - v[Sx]
변수의 조작 : v[b] - v[Sy]
변수의 조작 : v[AttX]에 v[a]를 대입
변수의 조작 : v[AttY]에 v[b]를 대입
변수의 조작 : v[AttX]와 V[AttX]를 곱함 (제곱과정)
변수의 조작 : v[AttY]와 V[AttY]를 곱함 (제곱과정)
이제 이 두 변수를 더해서 R의 제곱값보다 작으면 공격 성립,
그렇지 않으면 범위에 있지 않으므로 공격이 성립하지 않습니다.
변수의 조작 : v[AttX] + v[AttY]
이제 v[AttX] 에 두 수를 더한 값이 있으므로
조건 분기 : v[AttX]가 R^2 보다 작으면 ,
공격 성립 (이 경우엔 몬스터의 Hp값을 줄이면 되겠죠.)
그외의 경우엔, (공란)
... 이런식으로 하시면 됩니다.'
횡설수설했는데 조만간 예제를 올릴 생각입니다.
... 총 필요한 변수는
======================
주인공의 좌표 : Sx ,Sy
몬스터의 좌표 : a,b
반지름 : R (반지름의 경우는 원의 범위 안에 있는 걸 확인할 때 쓰는 수이므로, 2^2 , 3^2 , 4^2, 5^2 등등의 수로도 가능합니다만, 스킬랭크 시스템을 도입해서 R의 범위를 달리 하시려면 따로 변수를 써야 합니다.)
연산용 : AttX, AttY
======================
최소 7개, 최대 수십개
(몬스터의 좌표는 개체마다 다르므로 [몬스터 수 * 2 ] 만큼 들겠네요.)
입니다.
변수에 음수가 들어가면 편하게 만들수 있는데 지원이 안되다니 아쉽네요.
마지막으로 이펙트에 관한 것입니다만,
이 계산식은 단순히 범위 안에 있는건지 아닌지만 판별하기 때문에 ...
조잡하시더라도 F8번을 누질르셔서 전투 이펙트를 만드신 다음
이미지를 2r(원의 지름) 에 맞게 잘~ .... 조정하셔서 넣는 수밖에 없네요.
=======================================================
ex)
망할 주인공이 (2,3)위에 있고,
이 주인공놈은 r=5의 범위 만큼 공격할수 있습니다.
몬스터1이 (5,6)에 있고,
몬스터2가 (10,3)에 있습니다.
식에 대입하면,
몬스터 1의 경우엔
(a-Sx)^2 + (b-Sy)^2 ≤ R^2 (^2는 제곱입니다.)
(5-2)^2 + (6-3)^2 ≤ 5^2
3^2 + 3^2 ≤ 25
∴ 9 + 9 ≤ 25
그러므로 범위 안에 있습니다.
몬스터 2의 경우엔
(a-Sx)^2 + (b-Sy)^2 ≤ R^2 (^2는 제곱입니다.)
(10-2)^2 + (3-3)^2 ≤ 5^2
∴64 + 0 ≤ 25
위의 결과는 성립하지 않으므로
범위 안에 있지 않습니다.
==============================================================
.....제가 봐도 횡설수설인데... 외계어를 이해 하시련지.. --;
혹시 오타나 잘못된 점 있으면 말해주시기 바랍니다.
댓글 19
-
RPG열심히만드는人
2006.09.17 17:24
액알에서 쓰이겠군요|+rp2+|2552|+rp3+|bibup -
홀로獨人
2006.09.19 05:17
헉.......노력을 감안하여 추천 <- 탕|+rp2+|2553|+rp3+|bibup -
『덩키동크』
2006.09.20 02:42
원의방정식.. 도무지 쓸모 없을것 같던 이녀석이 알고리즘으로 등장하다니 ㅡ.ㅡ;;;|+rp2+|2555|+rp3+|bibup -
다크세이버™
2006.09.20 22:58
일단 고딩이 아니면 못본다는 사실이 낭패|+rp2+|2556|+rp3+|bibup -
바람날개™
2006.09.21 03:59
결론:하지말자|+rp2+|2557|+rp3+|bibup -
-H-
2006.09.22 02:37
이..이해가 안되는.. 아직 안배워서 그런가 -ㅁ-|+rp2+|2560|+rp3+|bibup -
Yggdrasil
2006.09.24 08:11
전에 5시간 만들다 실패했던 사악한 녀석이군...-_-|+rp2+|2572|+rp3+|bibup -
[S's-S]
2006.09.25 05:52
내가 만든 게임들에는 빠지지 않고 쓰이는 녀석이군|+rp2+|2582|+rp3+|bibup -
아르카
2006.09.27 22:28
범위 스킬 그냥 몬스터 좌표에서 주인공 좌표 빼면 되는데...|+rp2+|2606|+rp3+|bibup -
[CoWBoy]bebop
2006.09.30 22:25
아르카 // 그냥 몬스터 좌표에 주인공 좌표를 빼면 대각선의 연산을 못하므로... 제곱까지 연산해야 합니다.|+rp2+|2616|+rp3+|bibup -
타다기
2006.10.01 08:06
그냥.. 꼭 원의방정식이 아니더라도 피타고라스의 정리만을 이용해서 일정한 원 안인지 밖인지를 구할수 있습니다.. 결과는 같더라도 구현은 이쪽이 쉽습니다.|+rp2+|2619|+rp3+|bibup -
[CoWBoy]bebop
2006.10.01 09:42
타다기 // 어찌 보면, (원의 방정식 = 피타고라스 정리) 아닌가요.|+rp2+|2620|+rp3+|bibup -
[CoWBoy]bebop
2006.10.01 09:51
...아뇨;; 중학생도 할수 있어요;; 피타고라스 정리니까 ;;; |+rp+|2556|+rp2+|2621|+rp3+|bibup -
RH지니
2006.10.18 07:05
전 중학생이지만....... 피타고라스정리 몰라요 ㅡ.ㅡ
아직 ; 혹시 존사이에 (...?)|+rp2+|2646|+rp3+|bibup -
RH지니
2006.10.18 07:06
암튼 참고할게요 아하하.. |+rp+|2646|+rp2+|2647|+rp3+|bibup -
신쿠
2006.10.30 02:03
피타고라스의 정리는 3학년ㄸ ㅐ배우는내용 아닌가요?|+rp2+|2654|+rp3+|bibup -
Yggdrasil
2006.11.04 05:21
학교에서도 대부분 중1이면 알려주죠(정식으로 배우지만 않을 뿐). 저같은 경우는 초등학교 5학년 때 쯤에도 어디선가 대충 써먹었던 기억이.. |+rp+|2654|+rp2+|2661|+rp3+|bibup -
tkf\
2006.12.16 20:10
-되는데...|+rp2+|2735|+rp3+|bibup -
Lunar†Name
2007.01.29 22:35
감사합니다^^:; 이런 빌어먹을 원방도 쓸대가 있군요! 훗.. 이 시스템을 조금만 조작하면
굿이 데미지 뿐만 아니라 여러가지 효과도 줄수있을것 같군요 ㅎ|+rp2+|2833|+rp3+|bibup
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
471 | [수정]반복루프 무시하기 [5] | Kain_Kryun | 2006.10.03 | 222 |
470 | 스크립트 실행여부를 알아보거나 스크립트를 봉인시켜보자 [3] | A. 미스릴 | 2006.09.30 | 456 |
469 | 스타 맵을 만들어볼까? -트리거 1- [4] | 다크세이버™ | 2006.09.28 | 98 |
468 | 스타 맵을 만들어 볼까? -기초 4- [6] | 다크세이버™ | 2006.09.27 | 75 |
467 | 스타 맵을 만들어 볼까 ? -기초 3- [9] | 다크세이버™ | 2006.09.26 | 95 |
466 | 스타 맵을 만들어 볼까? -기초 2- [6] | 다크세이버™ | 2006.09.24 | 119 |
465 | 확인 [1] | dnajs | 2006.09.24 | 42 |
464 | 스타 맵을 만들어 볼까? -기초 1- [11] | 다크세이버™ | 2006.09.23 | 213 |
463 | 변수를 절약하자!! [8] | 길모나 | 2006.09.22 | 263 |
» | 원의 방정식 알고리즘 [19] | Spegel | 2006.09.17 | 380 |
461 | MSN 주소를 알려주세요. [3] | MrGeek | 2006.09.16 | 85 |
460 | 그래픽 제작 도구들 [2] | dnajs | 2006.09.15 | 240 |
459 | 액션 게임을 만들어 보자! [5] | 『연금술사』 | 2006.09.14 | 1581 |
458 | [소스첨부] 인자값 변경. | 청연 | 2006.09.14 | 59 |
457 | VNAP 배경음 예제 [1] | dnajs | 2006.09.13 | 141 |
456 | 주석제거 프로그램 (수정) | 청연 | 2006.09.13 | 128 |
455 | ★C언어 처음 하시는분들 보세요.. [3] | 청연 | 2006.09.13 | 202 |
454 | 미디를 하려면.. [3] | dnajs | 2006.09.11 | 243 |
453 | [연재] 2강. 스크립트의 종류를 알아보자! [1] | 만삐 | 2006.09.04 | 278 |
452 | [연재] 1강 보조강의 - 아이콘과 커서를 만들자! | 만삐 | 2006.09.04 | 229 |