Vẽ hình trong Pascal

Thứ ba - 04/08/2020 05:01
Để vẽ được hình bằng chế độ đồ họa của Turbo Pascal cần phải có các Files sau đây trên đĩa:
* TURBO.EXE
* TURBO.TPL
1. CÁC CHƯƠNG TRÌNH ĐIỀU KHIỂN
Để vẽ được hình bằng chế độ đồ họa của Turbo Pascal cần phải có các Files sau đây trên đĩa:
* TURBO.EXE
* TURBO.TPL
* GRAPH.TPU
* Các Files.BGI để điều khiển loại màn hình tương ứng.
* Các Files.CHR chứa các kiểu chữ.
■ Ví dụ:
HERC.BGI để điều khiển màn hình Hercules monochrome; EGAVGA.BGI để điều khiển màn hình EGA, VGA.

2. HỆ TỌA ĐỘ
Hệ tọa độ trên màn hình được qui định như sau:

GetMaxX, GetMaxY là hai hàm cho giá trị kiểu Integer chỉ hoành độ và tung độ lớn nhất trên tùy lọai màn hình.
Loại màn hình                GetMaxX             GetMaxY
CGACO                         320                       200
EGAHi                           640                       350
VGAHi                          640                       480

3. MỘT VÍ DỤ VỀ CHƯƠNG TRÌNH VẼ HÌNH
    PROGRAM VE_HINH_MAU;
    USES Graph;
    VAR Graph Driver: integer;
          Graph Mode: integer;
    BEGIN
          GraphDriver:= Detect;
          Init Graph (Graph Driver; Graph Mode; 'B');
          SetBKColor (Red);
    PutPixel (10,10,Blue);
         SetColor (Green);
         Rectangle (50,50,150,100);
         Readln;
         Close Graph;
   END.
• Giải thích:
(1) Yêu cầu máy tự tìm chế độ màn hình thích hợp.
(2): Khởi động chế độ đồ họa của TURBO PASCAL.
      'B :’ Báo cho máy biết rằng các Files.BGI để ở ổ đĩa B:
(3): Đặt màu nền là Đỏ.
(4): Chấm một điểm màu xanh tại điểm có tọa độ (10,10).
(5): Đặt màu cho các nét vẽ từ đây trở về sau là màu xanh.
(6): Vẽ hình chữ nhật với tọa độ đỉnh trên bên trái là (50,50) và đỉnh dưới bên phải là (150,100).
(7): Dừng màn hình chờ 1 phím được bấm.
{8}: Đóng chế độ đồ họa đưa màn hình trở về chế độ ban đầu trước khi khởi động chế độ đồ họa. 

4. MỘT SỐ THỦ TỤC ĐỂ VẼ CÁC ĐƯỜNG HÌNH HỌC VÀ VIẾT CHỮ
• LINE (x1, y1, x2, y2: integer)
Vẽ đường thẳng từ (xl, y1) đến (x2, y2).
■ Ví dụ:
Line(100,100,200,200)
• LINEREL (Dx, Dy: integer)
Vẽ một đường thẳng từ vị trí hiện tại của con trỏ đến điểm có tọa độ được tăng thêm là Dx, Dy.
■ Ví dụ:
MoveTo(l,2);
LineRel(100,100): {Vẽ từ (1,2) đến (100,102)}
• LINETO (x, y: integer)
Vẽ một đường thẳng từ điểm hiện tại đến điểm có tọa độ (x,y)
■ Ví dụ:
Moveto(100,100);
Lineto(200,200);
• CIRCLE (X, Y: integer; R: Word)
Vẽ một đường tròn tâm (X, Y) bán kính R.
■ Ví dụ:
CIRCLEdOO, 100,20);
• ARC (X, Y: integer; StAngle, EndAngle, Radius: word)
Vẽ một cung của một đường tròn tâm (X, Y) bán kính R từ góc đầu (Start Angle) đến góc cuối (End Angle).
■ Ví dụ: Arc( 100,100,0,90,15)


