MỘT SỐ HÀM VÀ THỦ TỤC CHUẨN TRONG UNIT GRAPH 1 Mầu và mẫu (kiểu)

Một phần của tài liệu TIN HỌC ĐẠI CƯƠNG (TẬP 2) (Trang 64 - 69)

1. Mầu và mẫu (kiểu)

Ðối với màn hình trắng đen (Hercules Monochrome) ta có 2 giá trị màu 0 và 1, còn đối với các màn hình màu (VGA, EGA,...) thì có 16 giá trị màu từ 0..15 được liệt kê trong bảng 3, và kiểu tô màu thì có 11 kiểu đã được định sẵn là từ 0..11 và một kiểu do người lập trình định nghĩa (User - defined fill) và các kiểu tô được liệt kê trong bảng 4.

a. Thủ tục chọn màu đường vẽ

SetColor(ColorNum:word);

b. Thủ tục đặt màu nền của màn hình

SetBkColor(ColorNum :word);

c. Thủ tục chọn kiểu tô và màu tô

SetFillStyle(Pattern:word; ColorNum:word);

d. Hàm nhận màu trả về do thủ tục SetColor đã đặt màu trước đó

GetColor: word;

e. Hàm nhận màu nền trả về do thủ tục SetBkColor đã đặt trước đó

GetBkColor: word;

f. Hàm trả về giá trị màu lớn nhất

GetMaxColor: word;

Bảng 3: Các giá trị có thể nhận của biến màu ColorNum Tên hằng Giá trị màu Màu hiển thị Black

Green Cyan Red Magenta Brown LightGray DarkGray LightBlue LightGreen LightCyan LightRed LightMagenta Yellow White 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Xanh lá cây Xanh lơ Ðỏ Tím Nâu Xám nhạt Xám sẫm Xanh da trời nhạt Xanh lá cây nhạt Xanh lơ nhạt Ðỏ nhạt Tím nhạt Vàng Trắng

Bảng 4: Các giá trị có thể nhận của biến kiểu tô Pattern Tên hằng Giá trị kiểu tô Diễn giải kiểu tô

EmptyFill SolidFill LineFill LtSlashFill SlashFill BkSlashFill LtBkSlashFill HatchFill XHatchFill InterleaveFill WideDotFill CloseDotFill UserFill 0 1 2 3 4 5 6 7 8 9 10 11 12 Tô bằng màu nền Tô đặc Tô bằng gạch ngang Tô bằng /// Tô bằng /// in đậm Tô bằng \\\ in đậm Tô bằng \\\ Tô bằng đường gạch bóng nhạt Tô bằng đường gạch bóng chữ thập Tô bằng đường đứt quãng

Tô bằng những dấu chấm thưa Tô bằng dấu chấm dày

Mẫu tô tự tạo

2. Ðiểm, kiểu đường thẳng, đường thẳng

a. Thủ tục vẽ một điểm tại một tọa độ (x,y)

PutPixel(x,y:integer;ColorNum:word);

b. Thủ tục chọn kiểu đường thẳng

SetLineStype(linestyle:word;pattern:word;thickness:word); Với tham số LineStyle có các giá trị như bảng 5 sau: Bảng 5: Tham số LineStyle

Hằng Giá trị Diễn giải SolidLn DottedLn CenterLn DashedLn UserBitLn 0 1 2 3 4 Nét đậm Nét chấm Nét chấm gạch Nét gạch Mẫu tự tạo Với tham số thickness có các giá trị như bảng 6 sau: Bảng 6: Tham số Thickness

Hằng Giá trị Diễn giải NormWidth

ThickWidth 1 3

Bề dày bình thường Bề dày đậm

c. Thủ tục vẽ đường thẳng từ tọa độ (x1 ,y1) đến tọa độ (x2 ,y2) Line(x1 ,y1 ,x2 ,y2: integer); 3. Các hình không tô a. Thủ tục vẽ hình chữ nhật Rectangle(x1 ,y1 ,x2 ,y2:integer); b. Thủ tục vẽ hình tròn Circle(x,y:integer;r:word);

Với x,y là tọa độ tâm, r là bán kính.

c. Thủ tục vẽ một cung tròn

Arc(x,y:integer; StAngle,EndAngle:word; r :word); Với StAngle là góc bắt đầu, EndAngle là góc kết thúc.

d. Thủ tục vẽ cung Ellipse hoặc một Ellipse

