기하 내장 계산 엔진
2D 평면기하 / 기하 내장 계산 엔진
2.3 기하 내장 계산 엔진
작도 문제를 코딩할 때 좌표를 손수 삼각비로 계산하는 것은 비효율적입니다. Mathit은 교과서 기하학에 등장하는 핵심 위치 계산을 함수 형태로 내장하고 있습니다.
중점과 내분점
두 점의 정가운데 위치는 mid() 함수로 구합니다.
M = mid(A, B)선분을 특정 비율로 분할하는 점은 on() 함수를 사용합니다.
P = on(A--B, 1/3)두 번째 인자에는 선분 AB의 전체 길이를 1로 보았을 때 점 A로부터 떨어진 비율을 적습니다. 1/3을 입력하면 선분 AB를 1대 2로 내분하는 점이 계산됩니다.
만약 1보다 큰 값을 넣으면 B 방향의 외분점이 되고, 음수를 넣으면 A의 바깥쪽 연장선 위에 점이 놓입니다.
선분의 연장선
선분을 지정한 길이만큼 바깥으로 늘인 위치를 찾을 때는 ext() 함수를 사용합니다.
P_ext = ext(A--B, len=2)이 코드는 점 A에서 시작하여 B를 통과하는 반직선 방향으로, 점 B로부터 정확히 2만큼 더 나아간 위치의 점을 반환합니다. 보조선을 긋거나 도형 바깥에 외각 표기를 위한 여백 점을 만들 때 유용합니다.
기준점 순서가 반대인 ext(B--A, len=2)를 적으면 점 A의 바깥쪽으로 연장된 점이 생성됩니다.
수선의 발과 선대칭
외부의 한 점에서 특정 직선에 수직으로 내린 점은 proj() 함수로 구합니다.
H = proj(P, A--B)점 P에서 직선 AB에 내린 수선의 발 좌표가 정확히 계산되어 H에 할당됩니다. 직각삼각형의 높이나 삼수선의 정리 문제를 구성할 때 필수적으로 쓰입니다.
특정 직선을 기준으로 점을 완전히 반대편으로 대칭 이동시킬 때는 reflect() 함수를 씁니다.
P_mirror = reflect(P, A--B)선분 AB를 거울면으로 삼아 점 P와 완벽한 대칭 위치에 있는 점을 찾아냅니다. 종이접기 문항이나 최단거리 반사 문제를 구현할 때 좌표 계산 없이 곧바로 점을 얻을 수 있습니다.
회전 변환과 각의 이등분선
평면 위의 점을 회전시킬 때는 rot() 함수를 사용합니다.
P_rot = rot(P, 45deg, center=C)점 P를 중심점 C를 기준으로 반시계 방향으로 45도 회전시킨 위치를 반환합니다. center 파라미터를 생략하면 좌표평면의 원점 (0, 0)을 기준으로 회전합니다.
각의 이등분선을 구할 때는 bisect() 함수를 씁니다.
Ray = bisect(A--B--C)세 점이 이루는 각 B를 정확히 반으로 가르는 반직선 객체를 생성합니다. 이 반직선은 후술할 교점 함수와 결합하여 대변과의 교점을 찾는 데 사용됩니다.