Pages

Subscribe

Thứ Năm, 12 tháng 3, 2009

NGÔN NGỮ LẬP TRÌNH VIOLET SCRIPT

1. Tổng quan

1.1. Giới thiệu sơ lược

1.2. Các đặc điểm chính của ngôn ngữ

1.2.1. Ngôn ngữ mô phỏng

1.2.2. Lựa chọn chế độ chạy song song hoặc tuần tự

1.2.3. Khả năng sử dụng các thư viện mở

1.2.4. So sánh ngôn ngữ VS với Timeline

1.3. Sử dụng Violet Script trong Violet

1.4. Cấu trúc ngôn ngữ

1.4.1. Chương trình viết bằng VS

1.4.2. Các lệnh đơn giản

1.4.3. Các biểu thức

1.4.4. Các lệnh có cấu trúc

1.4.5. Các nhãn

2. Ngôn ngữ Violet Script trong tạo bài giảng

2.1. Khả năng của ngôn ngữ

2.2. Các ứng dụng

2.3. Ví dụ

3. Các lệnh trong VS

3.1. Các lệnh xử lý đối tượng

3.2. Các lệnh xử lý đa giác

3.3. Các lệnh đồ họa

3.4. Các lệnh phục vụ tính toán trong hình học phẳng

3.5. Các lệnh chờ đợi

3.6. Các lệnh phục vụ xử lý tương tác

3.7. Các lệnh điều khiển hệ thống

4. Các bài toán mẫu

4.1. Giới thiệu

4.2. Vẽ đồ thị hàm số

4.3. Bài toán quỹ tích

4.4. Tam giác Napoleon

4.5. Dựng tam giác biết 3 cạnh

4.6. Mô phỏng con lắc lò xo

 


1. Tổng quan

1.1. Giới thiệu sơ lược

Violet Script (VS) là ngôn ngữ lập trình chuyên dụng về đồ họa, đặc biệt trong việc tạo ra các hoạt động mô phỏng. Ngôn ngữ này có thể được sử dụng rất hiệu quả để xây dựng các phần mềm multimedia hỗ trợ dạy học. Với cấu trúc đơn giản nhưng đầy đủ và chặt chẽ, VS sẽ giúp người dùng có thể dễ dàng mô tả các ý tưởng của mình, hoặc có thể sửa đổi một sản phẩm có sẵn cho phù hợp kịch bản của mình.

Khác với một phần mềm công cụ, việc sử dụng ngôn ngữ lập trình có tính mở cao hơn, nó cho phép người dùng không phải chỉ là sử dụng các mẫu mô phỏng có sẵn mà còn có thể tự tạo ra các mẫu mới, hoặc sửa đổi được những mẫu đã có một cách tùy ý (sửa các tham số, nội dung và trình tự thể hiện, v.v...). Như vậy, khả năng đáp ứng yêu cầu người dùng của một ngôn ngữ lập trình là cao hơn rất nhiều so với một phần mềm công cụ.

VS được xây dựng dựa trên ngôn ngữ Action Script 2.0 của Macromedia Flash, chính vì vậy, VS rất mạnh trong việc thực hiện các mô phỏng có chuyển động và tương tác, có xử lý âm thanh và hình ảnh. Tất nhiên, việc lập trình bằng VS thì đơn giản hơn nhiều so với lập trình bằng Action Script.

Các file mã nguồn của VS đều có thể sử dụng được mã văn bản Unicode hoặc Unicode UTF-8. Chính vì vậy, không chỉ có các dữ liệu, lời giải thích mà kể cả tên các đối tượng (tên biến, tên nhãn, tên lệnh, tên hàm…) đều có thể dùng được bằng tiếng Việt có dấu, giúp người dùng Việt Nam dễ tiếp cận hơn nhiều so với một ngôn ngữ bằng tiếng Anh.

 

1.2. Các đặc điểm chính của ngôn ngữ

1.2.1. Ngôn ngữ mô phỏng

Ngôn ngữ lập trình VS hỗ trợ rất nhiều về các kỹ thuật mô phỏng. Các thao tác về đồ họa và mô phỏng hầu hết đã được lập trình sẵn, lại thêm khả năng mở nạp thư viện động, khả năng sử dụng các dữ liệu âm thanh, hình ảnh một cách dễ dàng, VS sẽ giúp người cho người dùng có thể viết được những phần mềm đồ họa cao cấp mà không cần những kiến thức chuyên sâu về đồ họa.

Có thể coi việc lập trình mô phỏng bằng ngôn ngữ VS chỉ đơn giản là việc mô tả lại kịch bản của quá trình mô phỏng. Sau đó, trình thông dịch của VS sẽ thực hiện các công việc đồ họa và mô phỏng theo như kịch bản này. Do vậy, người dùng hoàn toàn có thể tạo được một quá trình mô phỏng phức tạp chỉ bằng một đoạn chương trình VS rất ngắn gọn (so với các ngôn ngữ lập trình khác).

1.2.2. Lựa chọn chế độ chạy song song hoặc tuần tự

Các ngôn ngữ thông dịch thường phải chạy dưới dạng tuần tự (chạy hết lệnh này rồi mới đến lệnh khác). Tuy vậy, trong mô phỏng, đôi khi ta cần tạo nhiều thao tác mô phỏng đồng thời (ví dụ như hai hay nhiều vật cùng chuyển động một lúc). Vì vậy, VS có thể cho phép người lập trình thiết lập được chế độ xử lý lệnh là song song hay tuần tự.

