/** 명령 입력 해석 — 숫자 · 좌표 · 극좌표 꼴 */ import { Point } from '@flatten-js/core'; export const NUMBER_REGEXP = /^[0-9]+([.][0-9]+)?$/; /** 부호 있는 실수 한 개 (좌표는 음수가 될 수 있다) */ const SIGNED = '(-?[0-9]+(?:[.][0-9]+)?)'; export const ABSOLUTE_POINT_REGEXP = new RegExp(`^${SIGNED}[ ]*,[ ]*${SIGNED}$`); export const RELATIVE_POINT_REGEXP = new RegExp(`^@${SIGNED}[ ]*,[ ]*${SIGNED}$`); /** 극좌표 — 거리<각도(도). `@`가 붙으면 직전 점 기준 */ export const ABSOLUTE_POLAR_REGEXP = new RegExp(`^${SIGNED}[ ]*<[ ]*${SIGNED}$`); export const RELATIVE_POLAR_REGEXP = new RegExp(`^@${SIGNED}[ ]*<[ ]*${SIGNED}$`); /** 거리·각도(도)를 x·y 변위로 바꾼다 */ export function polarToPoint(distance: number, degrees: number): Point { const radians = (degrees * Math.PI) / 180; return new Point(distance * Math.cos(radians), distance * Math.sin(radians)); }