• ELLIPSE (X, Y: integer; StAngle, EndAngle; XRAdius, YRadius: word)
Vẽ một cung Elip tâm (X, Y), Bán kính ngang XRadius, Bán kính dọc YRadius, từ góc đầu StAngle đến góc cuối EndAngle.
• Ví dụ: EllipsedOO,100,0,360,80,30)

MOVETO (X, Y): OUTTEXTS (S: String);
Viết tên màn hình từ tọa độ (X, Y) một chuỗi kí tự.
■ Ví dụ: MOVETO(100,1000);
               OUTTEXT ('TOI THICH HOC PASCAL');

5. MỘT SỐ THỦ TỤC VỀ MÀU SẮC
• Set BKColor (Color: word);
Color có thể là chữ hoặc số (xem chương 12 về bảng màu của Pascal);
■ Ví dụ: SetBKColor (2) tương đương với SetBKColor(Green).
• GetMaxColor
Cho biết số tối đa màu có thể có của màn hình.
■ Ví dụ: a:= GetMaxColor;
Nếu là màn hình EGA thì a:= 15
Nếu là màn hình Hercules monochorome thì a:= 1.
• SetColor (Color: word)
Đặt màu của các đường trong các lệnh vẽ.
■Ví dụ: SetColor (1);
Circle (100,100,50);
{Vẽ một đường tròn tâm (100,100), bán kính R = 50 với đường vẽ màu xanh dương}.
• SetFillStyle (Pattern: word; Color: word)
Xác định nét tô và màu tô cho các lệnh vẽ hình đặc Pattern có thê là chữ hoặc số như sau:
EmptyFill = 0: Tô bằng màu nền
SolidFill = 1: Tô đặc
LineFill = 2: Tô bằng vạch ngang
• Bar (x1, y1, x2, y2: integer)
Vẽ một hình chữ nhật có tô màu bằng kiểu tô hiện thời.
■ Ví dụ:   SetFillStyle (1,4);
                Bar (50,50,200,100);
{Vẽ một hình chữ nhật có 2 đỉnh là (50,50), (200,100) tô đặc màu đỏ }.
• FIoodFill (x, y: integer; Border: word);
Tô một vùng có biên kính xung quanh điểm hạt giống (x, y) bằng kiểu tô hiện thời với màu biên định bởi Border.
Ví dụ:    SetColor (while);
              Circle (100,100,80);
              SetFillStyle (1,4);
              FloodFill (100,100,white);

6. CÁC CHƯƠNG TRÌNH MẪU VỀ VẼ HÌNH
• Chương trình 1: Vẽ các đường thẳng bất kì.
PROGRAM DUONG_THANG;
     USES Crt, Graph;
     VAR Gd, Gm: integer;
      BEGIN
           Gd:= Detect;
           Initgraph (Gd, Gm,' ');
           Randomize;
           REPEAT
                 Line (Tandom(200), Random(200), Random(200), Random(200));
           UNTIL KeyPressed;
           Readln;
           Closegraph;
END.