Đây cũng là một đặc điểm độc đáo và tiện dụng của ngôn ngữ VS so với các ngôn ngữ lập trình khác.

1.2.3. Khả năng sử dụng các thư viện mở

Tuy VS là ngôn ngữ chuyên dụng trong lĩnh vực đồ họa và mô phỏng, song đồ họa là một lĩnh vực rất rộng nên VS chỉ có tính tổng quát. Nó không thể bao hàm được hết tất cả các thao tác mô phỏng, chương trình thông dịch VS cũng không thể chứa tất cả các dữ liệu, thư viện hình ảnh thông dụng cho mọi sản phẩm. Tuy nhiên, đối với người lập trình không chuyên, vấn đề đặt ra là phải làm sao cho mọi thứ hầu như đã có sẵn hết.

Vì vậy, ngôn ngữ VS có một hệ thống thư viện đầy đủ kèm theo và cập nhật thường xuyên. Các thư viện này chứa nhiều hình ảnh, mô hình, biểu tượng thông dụng và có thể lấy ra sử dụng một cách dễ dàng, các thao tác chuyển động được lập trình sẵn, các mẫu chương trình chuẩn cũng có thể sử dụng với khả năng tùy biến cao.

Ví dụ: trong việc tạo bài giảng, nếu phân loại theo các môn học thì ngôn ngữ VS (cụ thể là trình thông dịch của ngôn ngữ VS) sẽ phục vụ cho tất cả các môn. Tuy nhiên, thư viện sử dụng cho từng môn sẽ khác nhau, nghĩa là ta sẽ có thư viện cho môn Toán, thư viện cho môn Vật Lý, v.v… Như vậy, khả năng cải tiến chương trình và cập nhật tư liệu của VS sẽ trở nên dễ dàng.

Thư viện động là một trong những ưu điểm hơn hẳn của VS so với hầu hết các phần mềm công cụ tạo bài giảng hiện nay.

 

1.2.4. So sánh ngôn ngữ VS với Timeline

Những người đã từng dùng hoặc xem các chương trình như Macromedia Flash, Macromedia Diector, Adobe Premier,… hẳn không thể không biết đến khái niệm Timeline (trục thời gian). Đây là một công cụ thiết kế rất quan trọng trong việc tạo ra các chuyển động, các hiệu ứng của hình ảnh và âm thanh, làm phim hoạt hình, xây dựng cấu trúc của một sản phẩm,… Timeline là một công cụ rất hữu ích, đặc biệt đối với người không biết lập trình cũng có thể dùng nó để xây dựng phần mềm multimedia ứng dụng được.

Tuy nhiên điểm nhược cơ bản của Timeline là không có tính mở. Ví dụ: dùng Timeline có thể dễ dàng tạo một chuyển động trong vòng 3 giây, nhưng không thể dùng Timeline để tạo chuyển động trong vòng n giây, với n là một giá trị được nhập từ bàn phím hoặc từ file bên ngoài.

Trong khi đó, việc xây dựng các phần mềm trợ giảng lại đòi hỏi công cụ phải có tính mở. Vì bài giảng của mỗi giáo viên là không giống nhau, nên phần mềm trợ giảng phải cho phép giáo viên tự sửa theo ý mình được. Trong trường hợp này, người sản xuất phần mềm không còn cách nào khác là phải lựa chọn một ngôn ngữ lập trình.

Mặt khác, đối với những người biết lập trình rồi thì dùng ngôn ngữ cũng dễ chịu hơn so với dùng Timeline. Ví dụ: có thể sửa đổi số liệu một cách dễ dàng và chính xác, có thể comment (viết lời giải thích) cho các đoạn chương trình, có thể phân chia chương trình lớn thành các module nhỏ… Việc thao tác với các dòng code cũng dễ dàng hơn so với các đối tượng đồ họa và Timeline. Code có thể dùng bất cứ chương trình soạn thảo văn nào để tạo lập và sửa đổi chứ không cần phải một hệ thống đồ sộ như khi dùng Timeline.

Tuy vậy, dùng Timeline cũng có một ưu điểm hơn so với ngôn ngữ là tính ổn định, ít bị lỗi. Còn việc lập trình nếu không cẩn thận thì sẽ có thể sinh ra rất nhiều lỗi. Do đó, trong quá trình phát triển thì ngôn ngữ thì cũng phải dần dần khắc phục yếu điểm này.

 

1.3. Sử dụng Violet Script trong Violet

Violet Script khởi nguồn là một ngôn ngữ chạy độc lập, có thể dùng để tự xây dựng được các bài giảng hoàn chỉnh. Khi được kết hợp với công cụ Violet, ngôn ngữ này thường chỉ dùng để tạo một đoạn mô phỏng ngắn trên một trang màn hình, vì vậy nên sẽ đơn giản hơn và dễ quản lý hơn. Đối với người dùng thì vừa có được sự linh hoạt của ngôn ngữ, lại vừa sử dụng được các tính năng dễ dùng của Violet như tạo hiệu ứng, tạo các bài tập,...

Để sử dụng VS trong Violet, vào mục soạn thảo trang màn hình, nhấn nút “Công cụ”, một menu hiện lên, ta chọn mục “Lập trình mô phỏng”. Màn hình sau hiện ra và ta có thể soạn thảo trực tiếp chương trình vào đây.

clip_image002

Màn hình soạn thảo Script

Nếu chương trình có sử dụng các đối tượng ảnh, hoặc các thư viện mã nguồn từ file text, thì sau khi viết xong, click vào nút "Tiếp tục", màn hình sau hiện ra:

