Eidolang-Sprachreferenz
Eidolang ist die textuelle Darstellung einer Eidograph-Figur. Eine Figur ist ein einziges Skript: Befehle erstellen Objekte, Ausdrücke stellen Abhängigkeiten her, und Stil sowie Animation verbleiben im selben Text. Ziehen, Werkzeuge auf der Zeichenfläche und Eigenschaftsänderungen werden letztlich in dieses Skript zurückgeschrieben.
Diese Seite beschreibt nur die aktuelle Sprache, Eidolang 0.2; sie enthält keine veraltete Syntax. Vollständige lauffähige Skripte finden Sie unter Beispielprojekte.
Skriptgerüst
Jedes Skript sollte mit einer Raumdeklaration beginnen:
space plane
version 0.2
# Ein Befehl pro Zeile; # beginnt einen Kommentar
point A -2 0
point B 2 0
segment base A B
point M = midpoint(A, B)space planewählt den 2D-Dialekt;space solidwählt den 3D-Dialekt.version 0.2ist optional. Es ist die Sprachversion, nicht die.eido-Manifestversion.- Namen unterscheiden Groß-/Kleinschreibung und müssen vor ihrer Verwendung definiert werden.
- Bloße Winkelliterale sind Radiant; schreiben Sie Gradwerte explizit, etwa
45deg. - Zeichenketten verwenden doppelte Anführungszeichen. Farben können Formen wie
#3366ccverwenden.
Freiheitsmodell
Jedes geometrische Objekt gehört zu genau einer Stufe:
| Stufe | Definition | Verhalten |
|---|---|---|
| Frei | Koordinaten oder Werte sind Literale | Direkt ziehen oder im Eigenschaftenbereich bearbeiten |
| Gebunden | Verwendet on … at … oder lokale Koordinaten gegenüber einem Träger | Bewegt sich nur auf seinem Träger |
| Abgeleitet | Verwendet einen =-Ausdruck basierend auf anderen Objekten | Nicht ziehbar; aktualisiert sich bei Änderung der Eingaben |
point A 0 0 # frei
point P on c at 0.25 # gebunden
point M = midpoint(A, P) # abgeleitetGemeinsame Werte und Ausdrücke
Skalare Ausdrücke unterstützen + - * / ^, Klammern, Vergleiche und boolesche Operationen. Zu den Konstanten zählen pi, tau und e; zu den gängigen Funktionen zählen sin, cos, tan, sqrt, abs, min, max sowie Abstands-/Vektorfunktionen.
Objekteigenschaften können in spätere Ausdrücke einfließen, etwa base.length, c.radius und poly.area. let speichert einen beliebigen Ausdruckswert, während fn eine Funktion für Plots oder Flächen definiert:
let half = base.length / 2
fn wave(x) = sin(x) * half
plot graph wave domain -6 6Ungültige Werte führen nicht zum Absturz der App. Die Diagnose meldet Quellort und Grund, während nachgelagerte Objekte ungültig werden oder Warnhinweise erhalten.
Ebenen-(2D-)Befehle
Grundlegende Objekte konstruieren
| Komponente | Gängige Formen |
|---|---|
| Punkt | point A x y, point P on path at t, point M = expr |
| Linear | segment s A B, line l A B, ray r A B, vector v A B |
| Kreis | circle c O radius r, circle c O through A |
| Ellipse und Bogen | ellipse e F1 F2 through P, arc a P1 P2 P3 |
| Vieleck | polygon tri A B C |
| Standardkonstruktionen | midpoint M A B, parallel p A l, perpendicular p A l |
| Schnittpunkte | intersections xs pathA pathB |
Schnittpunktergebnisse sind list<point>. Bevorzugen Sie stabile Selektoren wie xs.nearest(A), xs.maxY oder xs.minX; die Reihenfolge hinter xs[0] kann sich während der Bewegung ändern.
Pfade, Funktionen und Regionen
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)Strecken, Geraden, Strahlen, Kreise, Ellipsen, Bögen, Funktionsplots und Loci verhalten sich wie Pfade. Sie können gebundene Punkte tragen, sich gegenseitig schneiden und mit subpath und pathjoin zusammengesetzt werden.
Transformationen und Bezugssysteme
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 und scale sind sowohl als Ausdrucksfunktionen als auch als Befehle verfügbar. Ähnlichkeitstransformationen bewahren Objekttypen, soweit möglich.
Körper-(3D-)Befehle
space solid
point3 O 0 0 0
point3 T 0 0 3
sphere ball O radius 2
cylinder body O T radius 1| Komponente | Gängige Formen |
|---|---|
| Punkte und Linien | point3, segment3, line3, ray3, vector3 |
| Ebenen und Kugeln | plane ground A B C, sphere s O radius r |
| Körper | box, prism, pyramid, cylinder, cone |
| Bezugssysteme | frame3 f O X Y, point3 P in f x y z |
| Raumkurven | curve3, locus3 |
| Funktionsflächen | surface waves f domain x0 x1 y0 y1 |
| Schnittpunkte | intersections3, plane_intersect_line, sphere_intersect_sphere |
| Transformationen | reflect3, rotate3, translate3, scale3 |
In 3D kann sich ein Punkt an eine Strecke, Gerade, einen Strahl oder eine Kugeloberfläche binden. Ein Kugelpunkt verwendet zwei Parameter:
point3 P on ball atAngles 45deg 90degbox, prism, pyramid, cylinder und cone stellen Maße wie .volume, .surfaceArea und .centroid bereit. curve3 und locus3 sind abgetastete Anzeigeobjekte und derzeit keine Träger für gebundene Punkte.
Parameter, Animation und Bühnen
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.8sparamerstellt einen Schieberegler im Bereich Parameter.animateunterstütztloop,pingpongundonce.stageerstellt aufeinanderfolgende Präsentationsschritte;show,hide,clearund die Anzeigemodi steuern die Sichtbarkeit.- 2D-Wiedergabe, 3D-Wiedergabe und GIF-/MP4-Export teilen sich dieselbe Zeitleiste.
Präsentationsbefehle
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 steuert Farbe, Füllung, Breite, Deckkraft sowie Punkt-/Pfeilgrößen; 2D unterstützt außerdem Strichmuster. Vollständig in $$…$$ eingeschlossener Beschriftungstext wird als LaTeX gerendert. textbox ist nur in 2D verfügbar.
Makros und Zusicherungen
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 ermöglichen die Wiederverwendung einer Konstruktion und isolieren deren interne Namen während der Expansion. assert prüft eine Beziehung und erzeugt eine Warnung; sie schränkt die Figur nicht ein und löst sie nicht.
Exakte Signaturen in der App abfragen
Diese Seite ordnet gängig verwendete Befehle nach Zweck. Für exakte, vollständige Signaturen der installierten Version:
- verwenden Sie help im Eidolang-Editor;
- bitten Sie den integrierten Agenten,
list_commandsaufzurufen; - rufen Sie dasselbe Werkzeug von einem externen MCP-/REST-Client auf.
Die zurückgegebene Liste stammt direkt aus der Parser-Registrierung des aktiven Dialekts und bleibt daher mit dem installierten Build synchron.
