Skip to content

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:

txt
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 plane wählt den 2D-Dialekt; space solid wählt den 3D-Dialekt.
  • version 0.2 ist 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 #3366cc verwenden.

Freiheitsmodell

Jedes geometrische Objekt gehört zu genau einer Stufe:

StufeDefinitionVerhalten
FreiKoordinaten oder Werte sind LiteraleDirekt ziehen oder im Eigenschaftenbereich bearbeiten
GebundenVerwendet on … at … oder lokale Koordinaten gegenüber einem TrägerBewegt sich nur auf seinem Träger
AbgeleitetVerwendet einen =-Ausdruck basierend auf anderen ObjektenNicht ziehbar; aktualisiert sich bei Änderung der Eingaben
txt
point A 0 0                    # frei
point P on c at 0.25           # gebunden
point M = midpoint(A, P)        # abgeleitet

Gemeinsame 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:

txt
let half = base.length / 2
fn wave(x) = sin(x) * half
plot graph wave domain -6 6

Ungü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

KomponenteGängige Formen
Punktpoint A x y, point P on path at t, point M = expr
Linearsegment s A B, line l A B, ray r A B, vector v A B
Kreiscircle c O radius r, circle c O through A
Ellipse und Bogenellipse e F1 F2 through P, arc a P1 P2 P3
Vieleckpolygon tri A B C
Standardkonstruktionenmidpoint M A B, parallel p A l, perpendicular p A l
Schnittpunkteintersections 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

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)

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

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 und scale sind sowohl als Ausdrucksfunktionen als auch als Befehle verfügbar. Ähnlichkeitstransformationen bewahren Objekttypen, soweit möglich.

Körper-(3D-)Befehle

txt
space solid
point3 O 0 0 0
point3 T 0 0 3
sphere ball O radius 2
cylinder body O T radius 1
KomponenteGängige Formen
Punkte und Linienpoint3, segment3, line3, ray3, vector3
Ebenen und Kugelnplane ground A B C, sphere s O radius r
Körperbox, prism, pyramid, cylinder, cone
Bezugssystemeframe3 f O X Y, point3 P in f x y z
Raumkurvencurve3, locus3
Funktionsflächensurface waves f domain x0 x1 y0 y1
Schnittpunkteintersections3, plane_intersect_line, sphere_intersect_sphere
Transformationenreflect3, 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:

txt
point3 P on ball atAngles 45deg 90deg

box, 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

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 erstellt einen Schieberegler im Bereich Parameter.
  • animate unterstützt loop, pingpong und once.
  • stage erstellt aufeinanderfolgende Präsentationsschritte; show, hide, clear und die Anzeigemodi steuern die Sichtbarkeit.
  • 2D-Wiedergabe, 3D-Wiedergabe und GIF-/MP4-Export teilen sich dieselbe Zeitleiste.

Präsentationsbefehle

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 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

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 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_commands aufzurufen;
  • 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.