DVD 로고는 과연 모서리에 닿을까?
DVD 화면보호기를 한 번이라도 본 사람이라면 누구나 같은 생각을 합니다. 저게 모서리에 닿기는 하는 걸까, 아니면 나는 지금 시간을 버리고 있는 걸까.
이 질문에는 정확한 답이 있습니다. 확률도 평균도 아니고, 네 가지 정보로부터 미리 계산할 수 있는 답입니다. 화면의 크기, 로고의 크기, 움직이는 속도, 그리고 어디에서 출발했는가. 그 과정을 세 단계로 살펴봅니다.
1단계: 화면은 보이는 것보다 작다
실제로 튕기고 있는 것부터 봅시다. 로고는 점이 아니라 직사각형이므로 이동하는 것은 그 왼쪽 위 모서리입니다. 그리고 그 모서리는 화면의 오른쪽 끝에 결코 닿을 수 없습니다. 로고의 나머지가 가로막고 있기 때문입니다. 움직일 수 있는 여지는 화면 빼기 로고입니다.
여기에 속도가 더해집니다. 로고는 프레임마다 정해진 픽셀 수만큼 이동하는데, 4픽셀이 전형적입니다. 따라서 그 여지 안에서 4픽셀마다의 자리에만 놓일 수 있습니다. 그 사이의 픽셀들은 드문 것이 아닙니다. 도달 자체가 불가능합니다.
그것들을 지우면 그림이 완전히 달라집니다. 아래 왼쪽에서 모든 교차점은 픽셀이지만, 로고가 놓일 수 있는 것은 청록색 점뿐입니다. 오른쪽은 그 청록색 점만 따로 떼어 낸 것입니다.
남는 것이 이 문제가 실제로 살고 있는 격자이며, 그 크기는 이것뿐입니다.
- X = (화면 너비 − 로고 너비) ÷ 속도
- Y = (화면 높이 − 로고 높이) ÷ 속도
그러므로 3840 × 2160 화면에서 176 × 80 로고를 프레임당 4픽셀로 움직이는 것은 400만 픽셀짜리 문제가 아닙니다. 916 × 520짜리 문제입니다.
축약은 이것으로 끝입니다. 어떤 화면이든, 어떤 로고든, 어떤 속도든 X 곱하기 Y 격자 위를 한 칸씩 대각선으로 나아가는 하나의 점으로 귀결됩니다. 이 두 숫자가 이후의 모든 것을 결정합니다.
전제 하나를 먼저 밝혀 둡니다. 여기서의 이야기는 모두 로고가 진짜 대각선을 따라 움직인다는 것, 즉 아래로 한 픽셀 갈 때마다 옆으로도 한 픽셀 간다는 것을 전제합니다. DVD 플레이어의 원래 화면보호기가 그렇게 움직였고, 아래에서 분석할 영상도 그렇게 움직입니다. 다른 각도로 출발시키면 격자는 무너지고, 이 페이지의 깔끔한 결과들도 함께 무너집니다.
2단계: 단 하나의 숫자가 애초에 일어날지를 결정한다
이제 사람들이 의외로 여기는 부분입니다. 언젠가 모서리에 닿을지 여부는 얼마나 오래 기다리느냐와 아무 상관이 없습니다. 첫 프레임 이전에 이미 결판나 있습니다.
이유는 이렇습니다. 모서리는 잠시 잊고 가장자리만 보세요. X 곱하기 Y 격자를 대각선으로 나아갈 때 로고는 X프레임마다 좌우 어느 한 가장자리에, Y프레임마다 위아래 어느 한 가장자리에 시계처럼 정확히 닿습니다. 튕김이 이 리듬을 흐트러뜨리는 일은 없습니다. 튕김이 곧 리듬이기 때문입니다. 가장자리에 닿는다는 것이 바로 그것입니다.
모서리란 두 알람이 같은 프레임에 울리는 것에 지나지 않습니다.
이로써 문제는 기하의 문제이기를 그만두고 반복되는 두 알람의 문제가 됩니다. 각각이 주기의 어느 지점에 있는지가 주어졌을 때, 둘이 언젠가 함께 울릴까요? 두 알람이 겹칠 수 있는 것은 첫 울림 사이의 간격이 두 주기가 공유하는 것의 배수일 때뿐입니다. 그리고 X와 Y가 공유하는 것이 바로 그 최대공약수입니다.
판정은 이것이 전부입니다. gcd(X, Y)를 구합니다. 로고가 오른쪽 아래로 출발했다면 그 약수가 시작 좌표의 차를 나누어떨어뜨릴 때에만 모서리에 닿습니다. 오른쪽 위로 출발했다면 합을 나누어떨어뜨릴 때만입니다. 그렇지 않으면 두 알람은 영원히 어긋난 채이고, 더 오래 돌린다고 리듬이 고쳐지지는 않습니다.
같은 12 × 8 격자 위, 바로 옆에 붙은 두 시작 칸입니다. gcd(12, 8) = 4이지요. (0, 4)에서는 차가 4로 깔끔한 배수여서 알람이 맞아떨어집니다. (1, 4)에서는 차가 3이고, 결코 맞아떨어지지 않습니다.
여기서 눈으로 바로 적용할 수 있는 규칙이 나옵니다. 대략 최대공약수당 한 칸의 시작 위치가 성공합니다.
- gcd = 1
모든 시작 위치가 모서리에 도달합니다. 하나도 빠짐없이, 확실하게.
- gcd = 2
둘 중 하나. 절반은 가망이 없습니다.
- gcd = 3
셋 중 하나.
- gcd = 4
넷 중 하나.
- gcd = 6
여섯 중 하나로 17 % 미만입니다.
- gcd = 12
열둘 중 하나. 91 %가 넘는 경우는 어디에도 이르지 못합니다.
그리고 실제로 체감됩니다. 1단계의 916 × 520 격자는 최대공약수가 4이므로, 그 설정에서는 시작 위치의 4분의 3이 로고가 한 번 움직이기도 전에 이미 가망을 잃습니다.
그러니 한 시간 동안 화면보호기를 들여다봤는데 아무 일도 없었다면, 운이 나쁜 게 아닐 수도 있습니다. 수학적으로 아무것도 만들어 낼 수 없는 고리를 보고 있는 것일지도 모릅니다.
3단계: 모서리는 모든 것을 뒤집는다
사실이 하나 더 남았고, 결말은 여기에 달려 있습니다.
보통의 튕김은 운동의 절반만 바꿉니다. 오른쪽 아래로 가다가 오른쪽 벽에 부딪히면 수평 부호가 뒤집혀 로고는 이제 왼쪽 아래로 향합니다. 수직 절반은 조금도 건드려지지 않은 채 이어지므로, 로고는 여전히 지나지 않은 영역을 새로 밟아 나갑니다.
모서리는 두 부호를 동시에 뒤집습니다. 오른쪽 아래는 왼쪽 위가 됩니다. 새로운 방향이 아니라, 도착할 때의 방향과 정확히 반대입니다. 그리고 속도의 두 성분 부호를 모두 뒤집는 것은 되감기를 누르는 것과 같습니다.
그리고 실제로 정확히 그렇게 됩니다. 갈 때 지난 칸을 올 때 역순으로 다시 지납니다. 했던 튕김을 모두 거꾸로 다시 합니다. 궤적은 회문입니다.
그러므로 튕기는 로고는 시간만 충분히 주면 결국 모든 곳을 훑고 다니는 부산한 선이 아닙니다. 양 끝에 되돌림 지점을 하나씩 가진 닫힌 왕복 회로이며, 그 되돌림 지점이 바로 모서리입니다.
이 이야기는 마지막에 다시 꺼내겠습니다. 네 모서리 문제를 완전히 결판내는 것이 바로 이 사실이기 때문입니다.
적중 사이의 간격
2단계의 두 알람은 모서리에 닿는지만 알려 주는 것이 아닙니다. 조금만 더 밀고 나가면 얼마나 자주인지도 알려 줍니다.
한 번 함께 울린 뒤, 다시 함께 울릴 수 있는 가장 이른 시점은 언제일까요? X 주기가 정수 번 지나고, 동시에 Y 주기도 정수 번 지나기 전에는 불가능합니다. X와 Y 둘 다의 배수가 되는 첫 순간이란 정의 그대로 최소공배수입니다. 더 계산할 것은 없습니다.
- 성공하는 시작 위치라면 모서리 적중은 lcm(X, Y)프레임마다, 한 치의 어긋남도 없이 정확히 찾아옵니다
- 그리고 모서리에 닿든 닿지 않든 모든 궤적은 2 × lcm(X, Y)프레임마다 스스로 닫힙니다. 되돌림 지점까지 갔다가 돌아오는, 3단계에서 말한 그대로입니다
모두가 공유하는 4K 60fps 영상을 봅시다. 그 로고는 가로로 317개, 세로로 186개의 정지 위치를 가지므로 X = 316, Y = 185입니다. 이 둘은 서로소, 즉 최대공약수가 1이므로 2단계에 따라 그 화면의 어떤 시작 위치든 성공합니다. 그리고 lcm(316, 185)는 단순히 316 × 185 = 58,460프레임, 곧 16분 14초와 20프레임입니다.
이 예측은 검증할 수 있고, 실제로 들어맞습니다. 그 영상에서 첫 모서리 적중은 13:29:38에, 두 번째는 29:43:58에 일어납니다. 분·초·프레임 표기입니다. 확인해 보았습니다. 48,578프레임과 107,038프레임, 그 차이는 정확히 58,460으로 프레임 단위까지 일치합니다.
해상도가 거의 상관없는 이유
「16분 14초」라는 숫자가 마치 4K 60fps에서 따라 나오는 것처럼 되풀이되는 것을 보게 됩니다. 그렇지 않습니다. 그 답이 실제로 무엇으로 이루어져 있는지 보세요.
lcm(X, Y) = X × Y ÷ gcd(X, Y)
한 번의 모서리 적중에서 다음 적중까지의 대기 시간(프레임).
해상도는 X와 Y를 움직이되 부드럽게 움직입니다. 화면을 두 배로 하면 각각도 대략 두 배가 됩니다. 그런데 gcd는 분모에 있고, gcd는 크기가 아닙니다. 어떤 수들이 인수를 공유하느냐는 우연이며, 겉보기에 똑같은 두 설정 사이에서 1에서 127로 뛸 수 있습니다.
그 효과가 이렇습니다. 같은 284 × 128 로고를 같은 프레임당 4픽셀로 두고 화면만 바꿨습니다.
- 1080p
격자 409 × 238. 공유하는 것이 없으므로 최소공배수는 409 × 238 그대로. 모서리 적중은 27분마다.
- 4K
격자 889 × 508. 127이라는 인수를 공유해 그것이 그대로 약분됩니다. 59초마다.
픽셀은 네 배인데 대기 시간은 27분의 1이 되었습니다. 흔히 이야기되는 것과 정반대이며, 4K가 더 크다는 사실과는 아무 관계가 없습니다. 889와 508이 127을 공유하고, 409와 238은 아무것도 공유하지 않기 때문입니다.
로고 크기도 똑같은 일을, 똑같이 거칠게 일으킵니다. 화면을 3840 × 2160, 속도를 프레임당 4픽셀로 고정하고 로고의 실제 비율을 유지한 채 크기만 바꿔 봅니다.
- 로고 176 px
격자 916 × 520. 모서리 적중은 33분 5초마다, 단 넷 중 하나의 시작 위치에서만.
- 로고 204 px
격자 909 × 517. 2.18시간마다, 대신 어떤 시작 위치에서든.
- 로고 256 px
격자 896 × 511. 18분 10초까지 내려가며, 일곱 중 하나의 시작 위치에서.
- 로고 284 px
격자 889 × 508로 127이라는 인수를 공유합니다. 59초마다.
- 로고 292 px
격자 887 × 507로 서로소. 다시 2.08시간으로 올라갑니다.
- 로고 300 px
격자 885 × 506. 2.07시간마다. 추세는 없고 튑니다.
같은 화면, 같은 프레임 속도, 같은 속력입니다. 로고 너비 8픽셀 차이가 1분 대기와 2시간 대기를 가릅니다. 127배의 도약이며, 이유는 889와 508이 127이라는 인수를 공유하는 반면 887과 507은 아무것도 공유하지 않기 때문입니다. 그리고 수열에 추세가 없다는 점에 주목하세요. 있을 이유도 없습니다. 따라가고 있는 것은 치수가 아니라 약수이니까요.
그러므로 답을 지배하는 것은 무엇의 크기도 아닙니다. 어떤 설정이든 하나만 건드리면 산술은 처음부터 다시 짜입니다.
그렇다면 네 모서리를 모두 찍기까지는?
이로써 사람들이 정말로 답을 원하는 질문에 이릅니다. 모서리 하나에 16분이 걸린다면 넷이면 한 시간쯤이어야 하지 않을까요?
아닙니다. 당신은 그것을 결코 보지 못합니다. 한 시간이 지나도, 1년이 지나도, 우주의 열죽음까지 돌려 놓아도 마찬가지입니다.
이유는 3단계가 이미 주었습니다. 모서리는 로고를 꺾는 것이 아니라 반전시킵니다. 그래서 로고는 자기가 온 길을 그대로 되짚어 두 번째 모서리에 이르고, 다시 반전해 돌아옵니다. 이것은 되돌림 지점이 정확히 둘인 닫힌 회로입니다. 나머지 두 모서리는 멀리 있는 것도, 가능성이 낮은 것도 아닙니다. 그저 경로 위에 없으며, 이 체계의 어떤 것도 그것들을 경로에 올려놓을 수 없습니다.
어느 둘이 될지도 운이 아닙니다. 여기 있는 다른 모든 것과 마찬가지로, 시작 칸에서 이미 정해져 있었습니다.
이것은 가정하지 않고 확인했습니다. 281,250가지 시작 조건, 즉 26×26까지의 모든 격자와 두 대각선 방향과 모든 시작 칸을 시뮬레이션한 결과는 매번 예외 없이 모서리 2개 아니면 0개였습니다. 1개나 3개나 4개가 나온 실행은 단 한 번도 없었습니다. 그중 205,342회가 두 모서리에 도달했고 75,908회는 하나도 닿지 못했습니다.
그러므로 「네 모서리를 모두 찍기까지 얼마나?」에 대한 정직한 답은 애초에 숫자가 아닙니다. 기다릴 사건 자체가 없으므로 대기 시간도 없습니다. 그리고 그것은 로고가 첫 번째 튕김을 마치기도 전에 정해져 있었습니다.
직접 해 보기
저희 시뮬레이터는 튕김의 감각을 잡는 가장 빠른 방법이지만, 정직하게 밝혀 둘 단서가 하나 있습니다. 각 로고는 고정된 45°가 아니라 25°에서 65° 사이의 무작위 각도로 출발합니다. 이는 의도한 선택으로, 보기에 더 좋고 궤적이 단조로워지지 않기 때문입니다. 다만 그만큼 그곳에서의 모서리 적중은 위에서 본 깔끔한 격자 산술이 아니라 나름의 논리를 따릅니다. 그 깔끔한 산술이 들어맞는 것은 진짜 대각선의 경우, 곧 원래의 DVD 플레이어와 저희가 측정한 영상 쪽입니다.
대신 할 수 있는 일은 이 글이 다루는 모든 변수를 바꿔 가며 튕김이 어떻게 달라지는지 보는 것입니다. 속도와 크기를 조절하고, 오브젝트 수를 늘려 여러 로고를 서로 다른 궤적으로 동시에 보내 보고, 화면 비율을 16:9와 9:16과 1:1 사이에서 바꿔 보세요. 각각이 모양이 다른 문제입니다.
그런 다음 GIF로, 1080p까지의 MP4나 WebM으로, 또는 인터넷 연결 없이 영원히 반복되는 독립 실행 HTML 파일로 내보낼 수 있습니다. 하나를 켜 둔 채 직접 모서리 적중을 지켜보고 싶다면 마지막 방식이 좋습니다.
워터마크 없음, 계정 불필요, 비용 없음. 이미지는 사용자의 브라우저에서 처리되며 어디로도 업로드되지 않습니다.
자주 묻는 질문
DVD 로고가 실제로 모서리에 닿는 일이 있나요?
있습니다. 그리고 그것은 로고가 움직이기 시작하는 순간에 이미 결정됩니다. 화면과 로고와 속도가 정해지면, 어떤 시작 위치는 모서리에 도달하거나 영원히 도달하지 못하거나 둘 중 하나입니다. 세 번째 결과는 없고 운이 끼어들 여지도 없습니다. 판정은 산술입니다. 격자의 너비와 높이의 최대공약수를 구합니다. 오른쪽 아래로 출발한 로고는 그 약수가 시작 좌표의 차를 나누어떨어뜨릴 때에만 모서리에 도달합니다. 오른쪽 위로 출발했다면 합을 나누어떨어뜨릴 때만입니다. 대략 최대공약수당 한 칸의 시작 위치가 조건을 만족합니다.
DVD 로고가 모서리에 닿기까지 얼마나 걸리나요?
화면을 로고가 실제로 차지할 수 있는 위치의 격자로 줄여 보세요. 그 격자가 가로 X, 세로 Y라면 모서리 적중은 X와 Y의 최소공배수프레임마다 일어납니다. 널리 공유되는 4K 60fps 영상에서는 58,460프레임, 즉 적중 사이의 간격이 16분 14초입니다. 이 숫자는 그 영상에 고유한 값이지 4K 일반의 성질이 아닙니다.
화면 해상도가 모서리 적중까지 걸리는 시간을 결정하나요?
아닙니다. 같은 로고를 같은 속도로 양쪽에서 돌려 보았더니 1080p 화면은 27분마다, 4K 화면은 59초마다 모서리에 닿았습니다. 픽셀은 네 배인데 대기 시간은 27분의 1입니다. 시간을 결정하는 것은 격자의 너비와 높이가 인수를 공유하는지 여부이지 픽셀이 몇 개인지가 아닙니다. 그러므로 단순히 「4K 60fps」라고만 말하는 답은 4K의 성질이 아니라 특정한 영상 한 편을 설명하고 있을 뿐입니다.
DVD 로고가 네 모서리를 모두 찍을 수 있나요?
아닙니다. 가능성이 낮아서가 아니라 불가능합니다. 로고는 모서리에 닿는 순간 자신이 온 경로를 그대로 되짚어 반대로 돌아가고, 그 경로를 따라 두 번째 모서리에 이르러 다시 반전하며, 이를 영원히 반복합니다. 경로는 두 모서리 사이의 닫힌 고리이므로 나머지 두 모서리는 그 시작점에서 결코 닿을 수 없습니다. 더 기다린다고 달라지지 않습니다.
DVD 로고는 몇 개의 모서리에 닿을 수 있나요?
정확히 두 개이거나 아예 없습니다. 26×26까지의 모든 격자에 대해 두 대각선 방향 모두에서 281,250가지 시작 조건을 시뮬레이션했지만, 하나·셋·넷이라는 결과는 단 한 번도 나오지 않았습니다.
모서리 적중은 무작위인가요?
전혀 아닙니다. 완전히 결정론적입니다. 화면과 로고와 속도와 시작 위치를 알면 모서리에 언젠가 닿을지, 대기 시간은 얼마인지, 어느 두 모서리가 될지를 미리 계산할 수 있습니다. 예측 불가능해 보이는 것은 튕김이 만들어 내는 착각입니다.