clip_image004

Màn hình nhập các mã nguồn bên ngoài và các đối tượng

Trong đó:

Khung phía trên cho phép nhập các file mã nguồn VS từ file text bên ngoài. Thông thường, Violet sẽ cung cấp sẵn một số file thư viện các thao tác chuẩn để có thể sử dụng được luôn.

Ta cũng có thể viết mã nguồn VS cho mô phỏng của mình ra file text bên ngoài, rồi nhập vào đây, mà không cần phải viết gì trong phần soạn thảo mã nguồn ở trước đó. Cách làm này hay hơn (và nên dùng), vì soạn thảo file text bên ngoài sẽ dễ dàng hơn là soạn trực tiếp trong Violet. Như trong hình trên ta thấy phần chương trình vẽ đường phân giác sẽ nằm trong file Vephangiac.vs chứ không phải nằm trong phần soạn thảo Script của Violet.

Khung phía dưới cho phép nhập các đối tượng hình ảnh sẽ được sử dụng trong phần mềm. Các đối tượng này có thể lấy từ file SWF hoặc file JPG. Tuy nhiên, chỉ có file SWF (làm bằng Flash) thì mới có thể chỉnh được vị trí nào trên ảnh là vị trí (0, 0). Ví dụ với một ảnh chiếc bút chì, ta căn chỉnh sao cho chỗ đầu bút chì chỉ đúng vào vị trí (0, 0) trong Flash. Khi đó, nếu ta dịch chuyển đối tượng bút chì tới vị trí (x, y) thì đầu bút chì sẽ chỉ đúng vào vị trí (x, y) đó. Còn nếu sử dụng ảnh JPG, thì vị trí góc trên bên trái của ảnh sẽ đúng vào vị trí (x, y) chứ không phải chỗ đầu bút chì.

Sau khi nhập xong chương trình, các file mã nguồn chuẩn và các file ảnh, ta nhấn nút "Đồng ý". Để sửa đổi mã nguồn hay các thông tin khác, ta click đúp vào bất kỳ đối tượng nào trong hoạt cảnh mô phỏng.

 

1.4. Cấu trúc ngôn ngữ

Violet Script 1.0, gần giống ngôn ngữ Basic ở các cấu trúc lệnh và ngôn ngữ C ở cấu trúc chương trình.

1.4.1. Chương trình viết bằng VS

Giống như C, chương trình VS bao gồm các hàm, trong đó hàm main sẽ được gọi ngay khi bắt đầu chạy chương trình.

      function main

      appear      Text, 8, 4, "Hello world"

      end

Một chương trình con (một hàm, chức năng) sẽ được khai báo như sau:

function <tên hàm> <các tham số>

      <lệnh 1>

      <lệnh 2>

      ...

end

Trong đó tên chương trình con không có dấu cách (có thể dùng dấu gạch chân "_" thay cho dấu cách). Các tham số thì phải khai báo cách nhau bởi dấu phẩy. Có thể xem thêm các ví dụ minh họa trong các phần sau.

Nếu chương trình con trả về các giá trị cho các tham số thì khi gọi ta nên thêm dấu & vào phía trước tham số (giống cú pháp của ngôn ngữ C). Ví dụ:

    input_line    &ax, &ay, &bx, &by

    get_point     &x, &y, x1, y1, angle, 2

1.4.2. Các lệnh đơn giản

Ngôn ngữ VS cung cấp các loại lệnh sau:

·         Các lệnh gán, ví dụ a = 2; a = 10*5 + 1; b = a^2 + a + 1

·         Các lệnh cơ bản: ví dụ lệnh appear như trong chương trình trên

·         Các lệnh gọi chương trình con: có cú pháp giống như lệnh cơ bản

1.4.3. Các biểu thức

Các biểu thức toán học có thể sử dụng trong vế phải của các lệnh gán, hoặc làm tham số của các lệnh khác. Một biểu thức bao gồm các thành phần:

·         Các toán hạng: giá trị số, biến số

·         Các toán tử: + , - , * , / , ^

·         Các hàm số: sin, cos, tg, cotg, arcsin, arccos, arctg, arccotg, abs, sqrt, ln

·         Các dấu ngoặc đơn"(" và ")"

Ví dụ tính góc B của tam giác ABC nếu biết độ dài 3 cạnh AB, AC và BC, áp dụng định lý hàm số cos.

 

      lenAB =   2

      lenAC =   3

      lenBC =   4

      angleB =  arccos((lenAB^2 + lenBC^2 - lenAC^2)/(2*lenAB*lenBC))

1.4.4. Các lệnh có cấu trúc

Lệnh điều kiện

      if <điều kiện> then

            <các lệnh>

      end_if

Lệnh lặp

      for <tên biến> from <cận dưới> to <cận trên> step <bước nhảy>

            <các lệnh>

      next

1.4.5. Các nhãn

Có thể coi nhãn là các lệnh đặc biệt, được ký hiệu bởi dấu ":" và tên nhãn. Nhãn dùng vừa để đánh dấu, vừa để mô tả các đoạn lệnh. Nhãn thường được dùng như một định danh để có thể truy cập (goto) đến đoạn lệnh từ bất kỳ vị trí nào trong chương trình.

Ví dụ:

function main

      goto        ERASE

:START

appear      Text, 8, 4, "Hello world"

wait_click

:ERASE

erase       Paper

wait_click

goto        START

end

2. VS trong mô phỏng Hình học

2.1. Khả năng của ngôn ngữ

