Skip to content

Eidolang 言語リファレンス ​

Eidolang は、Eidograph の図形のテキスト表現です。1 つの図形は 1 つのスクリプトで、コマンドがオブジェクトを作り、式が依存関係を確立し、スタイルとアニメーションも同じテキストの中に残ります。ドラッグ、キャンバスのツール、プロパティの変更は、最終的にこのスクリプトに書き戻されます。

このページでは現行の言語である Eidolang 0.2 だけを扱い、廃止された構文は含みません。そのまま実行できる完全なスクリプトについては、サンプルプロジェクトをご覧ください。

スクリプトの骨格 ​

すべてのスクリプトは、空間の宣言で始めてください。

txt
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 … またはローカル座標を使う担体の上でのみ動く
従属他のオブジェクトに基づく = の式を使うドラッグ不可。入力が変わると更新される
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 では、点を線分、直線、半直線、球面に束縛できます。球面上の点は 2 つのパラメーターを使います。

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 クライアントから同じツールを呼び出します。

返されるリストは、アクティブな方言のパーサーのレジストリから直接取得されるため、インストール済みのビルドと常に一致します。