Tài liệu tham chiếu ngôn ngữ Eidolang
Eidolang là biểu diễn văn bản của một hình trong Eidograph. Một hình là một tập lệnh: các lệnh tạo ra đối tượng, biểu thức thiết lập quan hệ phụ thuộc, còn kiểu dáng và hoạt ảnh vẫn nằm trong cùng văn bản đó. Thao tác kéo, công cụ trên khung vẽ và thay đổi thuộc tính rốt cuộc đều ghi ngược vào tập lệnh này.
Trang này chỉ mô tả ngôn ngữ hiện hành, Eidolang 0.2; không có cú pháp đã bị loại bỏ. Để xem các tập lệnh hoàn chỉnh có thể chạy được, hãy truy cập các dự án mẫu.
Khung của một tập lệnh
Mỗi tập lệnh nên bắt đầu bằng một khai báo không gian:
space plane
version 0.2
# Mỗi dòng một lệnh; # bắt đầu một chú thích
point A -2 0
point B 2 0
segment base A B
point M = midpoint(A, B)space planechọn phương ngữ 2D;space solidchọn phương ngữ 3D.version 0.2là tùy chọn. Đó là phiên bản ngôn ngữ, không phải phiên bản manifest của.eido.- Tên phân biệt chữ hoa chữ thường và phải được định nghĩa trước khi dùng.
- Hằng số góc trần được tính bằng radian; hãy viết rõ giá trị độ, chẳng hạn
45deg. - Chuỗi dùng dấu nháy kép. Màu có thể dùng các dạng như
#3366cc.
Mô hình bậc tự do
Mỗi đối tượng hình học thuộc về đúng một bậc:
| Bậc | Định nghĩa | Hành vi |
|---|---|---|
| Tự do | Tọa độ hoặc giá trị là hằng số | Kéo trực tiếp hoặc chỉnh trong bảng thuộc tính |
| Ràng buộc | Dùng on … at … hoặc tọa độ cục bộ trên một giá | Chỉ di chuyển trên giá của nó |
| Dẫn xuất | Dùng biểu thức = dựa trên các đối tượng khác | Không kéo được; cập nhật khi đầu vào thay đổi |
point A 0 0 # tự do
point P on c at 0.25 # ràng buộc
point M = midpoint(A, P) # dẫn xuấtGiá trị và biểu thức dùng chung
Biểu thức vô hướng hỗ trợ + - * / ^, dấu ngoặc, phép so sánh và phép toán logic. Các hằng số gồm pi, tau và e; các hàm thông dụng gồm sin, cos, tan, sqrt, abs, min, max và các hàm khoảng cách/vectơ.
Thuộc tính của đối tượng có thể làm đầu vào cho các biểu thức sau, chẳng hạn base.length, c.radius và poly.area. let lưu giá trị của bất kỳ biểu thức nào, còn fn định nghĩa một hàm cho đồ thị hoặc mặt:
let half = base.length / 2
fn wave(x) = sin(x) * half
plot graph wave domain -6 6Giá trị không hợp lệ không làm ứng dụng bị sập. Chẩn đoán báo vị trí mã nguồn và lý do, còn các đối tượng phía sau trở thành bản ghi không hợp lệ hoặc cảnh báo.
Lệnh mặt phẳng (2D)
Dựng các đối tượng cơ bản
| Thành phần | Dạng thường gặp |
|---|---|
| Điểm | point A x y, point P on path at t, point M = expr |
| Dạng đường | segment s A B, line l A B, ray r A B, vector v A B |
| Đường tròn | circle c O radius r, circle c O through A |
| Elip và cung | ellipse e F1 F2 through P, arc a P1 P2 P3 |
| Đa giác | polygon tri A B C |
| Phép dựng chuẩn | midpoint M A B, parallel p A l, perpendicular p A l |
| Giao điểm | intersections xs pathA pathB |
Kết quả giao điểm là list<point>. Nên dùng các bộ chọn ổn định như xs.nearest(A), xs.maxY hoặc xs.minX; thứ tự phía sau xs[0] có thể thay đổi khi chuyển động.
Đường, hàm số và miền
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)Đoạn thẳng, đường thẳng, tia, đường tròn, elip, cung, đồ thị hàm số và quỹ tích đều có hành vi của Path. Chúng có thể mang các điểm ràng buộc, cắt nhau và được ghép bằng subpath và pathjoin.
Phép biến hình và hệ trục
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 và scale đều dùng được cả dưới dạng hàm trong biểu thức lẫn lệnh. Các phép đồng dạng giữ nguyên loại đối tượng khi có thể.
Lệnh khối (3D)
space solid
point3 O 0 0 0
point3 T 0 0 3
sphere ball O radius 2
cylinder body O T radius 1| Thành phần | Dạng thường gặp |
|---|---|
| Điểm và đường thẳng | point3, segment3, line3, ray3, vector3 |
| Mặt phẳng và mặt cầu | plane ground A B C, sphere s O radius r |
| Hình khối | box, prism, pyramid, cylinder, cone |
| Hệ trục | frame3 f O X Y, point3 P in f x y z |
| Đường cong không gian | curve3, locus3 |
| Mặt hàm số | surface waves f domain x0 x1 y0 y1 |
| Giao điểm | intersections3, plane_intersect_line, sphere_intersect_sphere |
| Phép biến hình | reflect3, rotate3, translate3, scale3 |
Trong 3D, một điểm có thể ràng buộc vào đoạn thẳng, đường thẳng, tia hoặc mặt cầu. Điểm trên mặt cầu dùng hai tham số:
point3 P on ball atAngles 45deg 90degbox, prism, pyramid, cylinder và cone cung cấp các số đo như .volume, .surfaceArea và .centroid. curve3 và locus3 là các đối tượng hiển thị được lấy mẫu và hiện chưa làm giá cho điểm ràng buộc.
Tham số, hoạt ảnh và giai đoạn
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.8sparamtạo một thanh trượt trong bảng Tham số.animatehỗ trợloop,pingpongvàonce.stagetạo các bước trình bày tuần tự;show,hide,clearvà các chế độ reveal điều khiển sự hiện diện.- Phát 2D, phát 3D và xuất GIF/MP4 dùng chung một dòng thời gian.
Lệnh trình bày
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 điều khiển màu, phần tô, độ rộng, độ mờ đục và cỡ điểm/mũi tên; 2D còn hỗ trợ kiểu nét đứt. Văn bản nhãn được bao trọn bởi $$…$$ sẽ được kết xuất dưới dạng LaTeX. textbox chỉ có ở 2D.
Macro và khẳng định
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 tái sử dụng một bản dựng và cô lập các tên bên trong nó khi mở rộng. assert kiểm tra một quan hệ và tạo ra cảnh báo; nó không ràng buộc hay giải hình.
Tra cứu chữ ký chính xác trong ứng dụng
Trang này sắp xếp các lệnh thường dùng theo mục đích. Để có chữ ký chính xác, đầy đủ của phiên bản đã cài đặt:
- dùng trợ giúp trong trình soạn thảo Eidolang;
- nhờ tác tử trong ứng dụng gọi
list_commands; - gọi cùng công cụ đó từ một máy khách MCP/REST bên ngoài.
Danh sách trả về lấy trực tiếp từ sổ đăng ký bộ phân tích cú pháp của phương ngữ đang hoạt động, nên luôn khớp với bản dựng đã cài đặt.
