Skip to content

Referensi bahasa Eidolang ​

Eidolang adalah representasi teks dari sebuah gambar Eidograph. Satu gambar adalah satu skrip: perintah membuat objek, ekspresi membangun ketergantungan, dan gaya serta animasi tetap berada dalam teks yang sama. Seretan, alat kanvas, dan perubahan properti pada akhirnya ditulis kembali ke skrip ini.

Halaman ini hanya menjelaskan bahasa saat ini, Eidolang 0.2; tidak ada sintaks yang sudah dihentikan. Untuk skrip lengkap yang dapat dijalankan, kunjungi proyek contoh.

Kerangka skrip ​

Setiap skrip sebaiknya diawali dengan deklarasi ruang:

txt
space plane
version 0.2

# Satu perintah per baris; # memulai komentar
point A -2 0
point B 2 0
segment base A B
point M = midpoint(A, B)
  • space plane memilih dialek 2D; space solid memilih dialek 3D.
  • version 0.2 bersifat opsional. Ini adalah versi bahasa, bukan versi manifes .eido.
  • Nama peka huruf besar/kecil dan harus didefinisikan sebelum dipakai.
  • Literal sudut tanpa satuan dianggap radian; tulis nilai derajat secara eksplisit, misalnya 45deg.
  • String memakai tanda kutip ganda. Warna dapat memakai bentuk seperti #3366cc.

Model kebebasan ​

Setiap objek geometri termasuk tepat satu tingkat:

TingkatDefinisiPerilaku
BebasKoordinat atau nilai berupa literalSeret langsung atau edit di panel properti
TerikatMemakai on … at … atau koordinat lokal terhadap sebuah pembawaHanya bergerak pada pembawanya
TurunanMemakai ekspresi = berdasarkan objek lainTidak dapat diseret; diperbarui saat masukan berubah
txt
point A 0 0                    # bebas
point P on c at 0.25           # terikat
point M = midpoint(A, P)        # turunan

Nilai dan ekspresi bersama ​

Ekspresi skalar mendukung + - * / ^, tanda kurung, perbandingan, dan operasi boolean. Konstanta meliputi pi, tau, dan e; fungsi umum meliputi sin, cos, tan, sqrt, abs, min, max, serta fungsi jarak/vektor.

Properti objek dapat menjadi masukan bagi ekspresi berikutnya, seperti base.length, c.radius, dan poly.area. let menyimpan nilai ekspresi apa pun, sedangkan fn mendefinisikan fungsi untuk plot atau permukaan:

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

Nilai yang tidak valid tidak membuat aplikasi mogok. Diagnostik melaporkan lokasi sumber dan alasannya, sementara objek hilir menjadi rekaman tidak valid atau peringatan.

Perintah bidang (2D) ​

Membuat objek dasar ​

KomponenBentuk umum
Titikpoint A x y, point P on path at t, point M = expr
Serupa garissegment s A B, line l A B, ray r A B, vector v A B
Lingkarancircle c O radius r, circle c O through A
Elips dan busurellipse e F1 F2 through P, arc a P1 P2 P3
Poligonpolygon tri A B C
Konstruksi standarmidpoint M A B, parallel p A l, perpendicular p A l
Perpotonganintersections xs pathA pathB

Hasil perpotongan berupa list<point>. Utamakan pemilih yang stabil seperti xs.nearest(A), xs.maxY, atau xs.minX; urutan di balik xs[0] dapat berubah saat bergerak.

Lintasan, fungsi, dan daerah ​

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)

Ruas garis, garis, sinar, lingkaran, elips, busur, plot fungsi, dan lokus mengimplementasikan perilaku Path. Semuanya dapat membawa titik terikat, saling berpotongan, dan digabungkan dengan subpath dan pathjoin.

Transformasi dan kerangka ​

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, dan scale tersedia baik sebagai fungsi ekspresi maupun sebagai perintah. Transformasi kesebangunan mempertahankan jenis objek bila memungkinkan.

Perintah bangun ruang (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
KomponenBentuk umum
Titik dan garispoint3, segment3, line3, ray3, vector3
Bidang dan bolaplane ground A B C, sphere s O radius r
Bangun ruangbox, prism, pyramid, cylinder, cone
Kerangkaframe3 f O X Y, point3 P in f x y z
Kurva ruangcurve3, locus3
Permukaan fungsisurface waves f domain x0 x1 y0 y1
Perpotonganintersections3, plane_intersect_line, sphere_intersect_sphere
Transformasireflect3, rotate3, translate3, scale3

Di 3D, sebuah titik dapat terikat pada ruas garis, garis, sinar, atau permukaan bola. Titik pada bola memakai dua parameter:

txt
point3 P on ball atAngles 45deg 90deg

box, prism, pyramid, cylinder, dan cone menyediakan ukuran seperti .volume, .surfaceArea, dan .centroid. curve3 dan locus3 adalah objek tampilan hasil pencuplikan dan saat ini bukan pembawa bagi titik terikat.

Parameter, animasi, dan tahapan ​

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 membuat penggeser di panel Parameter.
  • animate mendukung loop, pingpong, dan once.
  • stage membuat langkah presentasi berurutan; show, hide, clear, dan mode reveal mengatur kehadiran objek.
  • Pemutaran 2D, pemutaran 3D, dan ekspor GIF/MP4 berbagi lini masa yang sama.

Perintah presentasi ​

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 mengatur warna, isian, lebar, opasitas, dan ukuran titik/panah; 2D juga mendukung pola garis putus-putus. Teks label yang seluruhnya dibungkus $$…$$ dirender sebagai LaTeX. textbox hanya untuk 2D.

Makro dan asersi ​

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 menggunakan ulang sebuah konstruksi dan mengisolasi nama internalnya saat diperluas. assert memeriksa suatu hubungan dan menghasilkan peringatan; ia tidak membatasi atau menyelesaikan gambar.

Menanyakan tanda tangan yang tepat di aplikasi ​

Halaman ini mengelompokkan perintah yang sering dipakai menurut tujuannya. Untuk tanda tangan yang tepat dan lengkap dari versi yang terinstal:

  • gunakan bantuan di editor Eidolang;
  • minta Agen di aplikasi memanggil list_commands;
  • panggil alat yang sama dari klien MCP/REST eksternal.

Daftar yang dikembalikan berasal langsung dari registri parser dialek yang aktif, sehingga selalu selaras dengan build yang terinstal.