• Chương trình 2: Vẽ các đường gấp khúc bất kì.
PROGRAM GAP_KHUC;
     USES Crt, Graph;
     VAR Gd, Gm: integer;
     BEGIN
          Gd:= Detect;
          Initgraph (Gd, Gm,' ');
          Randomize; {1}
          REPEAT
               Lineto (Random(200), Random(200)); {2}
          UNTIL KeyPressed;
          Readln;
          Closegraph;
     END.
{1} Khởi động việc chọn số ngẫu nhiên.
(2( Random(200): Lấy một số bất kì từ 1 đến 200.

• Chương trình 3: Vẽ một đường tròn với viền màu trắng bên trong tô xanh.
PROGRAM DUONG_TRON;
     USES Graph;
     VAR Gd, Gm: integer;
     BEGIN
          Gd:= Detect;
          Initgraph (Gd, Gm,' ');
          Setcolor (100,100,80);
          SetFillStyle (100,100,white);
          Readln;
          Closegraph;
     END.

• Chương trình 4: Viết chương trình đổi màu màn hình một cách ngẫu nhiên khi có một phím được bấm, còn nếu bấm 'T' thì kết thúc chương trình.
PROGRAM THU_MAU_NEN;
     USES CRT, GRAPH;
     VAR Gd, Gm: integer;
           YK: char;
      BEGIN
           Gd:= Detect;
           Initgraph (Gd, Gm,' ’);
           Randomize;
           REPEAT
                SetBKColor (Random(GetMaxColor));
                C:= ReadKey;
           UNTIL UpCase(C) = T.;
           Closegraph;
       END.

• Chương trình 5: Vẽ các thanh hình chữ nhật tô màu xanh lá cây.
PROGRAM THANH_CHU_NHAT;
     USES CRT, GRAPH;
     VAR Gd, Gm: integer;
           I: integer;
      BEGIN
           Gd:= Detect;
           Initgraph (Gd, Gm,’ ');
           FOR I .:= 1 TO 10 DO
                Begin
                    SetFillStyle(1,2).;
                    Bar (I/* 10, I * 10, I * 10+100, I * 10+50);
                End;
           Readln;
           Closegraph;
     END.

• Chương trình 6: Vẽ một đa giác đểu
PROGRAM VEJDA_GIAC_DEU;
     USES Graph;
     VAR Gd. Gm: integer;
           K, N: integer;
           Arcco: Arcoords type;
     BEGIN
          Write ('Muon ve dã giac bao nhieu canh:’);
          Readin (N);
          Gd:= Detect;
          Initgraph (Gd, Gm,' ’);
          SetBKColor (Blue);
          Center X:= GetMax X div 2;
          Center Y:= GetMax Y div 2;
          Step:= 360 div N;
          FOR K:= 1 TO N DO
              Begin
                   SetColor (0);
                  Arc(Center X, Center Y, (K - l)*Step, K*Step, Center Y);
                  GetArcCoords (ArcCo);
                  SetColor (1);
                 WITH Arcco Do
                      Line (XStart, YStart, Xend, Yend);
             End;
       Closegraph;
END.
Bản quyền bài viết thuộc về Sachgiai.com. Ghi nguồn Sách giải.com khi đăng lại bài viết này.

  Ý kiến bạn đọc

THÀNH VIÊN

Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site
Kênh Bóng đá trực tiếp hôm nay miễn phí
Kênh
90Phut TV full HD ⇔ 32win
69VN ⇔  ⇔ F168 ⇔ 123b ⇔ 566

Vmax ⇔ 78Win ⇔ https://xn88.bio/
GK88 ⇔ SHBET ⇔ nh88 ⇔ u888 ⇔ 789f
fo88vic88 ⇔ u888 ⇔ 888p ⇔ 69vn
BL555 ⇔ 99OK ⇔ KJC ⇔ Link MB66
mv66af88 ⇔ 8x bet ⇔ 88AA
789BET ⇔ LC88 ⇔ BL555 ⇔ 789f
OKFUN ⇔ 789F ⇔ MB66 ⇔ 8xbet
https://789betcom0.com/ ⇔ https://hi88.baby/
UU88 ⇔ au88 ⇔ win678 ⇔ https://xx88.ink/
zo88 ⇔ ev99 ⇔ 888b ⇔ go88 ⇔ kèo nhà cái
cm88 ⇔ 88aa ⇔ Kkwin ⇔ tv88 ⇔ 77win
mb66.racing ⇔ u888 ⇔ FO88 ⇔ 88xx
188v ⇔ f168 ⇔ QQ88 ⇔ bk8 ⇔ bk8
 ⇔ iwinclub ⇔ Subnhanh ⇔ Bluphim
m88 ⇔ Nettruyenviet ⇔ P3 ⇔ 8s
vn23 ⇔ SHBET ⇔ kubet ⇔ 888new
NOHU ⇔ hi88 ⇔ https://fun88.social/
thabet ⇔ SV88 ⇔ https://vnalo789c.com/
https://qq88.fun/ ⇔ f168 ⇔ 888New ⇔ QQ88
daga ⇔ SHBET ⇔ keo nha cai ⇔ bl-555.site
https://bshbet.com/ ⇔ https://uk88.rocks
kkwin ⇔ KUWIN ⇔ 8xbet ⇔ RR88 ⇔ 188v
mb6678win ⇔ https://hello8880.net/
tv88UU88 ⇔ HM88 ⇔ MB66 ⇔ TV88
NOHU ⇔ 77ball ⇔ 32win ⇔ Kuwin
ek333 ⇔ xoso66 ⇔ nổ hũ ⇔ SUN WIN
X88 ⇔ 78win ⇔ Jun88 ⇔ uu88
NOHU ⇔  KINGFUN ⇔ https://789club24.com/
https://98winlive.com/ ⇔ https://789win.voyage/
https://bet88yk.com/ ⇔ https://alo789apk.app/
https://33win100.com/ ⇔ https://u888ny.com/
69vn ⇔ vn88 ⇔ OK8386 ⇔ x88 ⇔ SHBET
https://hi88.voyage/ ⇔ https://79kings.blue/
https://dom88.jp.net/ ⇔ https://hello880.net/
https://789club60.com/ ⇔ https://blc88.net/
23win ⇔ 6ff ⇔ f168 ⇔ xoso66 ⇔ bomwin
nhatvip ⇔ https://789club24.com/ ⇔ 789 bet
win68 ⇔ 8xbet ⇔ go99 ⇔ 78win ⇔ QQ88
XX88 ⇔ ev99 ⇔ 69vn ⇔ rr88 ⇔ rr88
Uu88 ⇔ win456 ⇔ Tài xỉu online ⇔ XN88
https://33win101.com/ ⇔ oxbet ⇔ Slot365
78wind.com ⇔ https://shbet.gg/ ⇔ XX88
daga ⇔ SV388 ⇔ OKFUN ⇔ ee88 ⇔ 12bet
hitclub ⇔ Kkwin ⇔ VankhanhTV ⇔ Hay 88
3WIN ⇔ WIN678 ⇔ https://58winbank.com/
68 game bàiEE88 ⇔ 77BET ⇔ 12BET
vmaxVMAX ⇔ ok9 football ⇔ K8CC
https://hi88o.com/ ⇔ https://hi88.gives/
https://qq88.co.com/ ⇔ https://f168.law/
8xbet ⇔ https://shbetk.net/ ⇔ RIKVIP ⇔ rikvip
https://mm88.us.com/ ⇔ 79king
ww88 ⇔ https://78win.bot/ ⇔ https://13win.vegas/
https://lc88o.com/ ⇔ https://hi88.uno/
https://58win1.info/ ⇔ j88 ⇔ j88 ⇔ 69vn
Slot365 ⇔ alo88 ⇔ UU88 ⇔ 32 win
888TO ⇔ wstar77 ⇔ 73bet ⇔ 888b
11uu ⇔ 123B ⇔ 78win ⇔ Slot365
789f ⇔ mv88 ⇔ 789f ⇔ Bsport
888New ⇔  ⇔ Vmax ⇔ sunwin
tỷ lệ kèo nhà cái hôm nay ⇔ BIN88
 ⇔ https://qq88.studio/
https://nh8811.com/ ⇔ Leo88 ⇔ 78win
88CLB ⇔ SV388 ⇔ https://cakhiatv88.net/
7m ⇔ i9 Bet ⇔ Tv88 ⇔ hi88 ⇔ 888To
socolive trực tiếp74bet ⇔ VN168
Bong88 ⇔ socolive ⇔ bet88 ⇔ 555WIN
https://au88.black/ ⇔ trực tiếp bóng đá
https://king88clb.com/ ⇔ https://f168hi.com/
sv66ax88 ⇔ 88clb ⇔ Nn88
https://32win.vc/ ⇔ 888new ⇔ PG88 ⇔ PG88
EE88 ⇔ SanClub ⇔ F168 ⇔ QQ88
hb88 ⇔ Vin777 ⇔ SV388 ⇔ MV66 ⇔ 23WIN
https://vankhanhtvv.com/ ⇔ Nhà Cái LC88
https://789fnew.com/ ⇔ https://u888lm.com/
https://sv66.coupons/ ⇔ https://f168.tech/
https://8kbetbh.com/ ⇔ https://ta88club.kim/
socolivemv88 ⇔ https://rr88.com.se/
https://bet168.com.co/ ⇔ https://8kbet.co/
https://888b-link.cc/ ⇔ https://sunwinn.deal/
88gokingfun ⇔ https://bong88vn.wiki/
SHBET ⇔ https://shbet.racing/
RR99 ⇔ U888 ⇔ OK8386 ⇔
MM88 ⇔ 33win ⇔ BL555 ⇔ 69vn
 ⇔ https://w88link1.com/
xocdia88 ⇔ 77ball ⇔ vuabet88 ⇔ betvisa
https://fun88link0.com/ ⇔ https://fun88link1.com/
https://188betlink0.com/ ⇔ https://188betlink1.com/
https://188betlink2.com/ ⇔ https://w88link0.com/
thabet ⇔  ⇔  ⇔  ⇔ 789F
QQ88 COM ⇔ https://xx88.sale/ ⇔ 78win
https://bet88.pictures/ ⇔ https://xo88.group/
https://86bet.tech/ ⇔ https://nohu90.consulting/
789BET ⇔ https://i9betz4.com/ ⇔ đá gà 88
w88link2.com ⇔ w88link3.com ⇔ luck8
https://8dayvip.mobi/ ⇔ https://8dayvip.com/
QQ88 Com ⇔ af88 ⇔ https://79kingsr.com/
https://pg99yk.com/ ⇔  hm88.com ⇔ J88
https://luongson161.tv/ ⇔ 78WIN ⇔ MB66
78win ⇔ U888 ⇔ nn88 ⇔ 99win ⇔ hi88
https://8kbettt.com/ ⇔ https://hi88.biz/
https://thabetcasino.us.com/ ⇔ 789Win ⇔ vn88
https://hello88net.com/ ⇔ https://pg88.jpn.com/
https://az8888.org/ ⇔ https://fly88.gifts/
lc88 ⇔ VN88 ⇔ 69vn ⇔ nh88 ⇔ vn88
GO8 ⇔ 888new ⇔ sv388 ⇔ KWIN
tỷ lệ kèo nhà cái 88 ⇔ PG66 ⇔ 68win
BL555 ⇔ 23win ⇔ SV388 ⇔ SHBET ⇔ hitclub
Game bài đổi thưởng ⇔ https://saobet.shop/
https://99ok99ok.com/ ⇔ UU88 ⇔ HM88
https://bet88.ventures/ ⇔ bongdalu22.com
zx88 ⇔ ev99 ⇔ 8s ⇔ bet8s ⇔ QQ88
https://f168.name/ ⇔ https://13wincom.io/
Nhà cái vn88 ⇔ Nhà Cái QQ88
https://fb888.in.net/ ⇔ https://kjc.ac/
https://onbet.in.net/ ⇔ link vn88 ⇔ HZ88
http://58win.trading/ ⇔ https://qq88.gives/
bong88 ⇔ sky88 ⇔ Cổng game rikvip ⇔ ev99
79KING ⇔ Bet88 ⇔ XN88 ⇔ i9bet ⇔ VN23
https://kkwin.fan/ ⇔ https://555win.bike/
https://f8bet.courses/ ⇔ https://go8play.com/
https://lc88.bar/ ⇔ 789f ⇔ abc8 ⇔ good88
789win ⇔ Hitclub ⇔ https://f8bet80.one/
lương sơn tv ⇔ vwin ⇔ sut88 ⇔ vua88
hb88 ⇔ https://okfun.center/ ⇔ 68win
LC88 ⇔ 79king ⇔ https://hi88.tours/
https://ok9.charity/ ⇔ https://kkwin68.info/
https://ee88com.me/ ⇔ https://new88blog.org
nổ hũ ⇔ https://uu88vn.com ⇔ LC88
nohu ⇔ lc88 com ⇔ 69VN ⇔ Ok365 ⇔ 6FF
Nohu90 ⇔ go8 ⇔ 22vip ⇔ af88 ⇔ YO88
five88 ⇔ 68win ⇔ 11uu ⇔ https://go8.beer/
đánh bài tiến lên ⇔  ⇔  ⇔
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây