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.