Hiện tại, chúng tôi đã cung cấp sẵn một file mã nguồn chuẩn chứa các thao tác dựng hình cơ bản như vẽ đường thẳng bằng thước kẻ, vẽ đường tròn bằng compa, cắt ghép đa giác v.v... là “C:\Program Files\Platin Violet\Lecture\vpScript\Common\Mathtool.vs”

Vì vậy, trong môn Hình học, ngôn ngữ Violet Script sẽ hỗ trợ nhiều trong các loại công việc sau:

·         Vẽ hình trên màn hình đồ họa (đoạn thẳng, đường tròn, đồ thị,…)

·         Sử dụng các đối tượng có sẵn trong thư viện (ví dụ với môn hình học có: compa, thước kẻ, bút, tẩy, ê-ke, thước đo độ, giấy màu, dao cắt…), và mô phỏng hoạt động của từng đối tượng  này.

·         Xử lý các tương tác với người dùng (nhấn chuột, kéo thả, nhập từ bàn phím,…)

2.2. Các ứng dụng

Hiện tại chúng tôi đã cung cấp sẵn thư viện hình ảnh và các đoạn chương trình cơ bản dùng cho môn Hình học, với phạm vi ứng dụng là cấp THCS. Phần này sẽ chủ yếu tập trung vào Hình học Ơclit, bao gồm các loại bài toán như sau:

·         Bài toán vẽ hình và xử lý tương tác với người dùng

·         Bài toán dựng hình bằng các dụng cụ dựng hình thông dụng

·         Bài toán cắt ghép hình (mô phỏng việc cắt ghép các mảnh giấy màu)

·         Bài toán quỹ tích và vẽ đồ thị hàm số

 

2.3. Ví dụ

Ví dụ mô tả một bài toán dựng hình: vẽ trung trực của một đoạn thẳng được người dùng nhập vào khi chạy chương trình. Kịch bản của đoạn mô phỏng này như sau:

·        Người dùng nhấn chuột để xác định điểm thứ nhất, nhấn tiếp chuột để xác định điểm thứ hai

·        Đánh dấu và ký hiệu hai điểm A, B vừa nhập

·        Mô phỏng việc dùng thước kẻ và bút chì để vẽ một đoạn thẳng giữa hai điểm AB

·        Xuất hiện một compa và đưa compa vào vị trí của điểm A

·        Mở rộng compa (khoảng cách 2 đầu compa bằng khoảng 2/3 AB)

·        Quay compa một nửa vòng tròn (cung hướng vào điểm B). Trong khi quay compa thì cung tròn cũng sẽ được vẽ theo, nét vẽ phải mảnh và nhạt để thể hiện đây chỉ là vẽ nháp.

·        Đưa compa đến điểm B

·        Quay compa một nửa vòng tròn (cung hướng vào điểm A)

·        Dùng thước kẻ và bút chì để vẽ một đoạn thẳng đi qua 2 giao điểm của 2 cung tròn, độ dài của đoạn thẳng này là một giá trị hợp lý. Đó chính là đường trung trực của đoạn thẳng AB.

·        Đánh dấu điểm M là giao điểm của đường trung trực với đoạn thẳng AB

·        Ký hiệu góc M vuông

·        Ký hiệu M là trung điểm của AB

·        Xóa các nét cung tròn đã vẽ

 

Ta sẽ mã hóa kịch bản mô phỏng trên thành ngôn ngữ VS như sau:

 

function main

    appear          Text, 8.25, 0.5, "Hãy vẽ một đoạn thẳng", 2

    input_line      &ax, &ay, &bx, &by

    disappear       Text

    appear          Point, ax, ay, "A", below

    appear          Point, bx, by, "B", below

    create_line     ax, ay, bx, by

    radius =        sqrt((ax-bx)^2 + (ay-by)^2) / 3 * 2

    get_angle       &angle, ax, ay, bx, by

 

    set_paper       Draft

    appear          Compa

    move            Compa, ax, ay, angle-90

    call            Compa.OpenCompa, radius

    rotate_compa    Compa, radius, angle+90

    move            Compa, bx, by, angle+90

    rotate_compa    Compa, radius, angle+270

    disappear       Compa

 

    mx =            (ax + bx) / 2

    my =            (ay + by) / 2

    angle =         angle + 90

    get_point       &cx, &cy, mx, my, angle, 4

 

    set_paper       Paper

    create_line     cx, cy, 2 * mx - cx, 2 * my - cy

    appear          Point, mx, my, "M", leftbelow

    note_angle      0, "", bx, by, mx, my, cx, cy

    note_edge       0, "", ax, ay, mx, my

    note_edge       0, "", mx, my, bx, by

end

 

Lưu ý: Một đơn vị tính trong Violet Script được quy định mặc định là 40 pixel, độ rộng của màn hình hiển thị là 660x460 pixel, tức là khoảng 16.5x11.5 đơn vị.

Chương trình này sử dụng các thao tác dựng hình chuẩn (trong file Mathtool.vs) và các đối tượng hình ảnh: thước kẻ, bút chì, compa. Vì vậy, sau khi soạn xong chương trình, ta phải khai báo các dữ liệu này như sau:

clip_image006

 

Nhấn nút “Đồng ý”, ta sẽ được đoạn mô phỏng dựng đường trung trực của một đoạn thẳng bất kỳ được nhập vào từ con chuột (nhấn, kéo và thả).

 

clip_image008

 

Mô phỏng vẽ đường trung trực bằng compa, thước kẻ, bút chì

 

Có thể thấy việc viết một chương trình mô phỏng như trên chỉ đơn giản là mã hóa 1:1 kịch bản mô phỏng thành ngôn ngữ VS.

