빨간 테두리가 정확히 언제 켜지는지 한 번 확인해 두고 싶었다. 면적 숫자와 통로 판정도 같은 겹침 판정을 쓰기 때문에, 경계에서 틀리면 그쪽 숫자까지 같이 틀린다.
300×300cm 방에 책상(105×50)을 (20, 20)에 두고 옷장만 옮겨 봤다. 책상 오른쪽 끝이 x=125라서 옷장 왼쪽 끝을 125에 두면 딱 붙고, 124면 1cm 겹치고, 126이면 1cm 떨어진다. 위아래로 붙인 경우와 모서리만 닿은 경우, 옷장을 90도 돌려 세운 경우까지 8가지를 넣었다.
무엇을 겹쳤다고 보나
가로로도 세로로도 조금이라도 겹쳐야 겹친 것으로 본다. 끝이 같은 선 위에 있으면 닿기만 한 것이라 빨간 테두리가 안 켜진다. 겹친 넓이는 겹친 가로 길이에 겹친 세로 길이를 곱한다.
8가지 결과
8가지 모두 맞게 나왔다(8/8). 붙인 세 경우는 겹친 넓이가 0이었다. 1cm 겹친 경우는 가로로 겹쳤을 때 50㎠, 세로로 겹쳤을 때 100㎠로 차이가 있었는데, 겹친 띠 두께는 같은 1cm여도 길이가 다르기 때문이다. 앞의 것은 책상 깊이 50cm만큼, 뒤의 것은 옷장 폭 100cm만큼 이어진다.
이 부분은 예전 플래너도 맞게 계산하고 있었다. 예전 겹침 식을 그대로 가져와 같은 배치에 넣어 봐도 8가지가 다 맞았다. 고친 건 면적 쪽이다. 예전에는 겹친 부분을 두 번 더해서 보여 줬는데, 그 얘기는 실험 004에 따로 적었다.
알아 둘 것
- 높이는 보지 않는다. 책상 밑에 밀어 넣은 의자는 실제로 문제가 없어도 겹침으로 나온다.
- 플래너 입력 칸은 1cm 단위다. 0.5cm 같은 값은 JSON 파일로 불러올 때만 들어간다.
- 가구는 바깥 테두리를 감싼 사각형으로만 그린다. 둥근 모서리나 다리 사이 빈 곳은 반영하지 않는다.
데이터
| 배치 | 옷장 (x, y) 가로×세로 | 정답 | 새 계산 | 겹친 넓이 ㎠ 정답 / 새 계산 | 떨어진 거리 cm 정답 / 새 계산 | 예전 계산 | 결과 |
|---|---|---|---|---|---|---|---|
| x방향으로 딱 맞닿음 | 옷장 (125, 20) 100×60 | 아님 | 아님 | 0 / 0 | 0 / 0 | 아님 | PASS |
| x방향으로 1cm 겹침 | 옷장 (124, 20) 100×60 | 겹침 | 겹침 | 50 / 50 | 0 / 0 | 겹침 | PASS |
| x방향으로 1cm 떨어짐 | 옷장 (126, 20) 100×60 | 아님 | 아님 | 0 / 0 | 1 / 1 | 아님 | PASS |
| y방향으로 딱 맞닿음 | 옷장 (20, 70) 100×60 | 아님 | 아님 | 0 / 0 | 0 / 0 | 아님 | PASS |
| y방향으로 1cm 겹침 | 옷장 (20, 69) 100×60 | 겹침 | 겹침 | 100 / 100 | 0 / 0 | 겹침 | PASS |
| 모서리만 맞닿음 | 옷장 (125, 70) 100×60 | 아님 | 아님 | 0 / 0 | 0 / 0 | 아님 | PASS |
| 90° 돌린 옷장이 맞닿음 | 옷장 (125, 20) 60×100 | 아님 | 아님 | 0 / 0 | 0 / 0 | 아님 | PASS |
| 90° 돌린 옷장이 1cm 겹침 | 옷장 (124, 20) 60×100 | 겹침 | 겹침 | 50 / 50 | 0 / 0 | 겹침 | PASS |
정답은 어떻게 구했나. 플래너 코드와 따로 짠 Python 프로그램으로 다시 계산했다. 겹침은 가로 구간과 세로 구간을 하나씩 비교했고, 두 가구가 덮은 넓이는 방을 1cm 칸으로 나눠 직접 셌다. 좌표가 모두 cm 단위 정수라 칸을 센 값이 그대로 정답이다.
플래너에서 열기
사이트 저장소에서 아래 세 줄을 실행하면 이 파일들이 다시 만들어진다. 계산 코드를 고치고 이 파일을 다시 만들지 않으면 사이트가 만들어지지 않게 해 두어서, 글의 숫자와 플래너 계산이 어긋난 채로 올라가지 않는다.
node tools/run_experiments.mjs
python tools/verify_experiments.py