이 문서는 Hektor PDF의 21페이지 부근에 실린 Mathematica 계산 노트를 바탕으로, 아킬레스에 직접 도움이 되는 수학 모델을 재구성한 것이다.
중요:
OCR로 온전히 읽힌 식의 완전한 전사가 아니다.직접 확인과 재구성/추론이 함께 존재한다.PDF 본문에는 다음 캡션이 있다.
SOFTWARE: Calculations for the path finding algorithm that smooths the movements of the can-holder.출처:
21같은 문맥에서 소프트웨어 설명은 아래를 분명히 말한다.
smooth paths 위를 움직여야 했다.a lot of mathematics was necessary.출처:
20-21테스트 이전 설명에서 아래가 직접 확인된다.
only two engines로 바꿨다.출처:
24작품 페이지는 최종 기하를 더 간단히 설명한다.
two motorsgeometric triangulation and gravitygeometric path-finding algorithm출처:
21페이지의 OCR은 상당 부분 깨져 있어서 식을 문자 그대로 읽기는 어렵다. 다만 문맥상 그 페이지가 다루는 핵심은 아래 둘로 보는 것이 가장 자연스럽다.
2도르래 리그의 기하학smooth path를 만들기 위한 경로 계산즉, 아킬레스가 가져와야 하는 최소 수학 모델은 다음과 같다.
사용자가 제공한 21페이지 이미지에는 아래와 같은 식이 보인다.
e1 := (x - c)^2 + (y - d)^2 = r^2
e2 := (x0 - c) * (x - c) + (y0 - d) * (y - d) = r^2
이 두 식의 의미는 매우 중요하다.
e1: 중심이 (c, d)이고 반지름이 r인 원e2: 외부 점 (x0, y0)에서 원 위의 점 (x, y)로 그은 선이 원의 접선이 되도록 만드는 조건즉, 이 페이지는 단순한 거리 계산이 아니라 원에 대한 접점(tangent point)을 푸는 수식을 담고 있다고 해석할 수 있다.
벡터를 쓰면:
u = (x0 - c, y0 - d)v = (x - c, y - d)그럼 e2는:
u · v = r^2가 된다.
여기서 e1로부터 |v| = r이므로, 이 식은 외부 점에서 원에 그은 접선의 접점 조건과 맞아떨어진다.
따라서 21페이지는 2모터 리그의 기본 triangulation뿐 아니라, smooth path를 만들기 위한 원-접선 기반 smoothing geometry도 다루고 있다고 보는 편이 타당하다.
이 절은 Hektor의 최종 2모터 구조와 작품 설명의 geometric triangulation을 바탕으로 재구성한 것이다.
PL = (xL, yL)PR = (xR, yR)P = (x, y)LLLR헤드 위치가 주어졌을 때 케이블 길이는 유클리드 거리다.
LL = sqrt((x - xL)^2 + (y - yL)^2)LR = sqrt((x - xR)^2 + (y - yR)^2)이 식은 2도르래 + 헤드 구조의 가장 기본적인 triangulation 식이다.
가장 단순한 경우:
PL = (0, 0)PR = (W, 0)그러면 길이에서 좌표를 복원하는 식은 다음처럼 정리된다.
x = (LL^2 - LR^2 + W^2) / (2W)y = sqrt(LL^2 - x^2)여기서 y는 도르래 아래쪽 해를 선택한다.
두 원의 교점 문제로 보면 된다.
(x - xL)^2 + (y - yL)^2 = LL^2(x - xR)^2 + (y - yR)^2 = LR^2두 식을 빼면 x, y에 대한 선형식 하나가 나온다.
A x + B y = C여기서:
A = 2(xR - xL)B = 2(yR - yL)C = LL^2 - LR^2 - xL^2 + xR^2 - yL^2 + yR^2이 선형식을 한 원 방정식에 대입하면 최종적으로 헤드 좌표를 구할 수 있다.
즉, Hektor의 geometric triangulation은 본질적으로 두 원의 교점 문제다.
사용자가 제공한 21페이지 이미지의 e1, e2를 더 읽기 쉬운 닫힌형태로 정리하면 다음과 같다.
외부 점:
P0 = (x0, y0)원 중심:
C = (c, d)상대 좌표:
dx = x0 - cdy = y0 - dD2 = dx^2 + dy^2그리고:
s = sqrt(D2 - r^2)라 두면, 접점 T+, T-는 다음처럼 쓸 수 있다.
T±.x = c + (r^2 * dx ∓ r * dy * s) / D2T±.y = d + (r^2 * dy ± r * dx * s) / D2이 식은 페이지 21의 긴 CAS 출력보다 훨씬 단순하지만, 같은 기하를 표현한다.
즉, 페이지 21의 긴 식은 외부 점에서 원에 그은 두 개의 접점을 계산하는 식으로 재해석할 수 있다.
캡션이 path finding algorithm that smooths the movements라고 말하므로, 이 페이지의 수학은 단순 좌표 변환만이 아니라 경로를 부드럽게 만드는 일과 연결된다고 보는 게 타당하다.
이걸 아킬레스 관점으로 풀면 다음 절차가 된다.
P(t)로 표현한다.P(t)를 충분히 작은 샘플로 나눈다.LL(t), LR(t)로 변환한다.즉, 부드러움은 단순히 xy 평면에서만 평가하는 것이 아니라, 좌우 모터 길이 변화의 관점에서도 평가해야 한다.
그리고 사용자 제공 이미지에 따르면, 그 smoothing은 적어도 부분적으로는 아래 연산을 포함할 가능성이 높다.
즉, sharp corner를 그대로 통과하는 대신 tangent-to-circle 구조로 완화했을 가능성이 높다.
테스트 파트에는 아래 관찰이 있다.
이건 path-finding이 적어도 아래 요소들을 가졌음을 시사한다.
path smoothingpath insertionloop generationorderingoffset compensation즉, 단순 IK만으로는 부족하고, 실제로는 geometry와 motion correction이 함께 들어간 알고리즘이었다고 보는 게 맞다.
아킬레스는 이제 확실히 아래를 기본으로 삼아야 한다.
2개 도르래 모터2개 케이블 길이고정된 스프레이 헤드sprayState는 논리 상태, 별도 모터 아님Generator는 단순히 source path를 변형하는 것을 넘어서, 아래 두 레이어를 분리해야 한다.
head path in XYmotor path in cable-length spacePlayer는 각 세그먼트마다 아래 값을 재생해야 한다.
leftCableLengthrightCableLengthsprayState향후 구현에서 smooth를 평가할 때는 최소한 다음 두 기준이 필요하다.
xy 경로의 곡률이 과도하지 않은가LL/LR 변화량이 과도하지 않은가후자가 바로 21페이지 수학이 주는 핵심 단서일 가능성이 높다.
현재 아킬레스 v1 generator는:
source geometry에서 anchor를 뽑고leftCableLength/rightCableLength를 계산한다하지만 아직 아래는 하지 않는다.
motor-length space에서 최적화LL/LR 변화량 기반 smoothness 최소화즉, 현재 구현은 Hektor inspired heuristic, 아직은 page-21-derived math model은 아니다.
21페이지를 기준으로 다음 단계의 우선순위는 이렇다.
LL/LR 시계열 계산deltaLL, deltaLR를 비용 함수로 추가circle tangent math와 motor-space smoothness를 반영