Lấy P(x,y) ∈ S, tô mău P.
Xĩt câc ñiểm lđn cận của P (Hình 2.6).
Nếu câc ñiểm lđn cận ñó vẫn còn thuộc S vă chưa
ñược tô mău thì tô mău câc ñiểm lđn cạn ñó...
Thuật toân trín có thể ñược minh họa bằng thủ tục
ñệ qui:
Procedure TOLOANG(x,y:Integer; Color:Word); Begin
If (P(x,y)∈S)and(P(x,y)chưa tô) Then Begin PutPixel(x,y,Color); TOLOANG(x+1,y,Color); TOLOANG(x-1,y,Color); x 0 xi x Dy y Hình 2.5 O X X X X O Hình 2.6
TOLOANG(x,y+1,Color); TOLOANG(x,y-1,Color); End;
End;
BĂI TẬP
1. Viết hăm DienTich(P:Array; n:Byte); ñể tính diện tích của ña giâc lồi có n ñỉnh lưu trong mảng P.
2. Viết hăm KiemTrăx,y:Integer; P:Array; n:Byte):Boolean; ñể kiểm tra ñiểm (x,y) nằm trong hay ngoăi ña giâc có n ñỉnh ñược lưu trong mảng P theo hai câch:
- Dùng công thức tính diện tích ña giâc (ñối với ña giâc lồi). - Dùng thuật toân Jordan (ñối với ña giâc bất kỳ).
2. Viết chương trình căi ñặt thuật toân tô mău một ña giâc theo thuật toân Scanlinẹ
3. Viết chương trình căi ñặt thuật toân tô mău một ña giâc theo vết dầu loang theo hai phương ân:
ạ ðệ quị b. Khửñệ quị
4. Viết thủ tục FillRec(x1,y1,x2,y2:Integer; color:Byte); ñể tô mău hình chữ nhật xâc
ñịnh bởi 2 ñỉnh (x1,y1) vă (x2,y2).
5. Viết thủ tục FillEllipse(x,y,Rx,Ry:Integer; color:Byte); ñể tô mău Ellipse có tđm (x,y) vă bân kính theo hai trục lă Rx vă Rỵ
6. Viết thủ tục FillSector(x,y,Rx,Ry,g1,g2:Integer; color:Byte); ñể tô mău hình quạt Ellipse có tđm (x,y), bân kính theo hai trục lă Rx vă Ry, góc bắt ñầu lă g1 vă góc kết thúc lă g2.
7. Viết thủ tục Donut(x,y,Rmin,Rmax:Integer; color:Byte); ñể tô mău hình vănh khăn có tđm (x,y) vă bân kính hai ñường tròn tương ứng lă Rmin vă Rmax.
Băi tập lớn: Xđy dựng một thư viện ñồ họa MYGRAPH tương tự như thư viện
CHƯƠNG III XĨN HÌNH
3.1. ðẶT VẤN ðỀ
Cho một miền D ⊂ Rn vă F lă một hình trong Rn (F ⊂ Rn). Ta gọi F ∩ D lă hình có
ñược từ F bằng câch xĩn văo trong D vă ký hiệu lă ClipD(F).
Băi toân ñặt ra lă xâc ñịnh ClipD(F).
3.2. XĨN ðOẠN THẲNG VĂO VÙNG HÌNH CHỮ NHẬT CỦA R2