Eidolang 언어 레퍼런스
Eidolang은 Eidograph 도형의 텍스트 표현입니다. 도형 하나는 스크립트 하나이며, 명령이 객체를 만들고, 식이 종속 관계를 세우며, 스타일과 애니메이션도 같은 텍스트 안에 남습니다. 드래그, 캔버스 도구, 속성 변경은 결국 이 스크립트에 다시 기록됩니다.
이 페이지는 현재 언어인 Eidolang 0.2만 다루며, 폐기된 구문은 포함하지 않습니다. 바로 실행할 수 있는 완전한 스크립트는 예제 프로젝트를 참고하세요.
스크립트 뼈대
모든 스크립트는 공간 선언으로 시작해야 합니다.
space plane
version 0.2
# 한 줄에 명령 하나. #로 주석이 시작됨
point A -2 0
point B 2 0
segment base A B
point M = midpoint(A, B)space plane은 2D 방언을,space solid는 3D 방언을 선택합니다.version 0.2는 생략할 수 있습니다. 이것은 언어 버전이며.eido매니페스트 버전이 아닙니다.- 이름은 대소문자를 구분하며 사용하기 전에 정의해야 합니다.
- 단독 각도 리터럴은 라디안입니다. 도(degree)는
45deg처럼 명시적으로 쓰세요. - 문자열은 큰따옴표를 사용합니다. 색은
#3366cc같은 형식을 쓸 수 있습니다.
자유도 모델
모든 기하 객체는 정확히 한 단계에 속합니다.
| 단계 | 정의 | 동작 |
|---|---|---|
| 자유 | 좌표나 값이 리터럴 | 직접 드래그하거나 속성 패널에서 편집 |
| 구속 | 지지체에 대해 on … at … 또는 로컬 좌표를 사용 | 지지체 위에서만 움직임 |
| 파생 | 다른 객체에 기반한 = 식을 사용 | 드래그할 수 없음. 입력이 바뀌면 갱신됨 |
point A 0 0 # 자유
point P on c at 0.25 # 구속
point M = midpoint(A, P) # 파생공통 값과 식
스칼라 식은 + - * / ^, 괄호, 비교, 불리언 연산을 지원합니다. 상수로는 pi, tau, e가 있고, 자주 쓰는 함수로는 sin, cos, tan, sqrt, abs, min, max와 거리/벡터 함수가 있습니다.
객체 속성은 base.length, c.radius, poly.area처럼 뒤따르는 식의 입력으로 쓸 수 있습니다. let은 임의의 식 값을 저장하고, fn은 그래프나 곡면을 위한 함수를 정의합니다.
let half = base.length / 2
fn wave(x) = sin(x) * half
plot graph wave domain -6 6잘못된 값 때문에 앱이 중단되지는 않습니다. 진단이 소스 위치와 이유를 알려 주고, 하위 객체는 무효 또는 경고 기록이 됩니다.
평면 (2D) 명령
기본 객체 작도
| 구성 요소 | 일반적인 형태 |
|---|---|
| 점 | point A x y, point P on path at t, point M = expr |
| 선형 | segment s A B, line l A B, ray r A B, vector v A B |
| 원 | circle c O radius r, circle c O through A |
| 타원과 호 | ellipse e F1 F2 through P, arc a P1 P2 P3 |
| 다각형 | polygon tri A B C |
| 표준 작도 | midpoint M A B, parallel p A l, perpendicular p A l |
| 교점 | intersections xs pathA pathB |
교점 결과는 list<point>입니다. xs.nearest(A), xs.maxY, xs.minX처럼 안정적인 선택자를 쓰는 것이 좋습니다. xs[0]의 뒤에 있는 순서는 움직이는 동안 바뀔 수 있습니다.
경로, 함수, 영역
plot graph sin domain -6 6
curve loop (cos(t), sin(t)) t from 0 to tau samples 160
polar rose (2*cos(3*a)) a from 0 to tau
equation unit x^2 + y^2 = 1
locus trace P driver u samples 180
region disk = c
region lens = intersection(c1, c2)선분, 직선, 반직선, 원, 타원, 호, 함수 그래프, 자취는 Path 동작을 구현합니다. 구속점을 실을 수 있고, 서로 교차할 수 있으며, subpath와 pathjoin으로 합성할 수 있습니다.
변환과 좌표계
point Q = reflect(P, axis)
rotate tri2 tri around O by 30deg
translate c2 c by (2, -1)
scale big tri around O by 2
frame f O X
point L in f 1 0.5reflect, rotate, translate, scale은 식의 함수로도 명령으로도 사용할 수 있습니다. 닮음 변환은 가능한 한 객체 유형을 보존합니다.
입체 (3D) 명령
space solid
point3 O 0 0 0
point3 T 0 0 3
sphere ball O radius 2
cylinder body O T radius 1| 구성 요소 | 일반적인 형태 |
|---|---|
| 점과 직선 | point3, segment3, line3, ray3, vector3 |
| 평면과 구 | plane ground A B C, sphere s O radius r |
| 입체 | box, prism, pyramid, cylinder, cone |
| 좌표계 | frame3 f O X Y, point3 P in f x y z |
| 공간 곡선 | curve3, locus3 |
| 함수 곡면 | surface waves f domain x0 x1 y0 y1 |
| 교점 | intersections3, plane_intersect_line, sphere_intersect_sphere |
| 변환 | reflect3, rotate3, translate3, scale3 |
3D에서는 점을 선분, 직선, 반직선, 구면에 구속할 수 있습니다. 구면 위의 점은 매개변수 두 개를 사용합니다.
point3 P on ball atAngles 45deg 90degbox, prism, pyramid, cylinder, cone은 .volume, .surfaceArea, .centroid 같은 측정값을 제공합니다. curve3와 locus3는 샘플링된 표시용 객체이며 현재는 구속점의 지지체가 아닙니다.
매개변수, 애니메이션, 단계
param r 1 range 0.5 4 step 0.1
circle c O radius r
animate r duration 2s mode pingpong
stage result duration 1.2s reveal draw
show c transition draw duration 0.8sparam은 매개변수 패널에 슬라이더를 만듭니다.animate는loop,pingpong,once를 지원합니다.stage는 순차적인 프레젠테이션 단계를 만들며,show,hide,clear, reveal 모드로 표시 여부를 제어합니다.- 2D 재생, 3D 재생, GIF/MP4 내보내기는 같은 타임라인을 공유합니다.
표시 명령
style base stroke #3366cc width 2 opacity 0.9
label base text "given segment"
textbox note -4 3 width 5 height 2 text "Drag A or B"
group helpers A B base
hide helpers transition fade duration 0.5sstyle은 색, 채우기, 너비, 불투명도, 점/화살표 크기를 제어하며, 2D에서는 파선 패턴도 지원합니다. 레이블 텍스트 전체를 $$…$$로 감싸면 LaTeX로 렌더링됩니다. textbox는 2D 전용입니다.
매크로와 단언
def bisect(A, B) -> (M, b) {
midpoint M A B
perpendicular_bisector b A B
}
use bisect P Q -> M1 b1
assert dist(P, M1) == dist(M1, Q) tolerance 1e-6 note "M1 is midpoint"def/use는 작도를 재사용하며 확장하는 동안 내부 이름을 분리합니다. assert는 관계를 검사해 경고를 내지만, 도형을 구속하거나 풀지는 않습니다.
앱에서 정확한 시그니처 조회
이 페이지는 자주 쓰는 명령을 목적별로 정리한 것입니다. 설치된 버전의 정확하고 완전한 시그니처는 다음 방법으로 확인하세요.
- Eidolang 편집기의 도움말을 사용합니다.
- 앱 내 에이전트에게
list_commands를 호출하도록 요청합니다. - 외부 MCP/REST 클라이언트에서 같은 도구를 호출합니다.
반환되는 목록은 활성 방언의 파서 레지스트리에서 직접 가져오므로, 설치된 빌드와 항상 일치합니다.
