1. Giới thiệu chung về Scratch và hình elip

Scratch là một môi trường lập trình trực quan, được thiết kế dành cho trẻ em và người mới bắt đầu học lập trình. Với giao diện kéo‑thả các khối lệnh, người dùng có thể tạo ra các dự án hoạt họa, trò chơi, câu chuyện tương tác mà không cần viết mã phức tạp. Mặc dù Scratch cung cấp sẵn một bộ công cụ vẽ hình cơ bản (hình tròn, hình vuông, đa giác…), nhưng hình elip không có trong danh sách các hình vẽ sẵn có. Vì vậy, để vẽ elip trong Scratch, chúng ta cần tự xây dựng thuật toán và các khối lệnh mô phỏng quá trình vẽ.

Trong bài viết này, chúng ta sẽ:

  1. Hiểu nguyên lý hình elip – công thức toán học và cách chuyển đổi thành các bước vẽ.
  2. Xây dựng khối lệnh Scratch để vẽ elip một cách chính xác.
  3. Mở rộng: vẽ elip quay, thay đổi độ dày đường viền, tô màu, và tạo hiệu ứng chuyển động.
  4. Ứng dụng thực tế: sử dụng elip trong trò chơi, đồ họa UI, hoặc mô phỏng vật lý.

Bài viết được chia thành nhiều phần chi tiết, mỗi phần kèm theo ví dụ thực hành, hình ảnh mô tả (đối với môi trường Scratch thực tế) và lưu ý quan trọng. Khi đọc xong, bạn sẽ có thể tự tin vẽ bất kỳ hình elip nào trong Scratch, dù là tĩnh hay động, và tích hợp chúng vào dự án của mình.

2. Nguyên lý toán học của elip

2.1 Định nghĩa hình elip

Một elip là tập hợp các điểm trong mặt phẳng sao cho tổng khoảng cách từ hai tiêu điểm (foci) tới bất kỳ điểm nào trên elip luôn bằng một hằng số (độ dài trục lớn). Công thức chuẩn của elip có trục chính song song với các trục toạ độ là:

\frac{(x-h)^2}{a^2} + \frac{(y-k)^2}{b^2} = 1

Trong đó:
– ((h, k)) là tâm của elip.
– (a) là nửa độ dài trục lớn (đường kính theo chiều ngang nếu (a > b)).
– (b) là nửa độ dài trục nhỏ (đường kính theo chiều dọc).

Nếu muốn vẽ elip quay một góc (\theta) so với trục hoành, ta cần dùng ma trận quay:

\begin{pmatrix}
x’\ y’
\end{pmatrix}
=
\begin{pmatrix}
\cos\theta & -\sin\theta\
\sin\theta & \cos\theta
\end{pmatrix}
\begin{pmatrix}
x\ y
\end{pmatrix}

2.2 Thuật toán vẽ elip bằng phương pháp “điểm góc”

Trong Scratch, chúng ta không có hàm drawEllipse() sẵn có, nên phải mô phỏng việc di chuyển “bút” (sprite) dọc theo các điểm của elip. Hai cách phổ biến:

  1. Dùng tham số góc (θ) và tính tọa độ (x, y) theo công thức parametric

    x = h + a \cdot \cos \theta \
    y = k + b \cdot \sin \theta

    Tăng dần (\theta) từ 0 tới 360° (hoặc 2π rad) và đặt pen xuống mỗi bước.

  2. Dùng thuật toán Midpoint Ellipse (Bresenham mở rộng) – phức tạp hơn, dùng để vẽ pixel chính xác trên màn hình raster. Trong Scratch, cách 1 đủ cho hầu hết các dự án vì độ chính xác của sprite và tốc độ thực thi.

    Cách Vẽ Hình Elip Trong Scratch
    Cách Vẽ Hình Elip Trong Scratch

Vì Scratch hoạt động dựa trên khung hình (frame) và thời gian thực, cách parametric (phương pháp góc) là tối ưu: dễ lập trình, dễ điều chỉnh tốc độ, và cho phép tạo hiệu ứng mượt mà.

3. Chuẩn bị môi trường Scratch

3.1 Tạo sprite “Pen”

  1. Vào Choose a Sprite → Paint → Đặt tên là Pen.
  2. Trong Costumes, xóa mọi hình ảnh (để sprite không hiển thị hình ảnh nào, chỉ là điểm).
  3. Đánh dấu “Pen” trong tab Extensions → Pen để thêm các khối lệnh liên quan đến bút.

