Eidolang 言語リファレンス
Eidolang は、Eidograph の図形のテキスト表現です。1 つの図形は 1 つのスクリプトで、コマンドがオブジェクトを作り、式が依存関係を確立し、スタイルとアニメーションも同じテキストの中に残ります。ドラッグ、キャンバスのツール、プロパティの変更は、最終的にこのスクリプトに書き戻されます。
このページでは現行の言語である Eidolang 0.2 だけを扱い、廃止された構文は含みません。そのまま実行できる完全なスクリプトについては、サンプルプロジェクトをご覧ください。
スクリプトの骨格
すべてのスクリプトは、空間の宣言で始めてください。
space plane
version 0.2
# 1 行に 1 コマンド。# からコメントが始まる
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のマニフェストのバージョンではありません。- 名前は大文字と小文字を区別し、使う前に定義する必要があります。
- 単独の角度リテラルはラジアンです。度は
45degのように明示的に書きます。 - 文字列はダブルクォートを使います。色は
#3366ccなどの形式を使えます。
自由度モデル
すべての幾何オブジェクトは、ちょうど 1 つの階層に属します。
| 階層 | 定義 | 動作 |
|---|---|---|
| 自由 | 座標や値がリテラル | 直接ドラッグするか、プロパティパネルで編集 |
| 束縛 | 担体に対して 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 では、点を線分、直線、半直線、球面に束縛できます。球面上の点は 2 つのパラメーターを使います。
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 クライアントから同じツールを呼び出します。
返されるリストは、アクティブな方言のパーサーのレジストリから直接取得されるため、インストール済みのビルドと常に一致します。