Rõ ràng việc tạo bài giảng Hình học bằng ngôn ngữ VS sẽ đơn giản hơn nhiều so với các ngôn ngữ lập trình khác. Ví dụ nếu sử dụng C/C++ thì để tạo một bài giảng, có thể phải viết chương trình dài đến hàng nghìn dòng lệnh và hàng chục file dữ liệu, còn nếu dùng ngôn ngữ VS thì chỉ cần vài chục dòng lệnh và không cần file dữ liệu.


3. Các lệnh trong VS

3.1. Các lệnh xử lý đối tượng

Trong thư viện của trình thông dịch VS môn Hình học có các loại đối tượng hình ảnh như sau:

Tên đối tượng

Ứng dụng

Hình ảnh

Point

(điểm)

Ký hiệu điểm trên hình vẽ

clip_image009

Ruler

(thước kẻ)

Sử dụng làm vật kê để vẽ các đoạn thẳng

clip_image011

Compa

(compa)

Dùng để vẽ các hình tròn hoặc cung tròn

clip_image013

Pencil

(bút chì)

Dùng để vẽ đoạn thẳng hoặc các đường đồ thị

clip_image015

Protractor

(thước đo góc)

Dùng để xác định góc trong việc vẽ góc

clip_image017

TSquare

(ê-ke)

Dùng để vẽ đoạn thẳng vuông góc với một đoạn thẳng có sẵn

clip_image019

Measurer

(thước đo)

Dùng để đo cạnh hoặc góc

Có hình dạng là thước kẻ hoặc thước đo góc tùy ý người sử dụng

Burin

(dao cắt)

Dùng để cắt các đa giác

clip_image021

 

 

 

 

Để sử dụng các loại đối tượng của VS cũng như các đối tượng được nạp từ thư viện bên ngoài, ngôn ngữ VS cung cấp các lệnh sau:

 

Tên lệnh

Tham số

Tác dụng

appear

xuất_hiện

1.      Tên đối tượng

2.      Tọa độ của đối tượng

3.      Tham số đặc trưng 1 (chỉ dùng cho một số đối tượng)

4.      Tham số đặc trưng 2 (chỉ dùng cho một số đối tượng)

Tạo lập và cho xuất hiện một đối tượng tại vị trí X, Y với các tham số cụ thể tùy theo loại đối tượng.

disappear

biến_mất

Tên một (hoặc nhiều) đối tượng

Làm cho các đối tượng biến mất (mờ dần rồi mất hẳn)

move

dịch_chuyển

1.      Tên đối tượng

2.      Tọa độ mới (x, y)

3.      Góc quay đối tượng

Vừa dịch chuyển vừa quay đối tượng tới vị trí mới và góc quay mới. Nếu không nhập góc quay thì góc quay mặc định là 0°.

 

 

 

 

Ví dụ dưới đây sẽ mô phỏng việc vẽ một điểm bằng bút chì

 

function main

appear Pencil             // Xuất hiện thước kẻ ở vị trí (0,0)

move Pencil, 5, 5         // Đưa bút chì ở vị trí (5, 5)

appear Point, 5, 5, A     // Xuất hiện điểm A ở vị trí (5, 5)

delay 12                  // Tạm dừng 1 giây

disappear Pencil          // Làm biến mất bút chì

end

 

 

clip_image022

Mô phỏng vẽ một điểm bằng bút chì

 


3.2. Các lệnh xử lý đa giác

Tên lệnh

Tham số

Tác dụng

polygon

đa_giác

Tên đa giác

Vị trí đa giác

Tọa độ các điểm của đa giác

Tạo một đa giác

clip

cắt

Tọa độ của 2 điểm bất kỳ nằm trên đường thẳng cắt

Cắt tất cả các đa giác trên màn hình theo một đường thẳng

unify

hợp

Tên đa giác

Tên các đa giác sẽ được hợp vào đa giác đầu tiên

Hợp nhiều đa giác thành một đối tượng

flip

lật

Tên đa giác

Lật một đa giác qua trục tung

 

 

 

 

Phần ví dụ dưới đây là một chương trình hoàn chỉnh, thực hiện việc cắt và ghép các góc của một tam giác để chứng minh tổng của chúng bằng 180°. Khi chạy, người dùng sẽ xác định các đường cắt qua góc thứ nhất và đường cắt qua góc thứ hai, sau mỗi lần cắt thì các mẩu cắt sẽ được ghép vào đúng vị trí cần thiết.

 

function main

    polygon     Tamgiac, 8, 6, 0x7F7FFF, -1, -3, 3, 1, -3, 1

    input_line  &px1, &py1, &px2, &py2

    cut_polygon px1, py1, px2, py2

    move        Tamgiac2, 4, 4, -180

    input_line  &px1, &py1, &px2, &py2

    cut_polygon px1, py1, px2, py2

    move        Tamgiac12, 10, 4, 180

end

 

clip_image024

 

Mô phỏng cắt một góc của hình tam giác bằng dao cắt

 


3.3. Các lệnh đồ họa

Tên lệnh

Tham số

Tác dụng

erase

Tên đối tượng cần xóa

Xóa nội dung của đối tượng

circle

Tọa độ của tâm

Bán kính đường tròn

Vẽ đường tròn biết tâm và bán kính.

line

Tọa độ 2 điểm đầu mút

Vẽ đoạn thẳng qua 2 điểm

note_angle

ký_hiệu_góc

Kiểu đánh dấu

Giá trị ký hiệu

