Skip to content

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:

txt
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 plane chọn phương ngữ 2D; space solid chọn phương ngữ 3D.
  • version 0.2 là 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ĩaHành vi
Tự doTọ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ộcDù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ấtDùng biểu thức = dựa trên các đối tượng khácKhông kéo được; cập nhật khi đầu vào thay đổi
txt
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ất

Giá 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:

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

Giá 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ầnDạng thường gặp
Điểmpoint A x y, point P on path at t, point M = expr
Dạng đườngsegment s A B, line l A B, ray r A B, vector v A B
Đường tròncircle c O radius r, circle c O through A
Elip và cungellipse e F1 F2 through P, arc a P1 P2 P3
Đa giácpolygon tri A B C
Phép dựng chuẩnmidpoint M A B, parallel p A l, perpendicular p A l
Giao điểmintersections 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 ​

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)

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

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

txt
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ầnDạng thường gặp
Điểm và đường thẳngpoint3, segment3, line3, ray3, vector3
Mặt phẳng và mặt cầuplane ground A B C, sphere s O radius r
Hình khốibox, prism, pyramid, cylinder, cone
Hệ trụcframe3 f O X Y, point3 P in f x y z
Đường cong không giancurve3, locus3
Mặt hàm sốsurface waves f domain x0 x1 y0 y1
Giao điểmintersections3, plane_intersect_line, sphere_intersect_sphere
Phép biến hìnhreflect3, 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ố:

txt
point3 P on ball atAngles 45deg 90deg

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

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 tạo một thanh trượt trong bảng Tham số.
  • animate hỗ trợ loop, pingpong và once.
  • stage tạo các bước trình bày tuần tự; show, hide, clear và 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 ​

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

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