bai tap chuong 2
TRANSCRIPT
BÀI TẬP CHƯƠNG 2: Phần 1: Vẽ đường cơ bản.
LÝ THUYẾT 1. Trong phần trình bày thuật toán Bresenham để vẽ đường thẳng, hãy cho biết với cách đặt
d1, d2 như vậy, có khi nào d1, d2 lấy giá trị âm hay không ? Nếu có hãy cho ví dụ minh họa.
2. Tại sao phải so sánh với giá trị 0 trong các thuật toán Bresenham, MidPoint. Bản chất của việc so sánh này là gì?
3. Cài đặt các thuật toán DDA, Bresenham, MidPoint vẽ đoạn thẳng qua hai điểm cho trước trong trường hợp tổng quát với hệ số góc m lấy giá trị bất kì.
4. Cho biết các điểm nguyên vẽ phát sinh khi sử dụng các thuật toán DDA, Breshenham, MidPoint cho các đoạn thẳng đi qua các điểm lần lượt là:
A1(5,10), B1(15,17); A2(-2,3), B2(-12,7); A3(6,3), B3(9,13); A4(2,4), B4(-5,14); A5(0,10), B5(15,10); A6(5,-1), B6(5,-11);
5. Người ta có thể cài đặt thuật toán vẽ đoạn thẳng bằng cách chỉ cần vẽ một nửa đoạn thẳng, phần còn lại lấy đối xứng nửa đoạn thẳng đã vẽ. Hãy cài đặt minh họa.
6. Thiết kế và cài đặt hàm vẽ hình chữ nhật, đường gấp khúc, đa giác từ hàm vẽ đoạn thẳng.
7. Trình bày thuật toán MidPoint vẽ cung tròn 1/8, bán kính R, tâm I(xC, yC) và được giới hạn bởi :
R*(sqrt(2)/2) <= x <= R 0 <= y <= R*(sqrt(2)/2) 8. Sử dụng ý tưởng của thuật toán Bresenham, xây dựng thuật toán vẽ đường tròn có tâm là
gốc tọa độ, bán kính R. 9. Giải thích tại sao chỉ chọn cung 1/8 để vẽ rồi lấy đối xứng mà không mở rộng cho cung
1/16 hay 1/32. 10.Giải thích tại sao có thể thay công thức p0 = 5/4 - R bằng công thức p0 = 1- R khi cài đặt
thuật toán MidPoint vẽ đường tròn. 11.Trình bày thuật toán Bresenham vẽ đường tròn bán kính R, từ đó nhận xét về cách tiếp
cận của thuật toán MidPoint có gì lợi hơn so với thuật toán Bresenham.
THỰC HÀNH
1. Sử dụng các hàm đồ họa của lớp Graphics trong C# để vẽ các đường, hình chữ nhật, đa giác, hình tròn, ellipse, tô màu. - Vẽ hình chữ nhật màu đỏ có góc trái trên là (50,50), góc phải dưới (150, 120).
- Vẽ hình chữ nhật bất kỳ màu xanh, có 2 đường chéo. - Vẽ hình chữ nhật rộng toàn form màu vàng, có 2 đường chéo. - Viết hàm vẽ hình vuông khi biết góc trái trên và kích thước cạnh. - Vẽ hình tròn và ellipse. - Thiết kế một hình đa giác bất kỳ rồi vẽ hình đa giác lên màn hình.
Lưu ý: Thử vẽ trên form, rồi thử làm lại bằng cách vẽ trên bitmap.
2. Vẽ bàn bi-a, và quả bóng tròn chuyển động bên trong phản xạ tại các cạnh bàn.
3. Cài đặt hàm đệ qui floodfill để tô màu cho một hình đã vẽ (dùng giải thuật đệ qui và
đệ qui cải tiến- trang 32, Dương Anh Đức, thuật toán tô màu theo đường biên). Thử tô cho đa giác ở câu 1, hãy thay đổi kích thước của đa giác và xem kết quả tô. Cài đặt hàm floodfill không đệ qui (dùng stack để gỡ đệ qui). Áp dụng: Sử dụng hàm floodfill của bạn, các hàm vẽ hình chữ nhật, ellipse của class Graphics, hãy vẽ hình theo mẫu sau:
4. Cài đặt hàm vẽ đoạn thẳng DDA . 5. Thiết kế một tam giác trên hệ tọa độ descarte, sử dụng hàm DDA để vẽ tam giác lên
thiết bị (Nhận xét: tam gíac đảo ngược so với trong hệ tọa độ decarte). 6. Cài đặt hàm my_line để vẽ đoạn thẳng theo thuật toán DDA có đổi gốc tọa độ về góc
trái dưới màn hình. Cài đặt hàm vẽ đa giác từ hàm my_line. Từ đó hãy vẽ chiếc xe hơi đơn giản. Cho xe hơi chuyển động từ trái sang phải màn hình.
7. Cài đặt hàm vẽ đường tròn Bresenham.
8. Vẽ đường tròn tâm (xc,yc) và ngôi sao năm cánh nội tiếp đường tròn. 9. Vẽ đa giác đều n đỉnh nội tiếp đường tròn tâm C(xc,yc), bán kính R. 10. Từ DDA, xây dựng phương thức linerel (vẽ từ điểm hiện tại cho trước, vẽ đến điểm
cách nó một khoảng dx và dy theo các phương tương ứng, rồi cập nhật lại điểm hiện tại mới).
11. Dùng linerel để vẽ ngôi nhà, cây thông đơn giản. 12. Xây dựng hàm moveto (cập nhật điểm hiện tại đến cột, dòng), lineto (vẽ từ điểm hiện
tại đến điểm có tọa độ cột, dòng) để vẽ một bức tranh bất kỳ (turtle graphic). 13. Cài đặt hàm vẽ đường thẳng Bresenham (B_line), midpoint
- Sử dụng vẽ khung hình bằng các hình vuông có vẽ 2 đường chéo. 14. Dựa vào thuật toán bresenhem vẽ đường tròn để xây dựng thủ tục vẽ một cung tròn
(arc) tâm (x,y) bán kính R, biết góc bắt đầu và kết thúc của cung lần lượt là a , b. 15. Cài đặt hàm vẽ ellipse Bresenham. 16. Dựa vào thuật toán vẽ ellipse để xây dựng thủ tục vẽ một cung (pie slice) tâm (x,y) và
bán kính trục chính, trục phụ lần lượt là A, B, góc bắt đầu và kết thúc của cung lần lượt là a , b.
Phần 2: Tô màu cơ bản. 17. Viết chương trình vẽ một đa giác n đỉnh, xét xem một điểm P nào đó có thuộc đa giác
không ? 18. Viết chương trình vẽ một đa giác n đỉnh. Tô đa giác bằng giải thuật tô đơn giản ( Tìm
xmin, ymin, xmax, ymax). 19. Viết chương trình vẽ một đường tròn. Tô đường tròn bằng giải thuật tô đơn giản. 20. Viết chương trình vẽ một đa giác n đỉnh. Tô đa giác bằng giải thuật tô biên. Lưu ý
cho các trường hợp của đa giác : hình chữ nhật, đa giác lồi, đa giác lõm. 21. Viết chương trình vẽ một đường tròn. Tô đường tròn bằng giải thuật tô biên. 22. Viết chương trình vẽ một đa giác n đỉnh. Tô đa giác bằng giải thuật scan-line. 23. Viết chương trình vẽ một đường tròn. Tô đường tròn bằng giải thuật tô scan-line. 24. Viết chương trình vẽ hai đường tròn C1 và C2 cắt nhau. Tô phần giao của hai đường
tròn đó. Tô phần bù của C2. Tô phần bù của C1. Lưu ý rằng 3 màu tô này phải khác nhau.