wall 을 관찰한 데이터. Wall 은 평상시에는 전진만 한다. 중간에 음수값이 나오는 것은 내 로봇과 부딪쳤을 때였다. 어째든 이 결과 속도(사실 속력이다. )는 뒤로 이동했을 때 음수 값으로 표현된다는 것을 알 수 있다.
(이 실험은 레이더를 360도로 돌린 경우이다. )
0.0 4.0 0.0 0.0 0.0
0.0 3.0 8.0 8.0 0.0
5.0 8.0 8.0 8.0 8.0
8.0 8.0 8.0 8.0 8.0
8.0 0.0 0.0 8.0 8.0
8.0 0.0 -1.0 -8.0 -3.0
0.0 0.0 5.0 6.0 8.0
또 한 번의 실험. 이 결과, 로봇의 속도는 정수라는 것을 알 수 있다. (레이더를 고정해서 관찰했음. )
( tick : 속도 )
-- 생략 --
14 : 8.0 15 : 7.0 16 : 5.0 17 : 3.0 18 : 1.0
19 : 0.0 20 : 0.0 21 : 0.0 22 : 0.0 23 : 0.0
-- 생략 -- 37 : 0.0 38 : -1.0 39 : -2.0 40 : -3.0
41 : -4.0 42 : -5.0 43 : -6.0 44 : -7.0 45 : -8.0
46 : -8.0 47 : -8.0 48 : -8.0 49 : -8.0 50 : -8.0
52 : -7.0 53 : -5.0 54 : -3.0 55 : -1.0 56 : 0.0
57 : 0.0
이 결과를 분석해 보자. 로봇코드에서 감속할 때는 가속도가 2 이고 가속할 때는 가속도가 1이라고 했다. 7.0 에서 5.0 으로 간 것은 분명 감속이다. 그래서 최대 감속 속도 2.0 가 나왔다. 그리고 -4.0 에서 -5.0 으로 간 것은 감속이 아니라, 가속이다. (음수일 경우에는 방향만 뒤라는 뜻이다. ) 그래서 최대 가속도 1.0 이 나왔다.
재미있는 것은 어제나 최대 가속도가 지켜지는 것은 아니라는 것이다. 그 때가 최고 속도에 이르렸을 때와 0.0 이라는 속도에 이르렸을 때이었다.
만일 로봇의 최고 속도가 정수가 아니라면 어떻게 될까.
MyFirstRobot 을 조금 고쳐 최고속도를 7.2 으로 맞추어 보았다. (이 경우는 레이더를 고정하여 관찰하였다.) 그리고 tick 까지 출력해 보았다.
-- 생략 --
14 : 7.2 15 : 7.2 16 : 6.0 17 : 4.0
18 : 3.0 19 : 1.0 20 : 0.3999999999999879 21 : 0.0
22 : 0.0 ---- 생략 ---
38 : 0.0 39 : 0.0 40 : -1.0 41 : -2.0
42 : -3.0 43 : -4.0 44 : -5.0 45 : -6.0
46 : -7.0 47 : -7.2
-- 생략 --
54 : -7.2 55 : -6.0 56 : -4.0 57 : -3.0
58 : -1.0 59 : -0.3999999999999879 60 : 0.0
최대 속도값인 7.2 앞과 뒤의 속도가 많이 궁금하다. 속도가 증간할 때는 7.0 에서 7,2 로 증가한 것을 어느 정도 이해 할 수 있는 부분이다. 7.2 에서 6.0 으로 감소한 데이터를 찾을 수 있다. 그리고 속도가 1.0 때 0.0 으로 갈 때 -1.0 에서 0.0 으로 갈 때 중간에 +- 0.399... 라는 값이 보이는 것 볼 수 있다. 이 경우에도 최대 가속도를 내지 못하고 있다.
최대 속도를 7.0 으로 두고 실험을 해 봤다. 재미 있는 결과가 나왔다.
18 : 3.0 19 : 1.0 20 : -1.0 21 : -2.0
-- 생략 --
37 : -3.0 38 : -1.0 39 : 1.0 40 : 2.0
1.0 이라는 속도에서 -1.0 으로 점프했다. 어떤 사람이 이게 어째다는 것인가 하는 의문을 품는 사람이 있을 것이다. 다시 말하지만 로보코드에서 로봇은 최대 가속도는 증가 할 때는 1.0 이고 감소 할 때는 2.0 이다. 그리고 속력이 1.0 에서 0.0 으로 간 것은 감속이고, 0.0 에서 -1.0 으로 간 것은 가속이다. 1.0 에서 -1.0 으로 바로 갔으니 좀 해석하기 애매하다. 이 경우 한 틱안에 가속과 감속이 동시에 이루어진 것이다.
최대속도를 조정했을 때, 어째거나, 상대방 로봇에게 혼란을 줄 수 있을 것 같다.
대부분 그 전의 속도를 바탕으로 다음 속도를 예측하고 그 속도를 바탕으로 앞으로의 로봇의 위치를 예측하여 그 쪽에 사격을 한다. (이 방법이 targeting 기술중 LinearTargeting 이다. ) 이 기술을 이해 기본적으로 앞의 속도를 이용하게 된다. 그런데 최대 속도가 8이 아니라면 상대로봇에게 혼란을 줄 수 있을 것이다.
물론 이 혼란은 작은 혼란이다. 로봇의 크기 36*36 에서 40*40 까지 경우에 따라 다르다. 몇 틱을 속인다고 해서, 그 반인 18 ~20 픽셀의 거리에 영향을 주기에는 아직 무리이다. 다른 기술과 같이 사용하면 적에게 혼란을 주는데 큰 도움을 줄 것 같다.