Referência da linguagem Eidolang
O Eidolang é a representação textual de uma figura do Eidograph. Uma figura é um único script: os comandos criam objetos, as expressões estabelecem dependências, e o estilo e a animação permanecem no mesmo texto. O arrasto, as ferramentas da tela e as alterações de propriedades acabam sempre por ser escritos de volta neste script.
Esta página descreve apenas a linguagem atual, Eidolang 0.2; não contém sintaxe retirada. Para scripts completos e executáveis, visite os projetos de exemplo.
Estrutura básica do script
Todo o script deve começar com uma declaração de espaço:
space plane
version 0.2
# Um comando por linha; # inicia um comentário
point A -2 0
point B 2 0
segment base A B
point M = midpoint(A, B)space planeseleciona o dialeto 2D;space solidseleciona o dialeto 3D.version 0.2é opcional. É a versão da linguagem, não a versão do manifesto.eido.- Os nomes são sensíveis a maiúsculas/minúsculas e têm de ser definidos antes de serem usados.
- Os literais de ângulo isolados são radianos; escreva valores em graus explicitamente, como
45deg. - As strings usam aspas duplas. As cores podem usar formas como
#3366cc.
Modelo de liberdade
Cada objeto geométrico pertence exatamente a um nível:
| Nível | Definição | Comportamento |
|---|---|---|
| Livre | As coordenadas ou valores são literais | Arrasta-se diretamente ou edita-se no painel de propriedades |
| Vinculado | Usa on … at … ou coordenadas locais contra um suporte | Só se move sobre o seu suporte |
| Derivado | Usa uma expressão = baseada noutros objetos | Não pode ser arrastado; atualiza-se quando as entradas mudam |
point A 0 0 # livre
point P on c at 0.25 # vinculado
point M = midpoint(A, P) # derivadoValores e expressões partilhados
As expressões escalares suportam + - * / ^, parênteses, comparações e operações booleanas. As constantes incluem pi, tau e e; as funções comuns incluem sin, cos, tan, sqrt, abs, min, max, e funções de distância/vetor.
As propriedades de objetos podem alimentar expressões posteriores, como base.length, c.radius e poly.area. let guarda o valor de qualquer expressão, enquanto fn define uma função para gráficos ou superfícies:
let half = base.length / 2
fn wave(x) = sin(x) * half
plot graph wave domain -6 6Valores inválidos não fazem a aplicação falhar. Os diagnósticos comunicam a localização na origem e o motivo, enquanto os objetos a jusante ficam com registos de inválido ou de aviso.
Comandos do plano (2D)
Construir objetos básicos
| Componente | Formas comuns |
|---|---|
| Ponto | 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 |
| Círculo | circle c O radius r, circle c O through A |
| Elipse e arco | ellipse e F1 F2 through P, arc a P1 P2 P3 |
| Polígono | polygon tri A B C |
| Construções padrão | midpoint M A B, parallel p A l, perpendicular p A l |
| Interseções | intersections xs pathA pathB |
Os resultados de interseção são list<point>. Prefira seletores estáveis como xs.nearest(A), xs.maxY ou xs.minX; a ordem por trás de xs[0] pode mudar durante o movimento.
Percursos, funções e regiões
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)Segmentos, retas, semirretas, círculos, elipses, arcos, gráficos de funções e lugares geométricos implementam o comportamento de Percurso (Path). Podem transportar pontos vinculados, intersetar-se uns aos outros e ser compostos com subpath e pathjoin.
Transformações e referenciais
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 e scale estão disponíveis tanto como funções de expressão quanto como comandos. As transformações de semelhança preservam os tipos de objeto sempre que possível.
Comandos do 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 comuns |
|---|---|
| Pontos e retas | point3, segment3, line3, ray3, vector3 |
| Planos e esferas | plane ground A B C, sphere s O radius r |
| Sólidos | box, prism, pyramid, cylinder, cone |
| Referenciais | frame3 f O X Y, point3 P in f x y z |
| Curvas espaciais | curve3, locus3 |
| Superfícies de função | surface waves f domain x0 x1 y0 y1 |
| Interseções | intersections3, plane_intersect_line, sphere_intersect_sphere |
| Transformações | reflect3, rotate3, translate3, scale3 |
Em 3D, um ponto pode vincular-se a um segmento, reta, semirreta ou superfície esférica. Um ponto de esfera usa dois parâmetros:
point3 P on ball atAngles 45deg 90degbox, prism, pyramid, cylinder e cone expõem medidas como .volume, .surfaceArea e .centroid. curve3 e locus3 são objetos de visualização amostrados e atualmente não são suportes para pontos vinculados.
Parâmetros, animação e 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.8sparamcria um cursor no painel Parâmetros.animatesuportaloop,pingpongeonce.stagecria passos de apresentação sequenciais;show,hide,cleare os modos de revelação controlam a presença.- A reprodução 2D, a reprodução 3D e a exportação de GIF/MP4 partilham a mesma linha do tempo.
Comandos de apresentação
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 a cor, o preenchimento, a largura, a opacidade e os tamanhos de ponto/seta; o 2D também suporta padrões de traço. O texto de etiqueta totalmente envolvido em $$…$$ é apresentado como LaTeX. textbox é exclusivo do 2D.
Macros e afirmações
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 reutilizam uma construção e isolam os seus nomes internos durante a expansão. assert verifica uma relação e produz um aviso; não restringe nem resolve a figura.
Consultar assinaturas exatas na aplicação
Esta página organiza os comandos mais usados por finalidade. Para assinaturas exatas e completas da versão instalada:
- use ajuda no editor Eidolang;
- peça ao Agente integrado para chamar
list_commands; - chame a mesma ferramenta a partir de um cliente externo MCP/REST.
A lista devolvida vem diretamente do registo do analisador (parser) do dialeto ativo, pelo que se mantém alinhada com a versão instalada.