Ba điểm hoặc 3 tọa độ điểm

Đánh dấu góc và ký hiệu giá trị của góc

note_edge

ký_hiệu_cạnh

Kiểu đánh dấu

Giá trị ký hiệu

Hai điểm hoặc 2 tọa độ điểm

Đánh dấu cạnh và ký hiệu giá trị của cạnh

attach_pen

Đối tượng

Tọa độ điểm được gắn bút

Gắn vào đối tượng một điểm, mà khi thay đổi vị trí của đối tượng thì điểm này sẽ lưu lại vết

detach_pen

Đối tượng

Gỡ bỏ điểm đã gắn ra khỏi đối tượng

 

 

 

 

Ví dụ vẽ tam giác qua 3 điểm (x1, y1), (x2, y2), (x3, y3) với đầy đủ ký hiệu cạnh góc

function ShowTriangle x1, y1, x2, y2, x3, y3

      poly_line     x1, y1, x2, y2, x3, y3, x1, y1

      set_paper     Paper, 2, 0x003FBF

      note_edge     2, "value", x2, y2, x1, y1

      note_edge     1, "value", x3, y3, x2, y2

      note_edge     0, "value", x1, y1, x3, y3

      note_angle    0, "value", x2, y2, x1, y1, x3, y3

      note_angle    2, "value", x3, y3, x2, y2, x1, y1

      note_angle    1, "value", x1, y1, x3, y3, x2, y2

end

 

function main

      ShowTriangle  2, 7, 7, 7, 3.5, 4

end

 

 

clip_image026

 

3.4. Các lệnh phục vụ tính toán trong hình học phẳng

 

Tên lệnh

Tham số

Tác dụng

get_point

lấy_điểm

Tọa độ của kết quả

Tọa độ của điểm gốc

Góc j

Khoảng cách R

Chuyển từ tọa độ cực sang tọa độ Đề-các (tính tọa độ của điểm biết R và j trong hệ tọa độ cực)

get_angle

lấy_góc

Góc j (kết quả)

Tọa độ của điểm

Tọa độ của điểm gốc

Kiểu vẽ đoạn thẳng

Lấy góc j (trong hệ tọa độ cực) từ tọa độ của một điểm so với điểm gốc

get_perpendicular

Tọa độ điểm kết quả

Tọa độ điểm

Tọa độ của hai điểm nằm trên đường thẳng

Tính vị trí của chân đường vuông góc hạ từ một điểm xuống một đường thẳng

get_intersection1

Tọa độ điểm kết quả

Tọa độ 2 điểm trên đường thẳng thứ nhất

Tọa độ 2 điểm trên đường thẳng thứ hai

Tính giao điểm giữa hai đường thẳng

get_intersection2

Tọa độ điểm kết quả thứ 1

Tọa độ điểm kết quả thứ 2

Tọa độ 2 điểm trên đường thẳng

Tọa độ tâm đường tròn

Bán kính đường tròn

Tính hai giao điểm của một đường thẳng và một đường tròn

 

 

 

 

3.5. Các lệnh chờ đợi

Tên lệnh

Tham số

Tác dụng

delay

trễ

Thời gian trễ

Dừng (trễ) một khoảng thời gian

wait_click

đợi_nhấn

Tên các nút đồ họa đang chờ được nhấn

Đợi cho đến khi người dùng click vào nút đồ họa trên màn hình. Nếu lệnh không có tham số nghĩa là chờ đến khi nhấn nút Next và nút Back.

Các nút đồ họa có thể được nạp từ file ngoài bằng lệnh load_movie

 

 

 

3.6. Các lệnh phục vụ xử lý tương tác

Tên lệnh

Tham số

Tác dụng

set_drag

kéo_thả

1.      Đối tượng cần thao tác

2.      Thao tác (true) hay không (false)

Thiết lập một đối tượng là có thể kéo thả được hay không

input_line

nhập_đoạn

Tọa độ 2 điểm đầu mút đoạn thẳng

Nhập một đoạn thẳng (2 điểm) bằng cách nhấn vào kéo chuột

input_point

Tọa độ điểm

Nhập một điểm bằng cách nhấn chuột

input_data

Tiêu đề hộp nhập

Tiêu đề và tham số thứ 1

Tiêu đề và tham số thứ 2

...

Hiện ra một hộp thoại cho phép nhập một hoặc nhiều tham số từ bàn phím

 

 

 

3.7. Các lệnh điều khiển hệ thống

Tên lệnh

Tham số

Tác dụng

parallel

song_song

Không

Thiết lập chế độ thực hiện các lệnh là song song

sequence

tuần_tự

Không

Thiết lập chế độ thực hiện các lệnh là tuần tự

Fscommand

1.      command

2.      param

Thực hiện lệnh fscommand của Flash Action Script.

 

 

 

3.8. Các lệnh trong thư viện Hình học

1) create_line x1, y1, x2, y2

Mô phỏng vẽ một đoạn thẳng bằng thước kẻ và bút chì từ điểm (x1, y1) đến điểm (x2, y2)

2) create_corner x1, y1, angle, len

Mô phỏng vẽ một góc bằng thước đo độ, thước kẻ, bút chì. Đầu tiên đưa thước đo độ đến vị trí của một đường nằm ngang, tâm thước là (x1, y1), lấy một điểm ở góc angle, rồi kẻ từ tâm đi qua điểm đó một đoạn có độ dài là len.

3) rotate_compa Compa, radius, angle

Quay đối tượng Compa một góc angle từ vị trí hiện tại, còn radius là độ mở của Compa (phải giống như ở lệnh call Compa.Open,… trước đó)

