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.