3.2 Thiết lập các biến cần thiết

  • a (nửa trục lớn)
  • b (nửa trục nhỏ)
  • h, k (tọa độ tâm)
  • theta (góc hiện tại, độ hoặc rad)
  • step (bước tăng góc, quyết định độ mịn của elip)
  • rotate (góc quay toàn bộ elip, nếu cần)

Các biến có thể là global hoặc local (đối với mỗi sprite). Đối với dự án đơn giản, tạo chúng dưới Variables → For all sprites.

3.3 Thêm khối lệnh cơ bản

  • when green flag clicked
  • clear (xóa mọi đường vẽ)
  • pen down (bắt đầu vẽ)
  • set pen size to (2) (độ dày đường viền)
  • set pen color to #ff0000 (màu đỏ, ví dụ)

4. Thuật toán vẽ elip cơ bản (không quay)

4.1 Bước 1: Khởi tạo giá trị

when green flag clicked
clear
pen up
go to x: (0) y: (0) // vị trí ban đầu, có thể để tại tâm
set a v to (100) // trục lớn 200px
set b v to (50) // trục nhỏ 100px
set h v to (0) // tâm tại (0,0)
set k v to (0)
set theta v to (0)
set step v to (5) // mỗi vòng lặp tăng 5 độ
pen down

4.2 Bước 2: Vòng lặp vẽ

repeat (360 / step) // số vòng lặp = 360/step set x v to ((h) + (a) cos (theta)) set y v to ((k) + (b) sin (theta)) go to x: (x) y: (y) change theta v by (step)
end
pen up

Giải thích:

  • cos và sin trong Scratch nhận tham số độ (không phải rad). Vì vậy theta được tính bằng độ.
  • Mỗi vòng lặp di chuyển sprite tới một điểm mới trên elip, đồng thời pen vẫn đang xuống (pen down) nên vẽ được đoạn thẳng giữa các điểm liên tiếp, tạo nên đường viền tròn tròn.
  • repeat (360 / step) đảm bảo vòng lặp chạy đủ một vòng tròn. Nếu step không chia hết 360, có thể dùng repeat until < (theta) > (360).

4.3 Kiểm tra kết quả

Nhấn Green Flag. Bạn sẽ thấy một elip màu đỏ, trung tâm tại (0,0), trục lớn 200px, trục nhỏ 100px. Độ mịn phụ thuộc vào step: giá trị nhỏ hơn (1‑2) cho đường viền mượt hơn nhưng tốn nhiều khối lệnh và thời gian tính.

Cách Vẽ Hình Elip Trong Scratch
Cách Vẽ Hình Elip Trong Scratch

5. Vẽ elip quay (có góc xoay)

Khi muốn elip nghiêng một góc (\alpha) (rotate), chúng ta áp dụng ma trận quay vào công thức parametric:

\begin{aligned}
x &= h + a \cos\theta \cos\alpha – b \sin\theta \sin\alpha \
y &= k + a \cos\theta \sin\alpha + b \sin\theta \cos\alpha
\end{aligned}

5.1 Thêm biến rotate

set rotate v to (30) // góc xoay 30 độ

5.2 Cập nhật vòng lặp

repeat (360 / step) // tính góc theta (độ) set cosT v to (cos (theta)) set sinT v to (sin (theta)) set cosR v to (cos (rotate)) set sinR v to (sin (rotate)) // công thức quay set x v to ((h) + (a) (cosT) (cosR) - (b) (sinT) (sinR)) set y v to ((k) + (a) (cosT) (sinR) + (b) (sinT) (cosR)) go to x: (x) y: (y) change theta v by (step)
end

5.3 Kiểm tra

Thay đổi giá trị rotate (0‑360) và quan sát elip xoay tương ứng. Bạn có thể tạo slider cho biến rotate để người dùng điều chỉnh thời gian thực.

6. Tô màu và tạo đường viền dày hơn

6.1 Đường viền dày

set pen size to (5) // độ dày 5 pixel

6.2 Tô màu bên trong elip

Scratch không hỗ trợ “fill” trực tiếp cho đường vẽ tự do. Tuy nhiên, chúng ta có thể sử dụng sprite hình elip để tô màu, hoặc vẽ nhiều vòng tròn đồng tâm với độ giảm dần.

Cách 1: Dùng sprite “Shape”

  1. Tạo một sprite mới → Paint → Vẽ một elip bằng công cụ ellipse, đặt màu nền mong muốn.
  2. Đặt center của sprite tại tâm (0,0).
  3. Khi cần vẽ elip, chỉ cần go to vị trí cần, show sprite, và set size để điều chỉnh tỷ lệ a và b.

Cách 2: Vẽ “fill” bằng vòng lặp ngược