4) create_arc x1, y1, radius, start, end

Mô phỏng vẽ một cung tròn tâm (x1, y1), bán kính radius (được xác định bằng compa và thước kẻ), từ góc start đến góc end.

5) cut_polygon x1, y1, x2, y2

Mô phỏng cắt bằng dao cắt đối với tất cả các hình đa giác được tạo bằng lệnh polygon


4. Các bài toán mẫu

4.1. Giới thiệu

Các bài toán mẫu dưới đây là các ví dụ hoàn chỉnh viết bằng ngôn ngữ VS, giúp cho người đọc hiểu được ý tưởng cơ bản của việc lập trình, đồng thời cho thấy các quy tắc chung để tạo lập một chương trình VS. Người dùng hoàn toàn có thể sử dụng và phát triển các bài tập mẫu này theo những ý tưởng riêng của mình.

Các bài tập mẫu được trình bày ngắn gọn và dễ hiểu, với mục đích cho thấy khả năng tạo các bài giảng sinh động bằng VS là rất dễ dàng. Tất nhiên, những khả năng thực sự mà VS làm được còn lớn hơn nhiều so với những những gì thể hiện trong các ví dụ ở đây, mà thậm chí ngay cả tác giả của ngôn ngữ lập trình cũng chưa thể khám phá ra hết được.

4.2. Vẽ đồ thị hàm số

Trong chương trình học cấp 2 và cả cấp 3 đều có các bài tập vẽ đồ thị hàm số. Để giải quyết một bài tập này sẽ không hề đơn giản (phải tính đạo hàm, vi phân, khảo sát sự biến thiên hàm số,…), vậy mà cũng chỉ quanh quẩn ở một số dạng hàm số cơ bản. Tuy nhiên, với một ngôn ngữ lập trình bình thường, ta có thể vẽ được đồ thị bất kỳ mà không cần phải tính toán đạo hàm, vi phân,… Với VS, việc vẽ đồ thị còn dễ dàng hơn nhiều.

Ví dụ dưới đây sẽ vẽ đồ thị hàm số y = (x-2)*(x-1)*x*(x+1)*(x+2), nghĩa là một đồ thị cắt trục hoành tại các điểm -2, -1, 0, 1 và 2.

 

function main

    line 0, y0 = 6, 16, y0

    line x0 = 8, 0, x0, 12

    set_paper Paper, 3, 0xFF00FF

    appear Pencil

    attach_pen Pencil

    for x from -2.2 to 2.4 step 0.05

        y = (x-2)*(x-1)*x*(x+1)*(x+2)

        set_pos Pencil, x0 + x, y0 - y

        delay 1

    next

end

 

clip_image028


4.3. Bài toán quỹ tích

Bài toán 1: Cho một điểm A cố định nằm trong đường tròn tâm O, kẻ đường thẳng qua A cắt đường tròn tại P. Tìm quỹ tích trung điểm M của OP khi P chuyển động trên đường tròn.

 

function main

    set_paper Paper, 2, 0xBF00BF

    appear Point, ox=8, oy=6, "O", right

    appear Point, ax=8, ay=8, "A", left

    circle ox, oy, 4

    appear Point, 0, 0, "M"

    attach_pen PointM

 

    for angle from 135 to 135-360 step -2

        get_point &px, &py, ox, oy, angle, 4

        appear Point, px, py, "P"

        set_pos PointM, (px+ax)/2, (py+ay)/2

 

        set_paper Draft, 2, 0x0000BF

        erase

        line ax, ay, px, py

        note_edge 2, "", M, P

        note_edge 2, "", M, A

        delay 1

    next

end

 

clip_image030

 

Bài 2: Đường Cycloide

Đường quỹ tích được sinh ra khi một vòng tròn chạy xung quanh một vòng tròn khác. Trong phần chương trình dưới đây 3 biến số R1, R2 và L có thể được sửa đổi tùy ý sẽ tạo ra vô vàn những loại đường cycloide khác nhau.

 

function main

    R1 = 2.0

    R2 = 0.8

    L  = 2.0

    set_paper Draft, 2, 0

    circle x0=8.25, y0=5.75, R1

 

    set_paper Wheel, 2, 0x0000FF

    set_fill 0x7FBFFF, 50

    circle 0, 0, R2

    line 0, -R2, 0, R2

    line -R2, 0, L*R2, 0

    circle L*R2, 0, 0.1

 

    set_paper Paper, 3, 0xFF0000

    attach_pen Wheel, L*R2, 0

 

    for t from 0 to 720 step 2

        get_point &x, &y, x0, y0, t, R1+R2

        set_pos Wheel, x, y, t*(R1+R2)/R2

        delay 1

    next

    disappear Wheel

    disappear Draft

end

 

clip_image032

Mô phỏng cách vẽ đường Cycloide

 

clip_image034

Một trong những dạng đường Cycloide

 

4.4. Tam giác Napoleon

Từ 3 cạnh của 1 tam giác bất kỳ vẽ ra phía ngoài 3 tam giác đều. Tâm của 3 tam giác đều này sẽ là đỉnh của một tam giác đều gọi là tam giác Napoleon.

Phần chương trình dưới đây sẽ vẽ tam giác Napoleon. Người dùng có thể kéo thả các đỉnh của tam giác ban đầu để thấy tam giác Napoleon biến đổi như thế nào.

