캐릭터는 멈췄는데, 게임패드 스틱은 어느 쪽으로 기울었을까요?

작은 입력을 무시하는 가상 규칙을 두 축에 따로 적용해요. 스틱을 얼마나 기울였는지 알아도, 멈춘 출력에서 방향을 하나로 정할 수 있을까요? 가능한 방향이 이어진 구간과 네 점으로 갈리는 경계를 찾습니다.

창빛이 비치는 목재 책상 위 두 아날로그 스틱이 달린 검은 게임패드와 컵·닫힌 노트

이미지: AI 생성 · 수학 이야기

손잡이를 기울였는데 게임 속 캐릭터는 멈춰 있어요. 움직이지 않는 화면만 보고 손잡이를 어느 방향으로 기울였는지 알아낼 수 있을까요? 기울인 거리를 정확히 알고 있어도 방향이 하나로 정해지지 않을 수 있어요.

장치의 실제 측정 대신 두 좌표로 된 자체 모형을 정해요. 손잡이의 가운데가 원점이고, 허용 위치는 반지름1인 원판이에요. 현재 손잡이 위치 (x,y)는 가운데서 거리가 r인 것으로 알려져 있어요. r은 양수이며, 기울인 방향만 몰라요. 가로 문턱값 a와 세로 문턱값 b는 미리 정해져 있어요.

0<a≤b<1,0<r≤1,x2+y2=r2.0<a\le b<1,\qquad 0<r\le1,\qquad x^2+y^2=r^2.

각 좌표는 자기 문턱 이하이면0으로 기록돼요. 문턱을 넘는 부분만0부터1까지 다시 늘려 기록해요. 문턱과 정확히 같아도0으로 기록하는 규칙이에요. 손잡이 한쪽 좌표를 t, 그 문턱을 d라 쓰면 식은 다음과 같아요.

