눈으로 정하고 나중에 근거를 붙였다
브라질에서 내가 어디 있는지 몰랐다. 지도를 하나 더 붙였고, 숫자를 두 번 꺼냈다.
세계일주 기록 사이트에는 오른쪽 아래에 작은 지구본이 떠 있다. 지금 보는 도시가 세계 어디쯤인지 알려 주는 물건이다.
브라질에서 그게 쓸모가 없었다.
도시를 보면 카메라가 바짝 붙는다. 그 높이에서 화면에 담기는 건 528×330km. 브라질은 그 스무 배쯤 된다. 그런데 지구본 속 브라질은 엄지손톱이고 내 위치는 그 안의 점이다. "세계 어디"는 알겠는데 "브라질 어디"를 모른다.
그래서 나라 하나만 그리는 작은 지도를 옆에 하나 더 붙였다.
언제 띄울까
처음엔 "큰 나라에서만"이라고 생각했다. 마침 카메라 코드에 그런 목록이 이미 있었다. 다닌 범위가 1,000km를 넘는 나라 — 인도, 브라질, 칠레, 페루, 콜롬비아, 아르헨티나, 볼리비아.
그걸 안 빌렸다. 베트남에서도 안 보이고 이탈리아에서도 안 보이는데 둘 다 목록에 없다. 나라가 큰 게 문제가 아니라 화면이 작은 게 문제였다.
그래서 조건을 목록 대신 계산으로 뒀다. 화면에 담기는 실제 거리를 줌에서 구하고, 지금 서 있는 자리에서 국경까지의 거리와 비교한다.
need = max((reach.w * 2) / view.w, (reach.h * 2) / view.h);
뜬다 = need > 1; // 이미 떠 있으면 1/1.05 — 경계에서 깜빡이지 않게나라의 중심이 아니라 지금 서 있는 자리에서 재는 게 요점이다. 카메라가 그 도시를 화면 한가운데 두니까.
재 보니 예외가 하나였다
여정에 정거장이 155개, 나라가 31개다. 전부 돌려 봤다.
154곳에서 나라가 화면보다 컸다. 안 걸린 건 브뤼셀 하나, 0.94배.
그리고 두 번째로 작은 값이 1.22(부다페스트)다. 0.94와 1.22 사이가 비어 있으니 임계값을 1.0에 둘지 1.1에 둘지 고민할 일이 없었다. 위 그림에서 선을 옮겨 봐도 브뤼셀만 왔다 갔다 한다. 정한 게 아니라 정할 게 없었다.
과장은 하지 말자. 그 빈 구간은 전체 범위의 1.2%고, 1.3까지 올리면 프라하와 아부다비가 따라 빠져 다섯 곳이 된다.
155곳 중 154곳이면 사실상 "항상"이다. 그래도 계산으로 남겨 뒀다. 규칙이 자기가 왜 그런지 설명하고, 나중에 카메라 줌이 바뀌면 조건이 알아서 따라오기 때문이다. 브뤼셀 한 곳이 그 규칙이 살아 있다는 증거다.
104px은 사실 눈대중이었다
폰에서 이 지도를 104px 정사각으로 잡았다.
근거를 대라면 댈 수 있다. 폰에서 기존 지구본이 140×70이니 넓이가 9,800이고, 104 정사각은 10,816이다. 거의 같다. 그래서 화면 양쪽 구석의 두 지도가 같은 무게로 앉는다.
순서가 반대다. 104는 눈으로 보고 정했다. 넓이가 비슷하다는 건 나중에 알아차렸고, 알아차리고 나서 근거로 삼았다.
넓이가 진짜 근거였다면 104가 아니라 99여야 한다. 9,801이니까.
앞 절에서는 숫자가 판단을 없앴다. 여기서는 숫자가 판단을 가렸다.
그 크기에서는 모양만 보인다
104px에서 나라 모양은 읽힌다. 경로는 아니다.
브라질 26.6px, 칠레 26.2px, 이탈리아 19.3px. 이만한 얼룩으로는 어디를 어떤 순서로 다녔는지 알 수 없다. 그래서 경로는 열었을 때 본다. 열면 358px, 브라질 경로는 91.6px가 된다.
여기에도 예외가 있다. 인도를 눌러 보면 같은 104px에서 경로가 55.5px다. 페루 58.3, 콜롬비아 55.9. 이 나라들은 쉬는 상태에서도 경로가 읽힌다. 정거장이 한쪽에 몰린 나라에서 안 읽히는 것이지, 작은 지도에서 언제나 안 읽히는 게 아니다.
붙이고 나서 바뀐 것
화면 사각형을 뺐다가 다시 넣었다. 인셋 안에 "지금 화면이 이만큼"을 그리는 사각형인데, 기획 때 "지름 4px밖에 안 되니 빼자"고 적었다. 그 계산이 틀렸다. 목업 지구본의 세로를 나라의 가로와 견줬고, 지름 자리에 반지름을 넣었다. 실제로는 200px에서 22×12px. 작지만 분명히 보인다. 숫자 하나 틀려서 멀쩡한 기능을 지울 뻔했다.
"인셋이 뜨면 지구본의 주황 점을 비운다"는 폐기했다. 글로는 말이 됐는데, 점을 빼니 그 자리에 배경색 구멍이 남아서 라이트 테마에서 흰 점으로 보였다. "왜 갑자기 흰 점이 생기냐"는 말을 듣고 되돌렸다.
손을 얹는 지점의 기준을 절대에서 상대로 바꿨다. 전에는 지도에 손을 올리는 순간 표시가 엉뚱한 데로 순간이동했다. 지구본에서는 석 달을 건너뛰기도 했다. 지금은 손이 닿은 곳을 현위치로 잡고 거기서 좌우로 걷는다. 기획서에 없던 항목이고, 두 지도 다 바꿨다.
ISO 코드 라벨도 뺐다. 104px에서 읽히게 키우면 420px로 열었을 때 간판이 된다.
아직 안 된 것
104px은 여전히 눈으로만 검증했다. 폰에서 보고 그대로 두기로 했으니 보기에는 문제가 없다. 다만 처음에 눈으로 정한 값을 나중에 눈으로 확인한 것이라, 이 숫자는 아직 한 번도 재인 적이 없다. 크기 슬라이더를 안 붙여서 다른 값과 나란히 놓고 본 적도 없다.
손을 따라 걷는 방향이 미정이다. 손의 가로 위치를 경로 위 거리로 읽으면 여정을 빠짐없이 훑을 수 있다. 대신 왔던 길을 되짚는 구간에서는 손은 오른쪽으로 가는데 표시가 지도에서 왼쪽으로 돌아온다. 나라 안 구간 124개 중 29개가 그렇다. 이탈리아가 최악인데 토리노를 네 번 들르며 사방으로 뻗어서, 손을 한쪽으로 미는 동안 표시가 제노바에서 브라로, 토리노로, 친퀘테레로 튄다.
대안은 손에서 제일 가까운 경로 위의 점을 잡는 것이다. 방향은 늘 맞지만, 손이 한 높이를 쓸면 세로로 먼 구간이 통째로 빠진다. 둘 다는 안 된다. 지금은 빠짐없이 훑는 쪽을 택해 뒀고, 쓰다가 거슬리면 두 지도를 같이 되돌릴 생각이다. 한쪽만 바꾸면 그게 또 불일치다.
브뤼셀에서는 여전히 안 뜬다. 규칙대로다. 다만 브뤼셀에 서 있는 사람에게 "당신 나라는 화면에 다 들어오니 필요 없습니다"가 납득되는 말인지는 모르겠다. 155분의 1이라 일단 두고 본다.
끝