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:
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 planememilih dialek 2D;space solidmemilih dialek 3D.version 0.2bersifat 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:
| Tingkat | Definisi | Perilaku |
|---|---|---|
| Bebas | Koordinat atau nilai berupa literal | Seret langsung atau edit di panel properti |
| Terikat | Memakai on … at … atau koordinat lokal terhadap sebuah pembawa | Hanya bergerak pada pembawanya |
| Turunan | Memakai ekspresi = berdasarkan objek lain | Tidak dapat diseret; diperbarui saat masukan berubah |
point A 0 0 # bebas
point P on c at 0.25 # terikat
point M = midpoint(A, P) # turunanNilai 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:
let half = base.length / 2
fn wave(x) = sin(x) * half
plot graph wave domain -6 6Nilai 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
| Komponen | Bentuk umum |
|---|---|
| Titik | point A x y, point P on path at t, point M = expr |
| Serupa garis | segment s A B, line l A B, ray r A B, vector v A B |
| Lingkaran | circle c O radius r, circle c O through A |
| Elips dan busur | ellipse e F1 F2 through P, arc a P1 P2 P3 |
| Poligon | polygon tri A B C |
| Konstruksi standar | midpoint M A B, parallel p A l, perpendicular p A l |
| Perpotongan | intersections 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
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
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, dan scale tersedia baik sebagai fungsi ekspresi maupun sebagai perintah. Transformasi kesebangunan mempertahankan jenis objek bila memungkinkan.
Perintah bangun ruang (3D)
space solid
point3 O 0 0 0
point3 T 0 0 3
sphere ball O radius 2
cylinder body O T radius 1| Komponen | Bentuk umum |
|---|---|
| Titik dan garis | point3, segment3, line3, ray3, vector3 |
| Bidang dan bola | plane ground A B C, sphere s O radius r |
| Bangun ruang | box, prism, pyramid, cylinder, cone |
| Kerangka | frame3 f O X Y, point3 P in f x y z |
| Kurva ruang | curve3, locus3 |
| Permukaan fungsi | surface waves f domain x0 x1 y0 y1 |
| Perpotongan | intersections3, plane_intersect_line, sphere_intersect_sphere |
| Transformasi | reflect3, rotate3, translate3, scale3 |
Di 3D, sebuah titik dapat terikat pada ruas garis, garis, sinar, atau permukaan bola. Titik pada bola memakai dua parameter:
point3 P on ball atAngles 45deg 90degbox, 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
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.8sparammembuat penggeser di panel Parameter.animatemendukungloop,pingpong, danonce.stagemembuat 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
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 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
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.