fd(t)={0,∣t∣≤d,sgn⁡(t)∣t∣−d1−d,d<∣t∣≤1,u=fa(x),v=fb(y).\begin{gathered} f_d(t)= \begin{cases} 0,&|t|\le d,\\ \operatorname{sgn}(t)\dfrac{|t|-d}{1-d},&d<|t|\le1, \end{cases}\\ u=f_a(x),\qquad v=f_b(y). \end{gathered}

sgn(t)는 양수일 때1, 음수일 때−1입니다. 두 축을 합친 뒤 벡터 길이를 다시 줄이지 않아요. 기록은 반올림하지 않은 정확한 값이고, 장치의 흔들림·보정 오차·이전 움직임의 기억도 넣지 않아요.

모든 a,b,r와 출력 (u,v)에서 가능한 손잡이 방향을 전부 구해 볼까요? 방향이 없는 경우, 하나인 경우, 여럿인 경우를 구분해요. 특히 (u,v)=(0,0)일 때 가능한 방향들이 끊김 없이 이어지는 부분은 몇 개인가? 가로 문턱3/10, 세로 문턱2/5에서 r=1/5,7/20,9/20,1/2,3/5를 차례로 비교해 볼까요? 이 규칙은 교육용으로 정의한 것이며 특정 게임이나 Godot 함수가 그대로 작동한다는 주장은 아니에요.

먼저 출력의 어느 좌표가0인지 나눠요. |u| 또는 |v|가1보다 크면 현재 모형에서 불가능해요. 나머지 출력에서는0이 아닌 좌표가 오히려 복원하기 쉬워요. 예를 들어 u≠0이면 x의 부호가 u와 같고, 크기도 다음처럼 정해져요.

X=sgn⁡(u)[a+(1−a)∣u∣].X=\operatorname{sgn}(u)\bigl[a+(1-a)|u|\bigr].

반대로 u=0이면 x 하나가 정해지는 것이 아니라 −a≤x≤a가 남아요. v에서도 같은 방식으로 b를 사용해요. 이렇게 얻은 좌표 조건에 알려진 거리 r을 함께 적용해야 해요.

두 출력이 모두0이 아니면 각각 복원한 X,Y가 유일한 후보예요. X²+Y²=r²이면 그 한 위치가 답이고, 아니면 가능한 위치가 없어요. 좌표의 부호는 이미 출력에 남아 있으므로, 여기서 임의로 네 부호를 붙이지 않아요.

출력이 한 축에서만0이면 다른 축 좌표를 먼저 복원해요. 그 고정 좌표를 X,0인 축의 문턱을 d, 모르는 좌표를 z라 해 볼까요?

R=r2−X2,z2=R,∣z∣≤d,R<0 또는 R>d2: 없음,R=0: z=0,0<R≤d2: z=±R.\begin{gathered} R=r^2-X^2,\qquad z^2=R,\qquad |z|\le d,\\ R<0\text{ 또는 }R>d^2:\ \text{없음},\\ R=0:\ z=0,\qquad 0<R\le d^2:\ z=\pm\sqrt R. \end{gathered}

제곱근이 실수라는 조건만 확인하면 부족해요. 문턱보다 큰 z는0으로 기록되지 않기 때문이에요. 반대로 이 범위의 모든 z는 거리와 문턱을 만족하며 실제로 같은 출력을 만들어요. R=d²인 두 끝점도0의 규칙에 포함돼요.

이제 멈춘 출력 (0,0)을 볼까요? 가능한 위치는 원 x²+y²=r²와 직사각형 −a≤x≤a,−b≤y≤b의 공통부분이에요. a와 b가 같을 필요는 없어요. 제1사분면에서는 x를 고르면 y가 정해지며, 가능한 x의 구간을 정확히 쓸 수 있어요.

L=max⁡(0,r2−b2),U=min⁡(a,r),L≤x≤U,y=r2−x2.\begin{gathered} L=\sqrt{\max(0,r^2-b^2)},\qquad U=\min(a,r),\\ L\le x\le U,\qquad y=\sqrt{r^2-x^2}. \end{gathered}

다른 사분면은 이 점들의 부호를 바꾸면 얻어요. 축 위에서 같은 점이 두 번 쓰이면 한 위치로 세어요. 이 구간이 비어 있지 않을 조건은 r²≤a²+b²입니다. 앞의 식은 필요한 조건뿐 아니라 모든 가능한 위치를 만드는 방법이에요.

r²<a²+b²이면 L<U여서 구간에 무수히 많은 x가 있고, 서로 다른 위치를 만들어요. 반면 r²=a²+b²에서는 |x|≤a,|y|≤b가 모두 최대여야 하므로 (±a,±b) 네 꼭짓점만 남아요. r²>a²+b²이면 원 위의 어느 점도 직사각형 안에 있지 않아요. 멈춘 출력에 대한 답이 늘 ‘많은 방향’인 것은 아니에요.

방향들이 어떻게 이어지는지도 분류하자. 아래에서 닫힌 호는 양 끝을 포함하는 원의 한 부분이며, 한 호 안에서는 출력을0으로 유지하면서 손잡이를 연속으로 움직일 수 있어요. 별개의 호 사이에서는 그렇게 이어 갈 수 없어요.

알려진 거리 r 영 출력의 가능한 방향 전체
0<r≤a 원 전체가 한 바퀴 이어져요.
a<r≤b 위쪽과 아래쪽의 두 닫힌 호예요.
b<r<√(a²+b²) 사분면마다 하나씩 네 닫힌 호예요.
r=√(a²+b²) 직사각형 꼭짓점의 네 방향만 남아요.
r>√(a²+b²) 없어요.

이 표도 처음의 r≤1 범위 안에서만 읽어요. a=b이면 두 번째 행의 구간은 비어 있어요. √(a²+b²)>1이면 마지막 두 경계는 허용 손잡이 거리에서 나오지 않아요.

첫 행에서는 원 전체가 직사각형 안에 있어요. 둘째 행은 세로 제한이 아직 영향을 주지 않고 가로 제한만 원의 좌우 부분을 지워요. y=±√(r²−x²),−a≤x≤a로 위아래 호를 모두 만들 수 있어요. r>a이므로 y는0이 될 수 없어 두 호가 이어지지 않아요. r=b에서도 위·아래 꼭대기는 허용되어 각 호가 둘로 갈라지지 않아요.

셋째 행에서는 세로 제한도 영향을 주어 위·아래 꼭대기가 빠져요. L>0이고 U=a이며 L<U라서 각 사분면에 한 호가 남아요. x를 L부터 U까지 계속 바꾸는 식이 그 호 전체를 지나가요. 사분면을 바꾸는 연속 이동은 x=0 또는 y=0을 거쳐야 하지만 지금은 두 축 모두 허용되지 않아요. 그래서 네 호는 서로 분리되어 있어요. 마지막 경계에서는 각 호가 한 꼭짓점으로 줄어들어요.

a=3/10,b=2/5이면 √(a²+b²)=1/2입니다. r=1/5에서는 모든 방향,7/20에서는 두 호,9/20에서는 네 호가 돼요. r=1/2에서는 (±3/10,±2/5) 네 방향만0을 만들고,3/5에서는0 출력 자체가 불가능해요. 같은 영 출력이라도 알려진 기울기 거리가 바뀌면 답이 달라져요.

0이 아닌 출력도 같은 문턱으로 확인해 볼까요? r=1/2에서 (u,v)=(2/7,0)이면 x=1/2,y=0으로 하나예요. (1/7,0)이면 x=2/5,y=±3/10으로 둘이에요. (1/7,1/6)이면 두 좌표가 (2/5,1/2)로 정해지지만 거리 제곱이41/100이라 r²=1/4와 맞지 않아 없어요. r=1에서 (3/7,2/3)은 (3/5,4/5) 한 위치로 돌아와요.

따라서 전체 모형의 방향 개수는0·1·2·4 또는 무한 중 하나예요. 0·1·2·4에 없는 다른 유한 개수는 나오지 않아요. 네 개는 두 출력이 모두0이고 원이 직사각형 네 꼭짓점을 지나는 경계에서만 나와요. r=0은 처음에 제외했어요. r=0을 허용하는 다른 문제에서는 그 경우의 영 출력에 중심 한 점만 남아요.

교사는 ‘기록된 움직임이0’과 ‘손잡이 위치가 원점’부터 나누어 적게 해요. 이어 손잡이 거리 r을 알고 있는지, 어느 축의 부호와 크기가 출력에 남았는지 확인해요. 제공 교재의 원의 방정식과 일대일함수는 이 구분을 설명하는 기초 용어예요. 두 문턱과 정확한 거리 조건에서 모든 원상을 구한 분류는 자체 질문과 증명이며 교재나 원전의 새 정리로 소개하지 않아요.

착안: Godot Engine, Controllers, gamepads, and joysticks. 원문의 아날로그 축 문턱과 두 축 처리에 따라 영 입력 영역 모양이 달라질 수 있다는 관점만 참고했어요. 원전의 코드·도판·기기 사진·실험값은 옮기지 않았어요. 두 독립 문턱의 식, 등호를0으로 처리하는 정책, 알려진 기울기 거리, 전체 방향 분류는 자체 교육용 모형이에요. 실제 장치의 드리프트나 특정 게임의 조작 감도를 진단하는 글이 아니에요.

이 글 공유하기

개인정보 및 방문 통계 안내