Skip to content

Eidolang 언어 레퍼런스 ​

Eidolang은 Eidograph 도형의 텍스트 표현입니다. 도형 하나는 스크립트 하나이며, 명령이 객체를 만들고, 식이 종속 관계를 세우며, 스타일과 애니메이션도 같은 텍스트 안에 남습니다. 드래그, 캔버스 도구, 속성 변경은 결국 이 스크립트에 다시 기록됩니다.

이 페이지는 현재 언어인 Eidolang 0.2만 다루며, 폐기된 구문은 포함하지 않습니다. 바로 실행할 수 있는 완전한 스크립트는 예제 프로젝트를 참고하세요.

스크립트 뼈대 ​

모든 스크립트는 공간 선언으로 시작해야 합니다.

txt
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 … 또는 로컬 좌표를 사용지지체 위에서만 움직임
파생다른 객체에 기반한 = 식을 사용드래그할 수 없음. 입력이 바뀌면 갱신됨
txt
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은 그래프나 곡면을 위한 함수를 정의합니다.

txt
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]의 뒤에 있는 순서는 움직이는 동안 바뀔 수 있습니다.

경로, 함수, 영역 ​

txt
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으로 합성할 수 있습니다.

변환과 좌표계 ​

txt
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.5

reflect, rotate, translate, scale은 식의 함수로도 명령으로도 사용할 수 있습니다. 닮음 변환은 가능한 한 객체 유형을 보존합니다.

입체 (3D) 명령 ​

txt
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에서는 점을 선분, 직선, 반직선, 구면에 구속할 수 있습니다. 구면 위의 점은 매개변수 두 개를 사용합니다.

txt
point3 P on ball atAngles 45deg 90deg

box, prism, pyramid, cylinder, cone은 .volume, .surfaceArea, .centroid 같은 측정값을 제공합니다. curve3와 locus3는 샘플링된 표시용 객체이며 현재는 구속점의 지지체가 아닙니다.

매개변수, 애니메이션, 단계 ​

txt
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.8s
  • param은 매개변수 패널에 슬라이더를 만듭니다.
  • animate는 loop, pingpong, once를 지원합니다.
  • stage는 순차적인 프레젠테이션 단계를 만들며, show, hide, clear, reveal 모드로 표시 여부를 제어합니다.
  • 2D 재생, 3D 재생, GIF/MP4 내보내기는 같은 타임라인을 공유합니다.

표시 명령 ​

txt
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.5s

style은 색, 채우기, 너비, 불투명도, 점/화살표 크기를 제어하며, 2D에서는 파선 패턴도 지원합니다. 레이블 텍스트 전체를 $$…$$로 감싸면 LaTeX로 렌더링됩니다. textbox는 2D 전용입니다.

매크로와 단언 ​

txt
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 클라이언트에서 같은 도구를 호출합니다.

반환되는 목록은 활성 방언의 파서 레지스트리에서 직접 가져오므로, 설치된 빌드와 항상 일치합니다.