Ellipse(x,y:integer;StAngle,EndAngle:word;Xradius,Yradius:word); Nếu StAngle = 0 và EndAngle =360 thì là một hình Ellipse, nếu EndAngle < 360 thì là một cung Ellipse.

4. Các hình có tô

a. Ðường gấp khúc (đa giác)

Muốn vẽ một đường gấp khúc đi qua n điểm tọa độ : (x1 ,y1), (x2 ,y2),..., (xn ,yn ) thì ta phải đưa tạo độ n điểm này vào một mảng poly nào đó mà mỗi phần tử của mảng có kiểu PointType đã được định nghĩa sẵn như sau:

Type

PointType = Record x,y : integer; end;

Khi điểm cuối (xn ,yn ) có tọa độ trùng với điểm đầu (x1 ,y1 ) thì n điểm này sẽ tạo thành một đường gấp khúc khép kín.

Dùng thủ tục DrawPoly(n, poly); để vẽ đường gấp khúc đi qua n tọa độ đã định sẵn trong mảng poly.

Dùng thủ tục FillPoly(n,poly); để vẽ và tô đường gấp khúc đi qua n tọa độ đã định sẵn trong mảng poly.

Ví dụ:

Uses Graph; Const

gk: Array[1..3] of pointtype=((x:5;y:200),(x:190;y:5),(x:100;y:300)); {gấp khúc}

gkkk: Array[1..4] of Pointtype = ((x:405;y:200),(x:590;y:5),(x:500;y:300),(x:405;y:200)); Var Gd, Gm: Integer;

Begin

Gd := Detect;

InitGraph(Gd, Gm, 'F:\WINAPPS\BP\BGI'); if GraphResult <> grOk then Halt(1); SetBkcolor(CYAN);

SetColor(YELLOW);

SetFillStyle(SolidFill,MAGENTA); DrawPoly(3,gk);

FillPoly(3,gk); {đường gấp khúc không khép kín} FillPoly(4,gkkk); {đường gấp khúc khép kín} Readln; CloseGraph; End. b. Thủ tục vẽ hình chữ nhật Bar(x1 ,y1 ,x2 ,y2: integer); c. Thủ tục vẽ hình hộp chữ nhật

Bar3D(x1 ,y1 ,x2 ,y2:integer; depth:word;top:boolean); Tham số depth: là số điểm trên bề sâu của khối 3 chiều.

Tham số top có 2 giá trị được định nghã sẵn là: TopOn (True) tương ứng khối 3 chiều sẽ có nắp và TopOff (False) sẽ ứng với khối 3 chiều không có nắp (xem hình vẽ).

d. Thủ tục vẽ hình Ellipse

FillEllipse(x,y:integer;xradius,yradius:word);

e. Thủ tục vẽ hình quạt

PieSlice(x,y:integer; StAngle,EndAngle,radius:word);

5. Xử lý chuỗi ký tự trên màn hình đồ họa

a. Thủ tục nạp Font chữ

Các font chữ nằm trong các tập tin có phần mở rộng là .CHR . Ðể nạp các font chữ này ta dùng thủ tục:

SetTextStyle(font,direction,charsize:word); Với: Tham số font có thể nhận một trong các giá trị sau:

Hằng DefauFont hay giá trị 0 Hằng TriplexFont hay giá trị 1 Hằng SmallFont hay giá trị 2 Hằng SansSerifFont hay giá trị 3 Hằng GothicFont hay giá trị 4 Tham số direction có thể nhận một trong các giá trị sau:

Hằng HorizDir hay giá trị 0 Hằng VertDir hay giá trị 1

Tham số charsize là cỡ ký tự và nó có thể nhận một trong các giá trị từ 1 đến 10.

b. Thủ tục đặt chế độ căn chỉnh chuỗi văn bản

SetTextJustify(horiz, vert :word); Trong đó:

Tham số horiz có thể là một trong các hằng: LeftText, CenterText, RightText.

Tham số vert có thể là một trong các hằng: BottomText, CenterText, TopText.

c. Thủ tục hiển thị chuỗi văn bản tại vị trí con nháy

OutText (text:string);

d. Thủ tục hiển thị chuỗi văn bản tại tọa độ (x,y)

OutTextXY (x,y:integer;text:string); 6. Cửa sổ trong chế độ đồ họa (ViewPort) TOP

Ðể thiết lập một cửa sổ trên màn hình đồ họa, ta sử dụng đến chức năng của ViewPort. Cửa sổ ViewPort được xem như một vùng chữ nhật trên màn hình độ họa, nó giống như thủ tục Window trong chế độ văn bản (Text mode), nghĩa là ta có thể hiện một dòng văn bản, vẽ hình hoặc xóa chỉ nằm gọn trong ViewPort đã định, ta có thể minh họa một cửa sổ ViewPort như hình sau:

