bai tap chuong 2

3
BÀI TP CHƯƠNG 2: Phn 1 : Vđường cơ bn. LÝ THUYT 1. Trong phn trình bày thut toán Bresenham để vđường thng, hãy cho biết vi cách đặt d 1 , d 2 như vy, có khi nào d 1 , d 2 ly giá trâm hay không ? Nếu có hãy cho ví dminh ha. 2. Ti sao phi so sánh vi giá tr0 trong các thut toán Bresenham, MidPoint. Bn cht ca vic so sánh này là gì? 3. Cài đặt các thut toán DDA, Bresenham, MidPoint vđon thng qua hai đim cho trước trong trường hp tng quát vi hsgóc m ly giá trbt kì. 4. Cho biết các đim nguyên vphát sinh khi sdng các thut toán DDA, Breshenham, MidPoint cho các đon thng đi qua các đim ln lượt là: A 1 (5,10), B 1 (15,17); A 2 (-2,3), B 2 (-12,7); A 3 (6,3), B 3 (9,13); A 4 (2,4), B 4 (-5,14); A 5 (0,10), B 5 (15,10); A 6 (5,-1), B 6 (5,-11); 5. Người ta có thcài đặt thut toán vđon thng bng cách chcn vmt na đon thng, phn còn li ly đối xng na đon thng đã v. Hãy cài đặt minh ha. 6. Thiết kế và cài đặt hàm vhình chnht, đường gp khúc, đa giác thàm vđon thng. 7. Trình bày thut toán MidPoint vcung tròn 1/8, bán kính R, tâm I(xC, yC) và được gii hn bi : R*(sqrt(2)/2) <= x <= R 0 <= y <= R*(sqrt(2)/2) 8. Sdng ý tưởng ca thut toán Bresenham, xây dng thut toán vđường tròn có tâm là gc ta độ, bán kính R. 9. Gii thích ti sao chchn cung 1/8 để vri ly đối xng mà không mrng cho cung 1/16 hay 1/32. 10.Gii thích ti sao có ththay công thc p 0 = 5/4 - R bng công thc p 0 = 1- R khi cài đặt thut toán MidPoint vđường tròn. 11.Trình bày thut toán Bresenham vđường tròn bán kính R, tđó nhn xét vcách tiếp cn ca thut toán MidPoint có gì li hơn so vi thut toán Bresenham. THC HÀNH 1. Sdng các hàm đồ ha ca lp Graphics trong C# để vcác đường, hình chnht, đa giác, hình tròn, ellipse, tô màu. - Vhình chnht màu đỏ có góc trái trên là (50,50), góc phi dưới (150, 120).

Upload: technetvn

Post on 25-Jul-2015

617 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Bai Tap Chuong 2

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

Page 2: Bai Tap Chuong 2

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

Page 3: Bai Tap Chuong 2

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.