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:
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 planeselecciona el dialecto 2D;space solidselecciona el dialecto 3D.version 0.2es 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:
| Nivel | Definición | Comportamiento |
|---|---|---|
| Libre | Las coordenadas o valores son literales | Se arrastra directamente o se edita en el panel de propiedades |
| Vinculado | Usa on … at … o coordenadas locales respecto a un portador | Solo se mueve sobre su portador |
| Derivado | Usa una expresión = basada en otros objetos | No se puede arrastrar; se actualiza cuando cambian sus entradas |
point A 0 0 # libre
point P on c at 0.25 # vinculado
point M = midpoint(A, P) # derivadoValores 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:
let half = base.length / 2
fn wave(x) = sin(x) * half
plot graph wave domain -6 6Los 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
| Componente | Formas comunes |
|---|---|
| Punto | point A x y, point P on path at t, point M = expr |
| Lineal | segment s A B, line l A B, ray r A B, vector v A B |
| Círculo | circle c O radius r, circle c O through A |
| Elipse y arco | ellipse e F1 F2 through P, arc a P1 P2 P3 |
| Polígono | polygon tri A B C |
| Construcciones estándar | midpoint M A B, parallel p A l, perpendicular p A l |
| Intersecciones | intersections 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
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
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 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)
space solid
point3 O 0 0 0
point3 T 0 0 3
sphere ball O radius 2
cylinder body O T radius 1| Componente | Formas comunes |
|---|---|
| Puntos y líneas | point3, segment3, line3, ray3, vector3 |
| Planos y esferas | plane ground A B C, sphere s O radius r |
| Sólidos | box, prism, pyramid, cylinder, cone |
| Marcos | frame3 f O X Y, point3 P in f x y z |
| Curvas espaciales | curve3, locus3 |
| Superficies de función | surface waves f domain x0 x1 y0 y1 |
| Intersecciones | intersections3, plane_intersect_line, sphere_intersect_sphere |
| Transformaciones | reflect3, 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:
point3 P on ball atAngles 45deg 90degbox, 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
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.8sparamcrea un control deslizante en el panel Parámetros.animateadmiteloop,pingpongyonce.stagecrea pasos de presentación secuenciales;show,hide,cleary 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
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 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
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.