set pen size to (1)
set pen color to #ffcccc // màu nền
repeat (b) // b là nửa trục nhỏ, dùng để giảm dần // vẽ elip với a, b hiện tại // (sử dụng thuật toán parametric ở mục 4) // sau khi vẽ, giảm a và b một ít change a v by (-1) change b v by (-1)
end

Kết quả: các vòng elip dày dần từ ngoài vào trong tạo cảm giác tô màu.

7. Hiệu ứng động: Elip quay liên tục

Cách Vẽ Hình Elip Trong Scratch
Cách Vẽ Hình Elip Trong Scratch

Để tạo một elip quay liên tục (ví dụ: quay tròn như bánh xe), ta đặt vòng lặp forever và cập nhật rotate mỗi khung hình.

when green flag clicked
clear
pen up
go to x: (0) y: (0)
set a v to (120)
set b v to (60)
set rotate v to (0)
pen down
forever clear // xóa hình cũ set theta v to (0) // reset góc // vẽ elip với rotate hiện tại repeat (360 / step) // (công thức quay như mục 5.2) ... end change rotate v by (2) // mỗi khung quay 2 độ wait (0.02) seconds // tốc độ mượt
end

Lưu ý: clear trong vòng lặp sẽ xóa toàn bộ đồ họa trên stage, vì vậy chỉ nên dùng khi không có các sprite khác cần giữ lại. Nếu muốn giữ các sprite, có thể chỉ xóa pen trails bằng khối pen clear.

8. Ứng dụng thực tế của elip trong Scratch

8.1 Tạo nút UI hình elip

  • Dùng sprite hình elip (tạo trong Paint) làm button.
  • Thêm script when this sprite clicked để thực hiện hành động (bắt đầu trò chơi, mở menu…).

8.2 Mô phỏng quỹ đạo hành tinh

  • Mỗi hành tinh di chuyển dọc theo một elip với bán trục lớn và nhỏ khác nhau.
  • Sử dụng biến thời gian t để tính vị trí (x, y) và cập nhật vị trí sprite hành tinh.

8.3 Trò chơi “Bắn bóng” (Pong) với paddle elip

  • Thay paddle hình chữ nhật bằng một elip dẹt.
  • Khi bóng chạm vào paddle, tính góc phản xạ dựa trên vị trí chạm so với trục trung tâm elip.

8.4 Hiệu ứng “điệu nghệ” (visualizer)

  • Vẽ nhiều elip đồng tâm, thay đổi màu sắc và độ rộng theo nhạc (sử dụng Music extension để lấy độ lớn âm thanh).

9. Tối ưu hoá và lưu ý khi vẽ elip trong Scratch

Vấn đề Giải pháp
Độ mịn thấp (đường nét gồ ghề) Giảm step xuống 1‑2 độ; tăng số vòng lặp.
Vẽ chậm, lag Giảm số vòng lặp, dùng pen clear thay vì clear để không xóa toàn bộ stage; hoặc vẽ elip một lần rồi duplicate sprite nếu không cần thay đổi.
Không đồng nhất khi xoay Đảm bảo tính toán cos và sin cho rotate luôn bằng độ; tránh trùng lặp biến theta và rotate.
Không thể tô màu đầy đủ Dùng sprite hình elip để fill, hoặc vẽ nhiều vòng tròn đồng tâm như đã mô tả.
Độ dày đường viền không đồng đều Đặt pen size trước khi bắt đầu vòng lặp và không thay đổi trong quá trình vẽ.

10. Tổng kết

  • Scratch không có khối vẽ elip mặc định, nhưng bằng cách áp dụng công thức parametric và ma trận quay, chúng ta có thể tạo ra elip bất kỳ kích thước, góc quay, màu sắc và độ dày đường viền.
  • Thuật toán góc (θ) là cách đơn giản, trực quan và phù hợp với môi trường kéo‑thả của Scratch.
  • Tô màu có thể thực hiện bằng sprite hình elip hoặc vòng lặp “fill” bằng các elip đồng tâm.
  • Hiệu ứng động (quay, di chuyển) được xây dựng bằng vòng lặp forever và cập nhật biến rotate hoặc theta theo thời gian.
  • Ứng dụng rộng rãi: UI, trò chơi, mô phỏng vật lý, visualizer âm nhạc.

Hy vọng qua bài viết chi tiết này, bạn đã nắm vững cách vẽ hình elip trong Scratch, từ cơ bản tới nâng cao, và có thể áp dụng ngay vào dự án của mình. Hãy thử nghiệm, sáng tạo và chia sẻ những tác phẩm độc đáo của bạn với cộng đồng Scratch!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *