Skip to content

Referencia del lenguaje Eidolang

Eidolang es la representación textual de una figura de Eidograph. Una figura es un único script: los comandos crean objetos, las expresiones establecen dependencias, y el estilo y la animación permanecen en el mismo texto. El arrastre, las herramientas del lienzo y los cambios de propiedades acaban escribiéndose de vuelta en este script.

Esta página describe únicamente el lenguaje actual, Eidolang 0.2; no contiene ninguna sintaxis retirada. Para scripts completos y ejecutables, visita los proyectos de ejemplo.

Estructura básica del script

Todo script debe comenzar con una declaración de espacio:

txt
space plane
version 0.2

# Un comando por línea; # inicia un comentario
point A -2 0
point B 2 0
segment base A B
point M = midpoint(A, B)
  • space plane selecciona el dialecto 2D; space solid selecciona el dialecto 3D.
  • version 0.2 es opcional. Es la versión del lenguaje, no la versión del manifiesto .eido.
  • Los nombres distinguen mayúsculas y minúsculas y deben definirse antes de usarse.
  • Los literales de ángulo sin unidad son radianes; escribe los valores en grados de forma explícita, como 45deg.
  • Las cadenas usan comillas dobles. Los colores pueden usar formas como #3366cc.

Modelo de libertad

Cada objeto geométrico pertenece exactamente a un nivel:

NivelDefiniciónComportamiento
LibreLas coordenadas o valores son literalesSe arrastra directamente o se edita en el panel de propiedades
VinculadoUsa on … at … o coordenadas locales respecto a un portadorSolo se mueve sobre su portador
DerivadoUsa una expresión = basada en otros objetosNo se puede arrastrar; se actualiza cuando cambian sus entradas
txt
point A 0 0                    # libre
point P on c at 0.25           # vinculado
point M = midpoint(A, P)        # derivado

Valores y expresiones compartidos

Las expresiones escalares admiten + - * / ^, paréntesis, comparaciones y operaciones booleanas. Las constantes incluyen pi, tau y e; las funciones comunes incluyen sin, cos, tan, sqrt, abs, min, max y funciones de distancia/vector.

Las propiedades de los objetos pueden alimentar expresiones posteriores, como base.length, c.radius y poly.area. let guarda el valor de cualquier expresión, mientras que fn define una función para gráficas o superficies:

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

Los valores no válidos no bloquean la aplicación. Los diagnósticos informan de la ubicación en el código y del motivo, mientras que los objetos posteriores pasan a ser registros no válidos o de advertencia.

Comandos de plano (2D)

Construir objetos básicos

ComponenteFormas comunes
Puntopoint A x y, point P on path at t, point M = expr
Linealsegment s A B, line l A B, ray r A B, vector v A B
Círculocircle c O radius r, circle c O through A
Elipse y arcoellipse e F1 F2 through P, arc a P1 P2 P3
Polígonopolygon tri A B C
Construcciones estándarmidpoint M A B, parallel p A l, perpendicular p A l
Interseccionesintersections xs pathA pathB

Los resultados de intersección son list<point>. Prefiere selectores estables como xs.nearest(A), xs.maxY o xs.minX; el orden detrás de xs[0] puede cambiar durante el movimiento.

Trayectorias, funciones y regiones

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)

Los segmentos, rectas, semirrectas, círculos, elipses, arcos, gráficas de función y lugares geométricos implementan el comportamiento Path. Pueden llevar puntos vinculados, intersecarse entre sí y componerse con subpath y pathjoin.

Transformaciones y marcos

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 y scale están disponibles tanto como funciones de expresión como comandos. Las transformaciones de semejanza conservan los tipos de objeto siempre que es posible.

Comandos de sólido (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
ComponenteFormas comunes
Puntos y líneaspoint3, segment3, line3, ray3, vector3
Planos y esferasplane ground A B C, sphere s O radius r
Sólidosbox, prism, pyramid, cylinder, cone
Marcosframe3 f O X Y, point3 P in f x y z
Curvas espacialescurve3, locus3
Superficies de funciónsurface waves f domain x0 x1 y0 y1
Interseccionesintersections3, plane_intersect_line, sphere_intersect_sphere
Transformacionesreflect3, rotate3, translate3, scale3

En 3D, un punto puede vincularse a un segmento, una recta, una semirrecta o la superficie de una esfera. Un punto sobre una esfera usa dos parámetros:

txt
point3 P on ball atAngles 45deg 90deg

box, prism, pyramid, cylinder y cone exponen medidas como .volume, .surfaceArea y .centroid. curve3 y locus3 son objetos de visualización muestreados y actualmente no son portadores para puntos vinculados.

Parámetros, animación y etapas

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 crea un control deslizante en el panel Parámetros.
  • animate admite loop, pingpong y once.
  • stage crea pasos de presentación secuenciales; show, hide, clear y los modos de revelado controlan la presencia.
  • La reproducción 2D, la reproducción 3D y la exportación a GIF/MP4 comparten la misma línea de tiempo.

Comandos de presentación

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 controla el color, el relleno, el ancho, la opacidad y los tamaños de punto/flecha; en 2D también admite patrones de trazo discontinuo. El texto de una etiqueta envuelto completamente en $$…$$ se renderiza como LaTeX. textbox es exclusivo de 2D.

Macros y aserciones

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 reutilizan una construcción y aíslan sus nombres internos durante la expansión. assert comprueba una relación y produce una advertencia; no restringe ni resuelve la figura.

Consulta las firmas exactas en la aplicación

Esta página organiza por finalidad los comandos más usados. Para obtener las firmas exactas y completas de la versión instalada:

  • usa help en el editor de Eidolang;
  • pide al Agente integrado que llame a list_commands;
  • llama a la misma herramienta desde un cliente MCP/REST externo.

La lista devuelta procede directamente del registro del analizador del dialecto activo, por lo que se mantiene alineada con la compilación instalada.