function vẽ_hình

    set_paper     Draft, 3, 0x0000FF

    erase

    get_pos       &x3, &y3, PointA

    get_pos       &x1, &y1, PointB

    get_pos       &x2, &y2, PointC

    poly_line     x1, y1, x2, y2, x3, y3, x1, y1

 

    set_paper     Draft, 2

    set_fill      0x7FBFFF, 50   

    get_angle     &angle, x1, y1, x3, y3

    get_point     &x, &y, x1, y1, angle+60, sqrt((x3-x1)^2+(y3-y1)^2)

    poly_line     x3, y3, x, y, x1, y1

    cx1 =         (x3 + x + x1) / 3

    cy1 =         (y3 + y + y1) / 3

 

    get_angle     &angle, x3, y3, x2, y2

    get_point     &x, &y, x3, y3, angle+60, sqrt((x3-x2)^2+(y3-y2)^2)

    poly_line     x3, y3, x, y, x2, y2

    cx2 =         (x3 + x + x2) / 3

    cy2 =         (y3 + y + y2) / 3

 

    get_angle     &angle, x2, y2, x1, y1

    get_point     &x, &y, x2, y2, angle+60, sqrt((x2-x1)^2+(y2-y1)^2)

    poly_line     x2, y2, x, y, x1, y1

    cx3 =         (x1 + x + x2) / 3

    cy3 =         (y1 + y + y2) / 3

    end_fill

 

    set_paper     Draft, 3, 0xFF0000

    set_fill      0xFF3F3F, 75   

    poly_line     cx1, cy1, cx2, cy2, cx3, cy3, cx1, cy1

end

 

function main

    appear        Point, ax=7, ay=3, "A", above

    appear        Point, bx=5, by=6, "B", leftbelow

    appear        Point, cx=11,cy=6, "C", rightbelow

    set_drag      PointA, true, vẽ_hình

    set_drag      PointB, true, vẽ_hình

    set_drag      PointC, true, vẽ_hình

    vẽ_hình

end

clip_image036

Tam giác Napoleon

4.5. Dựng tam giác biết 3 cạnh

Đây là một bài rất cơ bản trong dựng hình: Dựng một tam giác biết độ dài 3 cạnh mà chỉ dùng thước kẻ và compa.

function main

    input_data    "Nhập 3 cạnh", "AB", lenAB, "AC", lenAC, "BC", lenBC

    angleB =      arccos((lenAB^2 + lenBC^2 - lenAC^2)/(2*lenAB*lenBC))

    get_point     &ax, &ay, 4, 7, angleB, lenAB

    DrawTriangle  4, 7, 4+lenBC, 7, ax, ay, B, C, A

end

 

function DrawTriangle x1, y1, x2, y2, x3, y3, a1, a2, a3

    create_line2  x1, y1, x2, y2

    appear        Point, x1, y1, a1, below

    appear        Point, x2, y2, a2, below

    note_edge     -1, value, x2, y2, x1, y1

    delay         12

 

    set_paper     Draft

    create_arc    x1, y1, lenAB, 0, 90

    create_arc    x2, y2, lenAC, 90, 180

    appear        Point, x3, y3, a3, above

    delay         12

 

    set_paper     Paper

    create_line   x1, y1, x3, y3

    note_edge     -1, value, x1, y1, x3, y3

    create_line   x3, y3, x2, y2

    note_edge     -1, value, x3, y3, x2, y2

    delay         12

    erase         Draft

end

Đoạn mô phỏng này có sử dụng thư viện các thao tác dựng hình chuẩn (chính là file Mathtool.vs) được cung cấp kèm theo Violet, và các đối tượng hình ảnh như sau:

clip_image038

Các thư viện mã nguồn và hình ảnh sử dụng trong bài toán dựng hình

4.6. Mô phỏng con lắc lò xo

Để mô phỏng một con lắc lò xo co giãn, có thể sử dụng một ảnh lò xo, sau đó co giãn ảnh. Tuy nhiên kỹ thuật này sẽ làm cho độ dày của dây lò xo thay đổi nên không đúng thực tế. Để tạo một chiếc lò xo co giãn đẹp, ta phải lập trình và tạo ra một đối tượng riêng cho VS.

Trong Macromedia Flash, tạo một file mới, click chuột vào frame duy nhất trên timeline, sau đó mở hộp soạn thảo Action Script (nhấn F9), gõ đoạn mã sau vào:

 

function DrawSpring(len) {

      clear();

      lineStyle(3, 0, 100);

      for (var i = 0; i<20; i++) {

            lineTo((i%2*2-1)*15, (i+0.5)*len/20);

      }

      lineTo(0, len);

}

Dịch file này thành file swf, trong file thông tin của chương trình dịch VS, khai báo tên đối tượng là Lò_xo và chỉ đường dẫn đến file swf. Sau đó viết chương trình VS như sau:

 

function main

    set_paper Giado, 8, 0x7F7F7F

    poly_line 5, 10, 6, 10, 6, 1, 10, 1, 10, 10, 11, 10

    appear Spring, 8, 1

    set_paper Sphere

    sphere 0, 0.6, 0.6, 0x0000FF, 0xBFBFFF

    for t from 0 to 100000

        len = 6 + sin(t*15)

        set_pos Sphere, 8, len + 1

        call Spring.DrawSpring, len

        delay 1

    next

end

 

Kết quả chạy chương trình trên như sau. Con lắc lò xo sẽ dao động điều hòa với lò xo co giãn mà độ dày của sợi dây lò xo không thay đổi.

clip_image040

Mô phỏng con lắc lò xo đạng dao động điều hòa

0 nhận xét:

Đăng nhận xét