Skip to content

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:

txt
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 plane seleciona o dialeto 2D; space solid seleciona 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ívelDefiniçãoComportamento
LivreAs coordenadas ou valores são literaisArrasta-se diretamente ou edita-se no painel de propriedades
VinculadoUsa on … at … ou coordenadas locais contra um suporteSó se move sobre o seu suporte
DerivadoUsa uma expressão = baseada noutros objetosNão pode ser arrastado; atualiza-se quando as entradas mudam
txt
point A 0 0                    # livre
point P on c at 0.25           # vinculado
point M = midpoint(A, P)        # derivado

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

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

Valores 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

ComponenteFormas comuns
Pontopoint 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
Círculocircle c O radius r, circle c O through A
Elipse e arcoellipse e F1 F2 through P, arc a P1 P2 P3
Polígonopolygon tri A B C
Construções padrãomidpoint M A B, parallel p A l, perpendicular p A l
Interseçõesintersections 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

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)

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

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

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 comuns
Pontos e retaspoint3, segment3, line3, ray3, vector3
Planos e esferasplane ground A B C, sphere s O radius r
Sólidosbox, prism, pyramid, cylinder, cone
Referenciaisframe3 f O X Y, point3 P in f x y z
Curvas espaciaiscurve3, locus3
Superfícies de funçãosurface waves f domain x0 x1 y0 y1
Interseçõesintersections3, plane_intersect_line, sphere_intersect_sphere
Transformaçõesreflect3, 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:

txt
point3 P on ball atAngles 45deg 90deg

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

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 cria um cursor no painel Parâmetros.
  • animate suporta loop, pingpong e once.
  • stage cria passos de apresentação sequenciais; show, hide, clear e 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

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

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