Ðể hiểu rõ cách thiết lập một ViewPort, ta hãy xét đến cách khai báo kiểu của ViewPort như sau: ViewPortType = Record x1, y1, x2, y2 : Integer; Clip : Boolean; End;

Trong đó: (x1, y1) , (x2, y2) lần lượt là góc tọa độ trên bên trái và tọa độ góc dưới bên phải, mà chúng phải thỏa tính chất sau:

Clip là một biến trường có kiểu Boolean mà nó có ý nghĩa như sau:

· Nếu có giá trị bằng True (hay bằng hằng ClipOn) thì không cho phép vẽ bên ngoài ViewPort. · Nếu có giá trị bằng False (hay bằng hằng ClipOff) thì cho phép vẽ bên ngoài ViewPort.

a. Thủ tục thiết lập một ViewPort

SetViewPort(x1,y1,x2,y2:integer; Clip:Boolean);

Sau khi thiết lập ViewPort ta sẽ có một hệ tọa độ mới mà góc trên bên trái của ViewPort sẽ có tọa độ (0,0).

Ví dụ: Như hình vẽ ở trên (giả sử ta chọn Clip bằng hằng ClipOn) thì ta phải thiết lập ViewPort như sau: SetViewPort(300,250,500,350,ClipOn);

* Tọa độ âm dương

Với một số đồ thị của toán học phải có tọa độ âm dương, để vẽ nó ta phải chia màn hình ra làm 4 phần tương ứng với 4 vùng (I, II, III, IV) âm dương của một hệ trục tọa độ xy. Ðể thực hiện việc này, ta phải dùng đến cửa sổ ViewPort, với cách thiết lập sao cho tọa độ (0,0) của trục tọa độ xy là tâm tuyệt đối của màn hình góc trên bên trái của ViewPort như sau:

- Ðặt: x1= GetmaxX; y1= GetmaxX; x2= GetmaxX; y2= GetmaxX;

- Dùng thủ tục SetViewPort(x1,y1,x2,y2,ClipOff) , với Clip = ClipOff để có thể vẽ ra ngoài giới hạn của ViewPort.

Ví dụ: Vẽ đồ thị hàm sin(x) trong hệ trục tọa độ âm dương, với hoành độ Program Dothi;

Uses Crt,Graph; Const

ScaleY=80;

Var mh,mode,x,y,i:integer; Begin

InitGraph(mh,mode,'F:\WINAPPS\BP\BGI');

SetViewPort(GetmaxX DIV 2,GetmaxY DIV 2,GetmaxX,GetmaxY,ClipOff); SetColor(blue);

Line(-(GetmaxX DIV 2),0,GetmaxX DIV 2,0); Line(0,-(GetmaxY DIV 2),0,GetmaxY DIV 2); SetTextJustify(CenterText,CenterText);

SetColor(White);

OutTextXY(-GetmaxX DIV 4,-GetmaxX DIV 4,'DO THI HINH SIN '); SetColor(Red);

OutTextXY(GetmaxX DIV 2- 32,2,'Truc x >'); OutTextXY(27,-(GetmaxY DIV 2-5),'^ Truc y'); OutTextXY(0,0,'0,0'); for i:= -400 to 400 do begin x:=Round(2*Pi*i* ScaleX /200); y:=Round(Sin(2*Pi*i/200)* ScaleY); PutPixel(x,y,Yellow); end;

Repeat Until KeyPressed; CloseGraph;

End.

b. Thủ tục nhận ViewPort hiện hành

GetViewSettings(Var ViewPort: ViewPortType);

c. Thủ tục xóa bên trong màn hình ViewPort hiện hành

ClearViewPort;

Thủ tục xóa sạch tất cả các phần (hình vẽ, chuỗi ký tự, ...) bên trong ViewPort và đưa con trỏ về tọa độ (0,0) của cửa sổ ViewPort hiện hành.

d. Thủ tục xóa sạch màn hình đồ họa

ClearDevice;

7. Ðóng chế độ đồ họa

Ðể trở về chế độ văn bản, ta dùng thủ tục: CloseGraph;

Một phần của tài liệu TIN HỌC ĐẠI CƯƠNG (TẬP 2) (Trang 64 - 69)

Tải bản đầy đủ (DOC)

(74 trang)
w