1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài tập đồ họa máy tính trên Pascal

10 3,1K 4

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 95 KB

Nội dung

Một số chương trình đồ hoạ minh hoạ Turbo Pascal BÀI VẼ BẦU TRỜI ĐẦY SAO uses crt,graph; var gd, gm, i : integer; BEGIN gd := 0; initgraph(gd,gm,'C:\TP\BGI'); for i := to 1000 putpixel(random(640),random(480),random(15)+1); readkey; END BÀI VẼ LÁ CỜ ĐỎ SAO VÀNG uses crt,graph; var gd, gm, i, goc, r : integer; p : array[1 5,1 2] of integer; { lưu toạ độ đỉnh } BEGIN gd := 0; initgraph(gd,gm,'C:\TP\BGI'); goc := 18; r := 100; for i := to begin p[i,1] := round(r*cos(goc*pi/180)); p[i,2] :=-round(r*sin(goc*pi/180)); {dùng dấu – trục y hình ngược} goc := goc + 2*72; end; SetFillStyle(1,red); {vẽ cờ hình chữ nhật tô màu đỏ} Bar(100,100,540,380); SetViewPort(320,240,600,400,false); {chuyển gốc toạ độ hình} SetColor(yellow); SetFillStyle(1,yellow); FillPoly(5,p); {tô đa giác hình sao, phần không tô} FloodFill(0,0,yellow); {nên phải tô phần FloodFill} readkey; END BÀI VẼ BÓNG CHUYỂN ĐỘNG KIỂU BẬT TƯỜNG uses crt,graph; var gd,gm,x,y,dx,dy,r : integer; BEGIN gd := 0; initgraph(gd,gm,'C:\TP\BGI'); x := 100; y := 100; dx := 6; dy := 5; r := 30; repeat setcolor(yellow); circle(x,y,r); {vẽ đường tròn màu vàng} delay(20); setcolor(0); circle(x,y,r); {vẽ đường tròn màu trùng màu xoá } if (x>=640-r) or (x=480-r) or (y xoá} if (x>=640-r) then x := r; {nếu sang cạnh bên phải quay lại bên trái} x := x + dx; if a < then a := a + 360; a := a - da; {quay ngược chiều dương nên phải trừ} until keypressed; END BÀI VẼ CHUYỂN ĐỘNG CỦA TRÁI ĐẤT VÀ MẶT TRĂNG uses crt,graph; var gd,gm,x,y,x1,y1,da,da1,r,r1,goc,goc1 : integer; procedure hinhtron(x,y,r,c : integer); {vẽ hình tròn có màu c} var goc,dx,dy,i : integer; begin SetColor(c); circle(x,y,r); SetFillStyle(1,c); FloodFill(x,y,c); end; BEGIN gd := 0; initgraph(gd,gm,'C:\TP\BGI'); SetViewPort(320,240,600,400,false); {chuyển gốc toạ độ góc} goc := 0; goc1 := 0; {goc góc chuyển động Trái đất, goc1 Mặt trăng} da :=360 div 360;da1 := 360 div 30; {Trái đất quay 1o lần, tương ứng năm 360 ngày } hinhtron(0,0,50,lightred); {vẽ Mặt trời} repeat x := round(240*cos(goc*pi/180)); {toạ độ tương đối Trái đất với Mặt trời} y :=-round(200*sin(goc*pi/180)); {chú ý quỹ đạo hình elip} hinhtron(x,y,20,lightblue); {vẽ Trái đất} x1 := round(60*cos(goc1*pi/180));{toạ độ tương đối Mặt trăng so với Trái đất} y1 :=-round(50*sin(goc1*pi/180)); Một số chương trình đồ hoạ minh hoạ Turbo Pascal hinhtron(x+x1,y+y1,8,yellow); delay(60); {vẽ Mặt trăng} hinhtron(x,y,20,0); {xoá cách vẽ màu nền} hinhtron(x+x1,y+y1,8,0); if goc < then goc := goc + 360; {cập nhật góc chuyển động} goc := goc - da; if goc1 < then goc1 := goc1 + 360; goc1 := goc1 - da1; until keypressed; END BÀI VẼ CÁC ĐƯỜNG CONG TRONG MẶT PHẲNG 2D uses crt,graph; var gd, gm, xo, yo, w, h : integer; x1,y1,x2,y2, xtl, ytl : real; (* Khởi tạo tham số cửa sổ khung nhìn *) procedure khoitao_cuaso; begin xo := 20; yo := 40; w := 600; h := 400; xtl := 50; ytl := 50; {chọn trước tỉ lệ ngang dọc, cho nhau} x2 := w/xtl/2; x1 := -x2; {căn cửa sổ để tâm gốc toạ độ} y2 := h/ytl/2; y1 := -y2; end; {Các hàm chuyển toạ độ thực thành toạ độ hình} function tox(x : real): integer; begin tox := xo + round((x-x1)*xtl); end; function toy(y : real): integer; begin toy := yo + round((y2-y)*ytl); end; {Thủ tục vẽ đoạn thẳng mặt phẳng thực 2D} procedure Line2D(x1,y1,x2,y2: real); begin Line(tox(x1),toy(y1),tox(x2),toy(y2)); end; {Thủ tục vẽ trục toạ độ} procedure vetruc; var i : integer; x : string; begin Line2D(x1,0,x2,0); {vẽ trục x} Line2D(x2-0.2,+0.1,x2,0); {vẽ hình mũi tên trục x} Line2D(x2-0.2,-0.1,x2,0); Line2D(0,y1,0,y2); {vẽ trục y} Line2D(+0.1,y2-0.2,0,y2); {vẽ hình mũi tên trục y} Line2D(-0.1,y2-0.2,0,y2); SetColor(lightgreen); SetTextJustify(1,1); for i := round(x1) + to round(x2) - {vạch ghi toạ độ trục x} if i then begin str(i,x); {vạch i nguyên, chuyển số thành chữ} outtextxy(tox(i),toy(-0.4),x); {để vẽ chữ lên hình} Line2D(i,-0.1,i,0.1); {vẽ đoạn thẳng làm vạch} end; Một số chương trình đồ hoạ minh hoạ Turbo Pascal for i := round(y1) + to round(y2) - if i then begin str(i,x); outtextxy(tox(-0.4),toy(i),x); Line2D(-0.1,i,0.1,i); end; end; {Vẽ đường cong hàm số y = sinx, x = x1 -> x2} procedure duongsin; var x,y,a,b,dx : real; i,n : integer; begin setcolor(yellow); a := x1; b := x2; n := 100; dx := (b-a)/n; x := a; y := sin(x); moveto(tox(x),toy(y)); {dùng hàm toX, toY để chuyển toạ độ thực thành toạ độ hình} for i := to n begin x := x + dx; y := sin(x); lineto(tox(x),toy(y)); end; end; {Vẽ đường cong tham số y = cos3t, y = sin5t, t= 2pi} procedure thamso; var t,x,y,a,b,dt : real; i,n : integer; begin setcolor(lightred); a := 0; b := 2*pi; n := 100; dt := (b-a)/n; t := a; x := cos(3*t) ; y := sin(5*t); moveto(tox(x),toy(y)); for i := to n begin t := t + dt; x := cos(3*t) ; y := sin(5*t); lineto(tox(x),toy(y)); end; end; {Vẽ đường cong toạ độ cực r = 3cos3p, p= 2pi} procedure tdcuc; var r,p,x,y,a,b,dp : real; i,n : integer; begin setcolor(13); a := 0; b := 2*pi; n := 100; dp := (b-a)/n; p := a; r := 3*cos(3*p); x := r*cos(p) ; y := r*sin(p); {công thức đổi toạ độ cực sang toạ độ Đề 2D} moveto(tox(x),toy(y)); for i := to n begin p := p + dp; r := 3*cos(3*p); x := r*cos(p) ; y := r*sin(p); lineto(tox(x),toy(y)); end; end; BEGIN gd := 0; initgraph(gd,gm,'C:\TP\BGI'); khoitao_cuaso; vetruc; duongsin; thamso; tdcuc; readkey; END Một số chương trình đồ hoạ minh hoạ Turbo Pascal BÀI MINH HOẠ CÁC PHÉP BIẾN ĐỔI 2D uses crt,graph; var gd, gm, xo, yo, w, h, n : integer; x1,y1,x2,y2, xtl, ytl : real; x,y : array[1 4] of real; procedure khoitao_cuaso; begin gd := 0; initgraph(gd,gm,'C:\TP\BGI'); xo := 20; yo := 40; w := 600; h := 400; xtl := 30; ytl := 30; x2 := w/xtl/2; x1 := -x2; y2 := h/ytl/2; y1 := -y2; end; function tox(x : real): integer; begin tox := xo + round((x-x1)*xtl); end; function toy(y : real): integer; begin toy := yo + round((y2-y)*ytl); end; procedure Line2D(x1,y1,x2,y2: real); begin Line(tox(x1),toy(y1),tox(x2),toy(y2)); end; procedure vetruc; var i : integer; x : string; begin Line2D(x1,0,x2,0); Line2D(x2-0.2,+0.1,x2,0); Line2D(x2-0.2,-0.1,x2,0); Line2D(0,y1,0,y2); Line2D(+0.1,y2-0.2,0,y2); Line2D(-0.1,y2-0.2,0,y2); SetColor(lightgreen); SetTextJustify(1,1); for i := round(x1) + to round(x2) - if i then begin str(i,x); outtextxy(tox(i),toy(-0.4),x); Line2D(i,-0.1,i,0.1); end; for i := round(y1) + to round(y2) - if i then begin str(i,x); outtextxy(tox(-0.4),toy(i),x); Line2D(-0.1,i,0.1,i); end; end; (* Khởi tạo toạ độ đỉnh hình chữ nhật*) procedure khoitao_hcn; begin n := 4; Một số chương trình đồ hoạ minh hoạ Turbo Pascal x[1] := 1; y[1] := 1; x[2] := 1; y[2] := 3; x[3] := 5; y[3] := 3; x[4] := 5; y[4] := 1; end; (*Thủ tục vẽ hình chữ nhật*) procedure VeHCN(c : integer); begin SetColor(c); MoveTo(tox(x[1]), toy(y[1])); LineTo(tox(x[2]), toy(y[2])); LineTo(tox(x[3]), toy(y[3])); LineTo(tox(x[4]), toy(y[4])); LineTo(tox(x[1]), toy(y[1])); end; (* Tịnh tiến HCN theo vector (a,b) *) procedure tinhtien(a,b : real); var i : integer; begin for i := to n begin x[i] := x[i] + a; y[i] := y[i] + b; end; end; (* Tịnh tiến HCN theo tỉ lệ (Sx,Sy) *) procedure codan(Sx,Sy : real); var i : integer; begin for i := to n begin x[i] := Sx*x[i]; y[i] := Sy*y[i]; end; end; (* Tịnh tiến HCN theo góc a, đo radian *) procedure Quay(a : real); var i : integer; cosa,sina,tx,ty : real; begin cosa := cos(a); sina := sin(a); for i := to n begin tx := x[i] * cosa - y[i] * sina; ty := x[i] * sina + y[i] * cosa; x[i] := tx; y[i] := ty; end; end; BEGIN khoitao_cuaso; khoitao_hcn; vetruc; VeHCN(14); readkey; tinhtien(-3,-2); {tịnh tiến HCN để tâm HCN gốc toạ độ} VeHCN(13); readkey; codan(1.2,2.4); {co dãn để HCN trở thành hình vuông :D} VeHCN(12); readkey; quay(pi/4); {Quay HCN góc pi/4} VeHCN(11); readkey; Một số chương trình đồ hoạ minh hoạ Turbo Pascal END BÀI VẼ CÁC ĐƯỜNG SIN QUAY QUANH GỐC TOẠ ĐỘ uses crt,graph; var gd, gm, xo, yo, w, h : integer; x1,y1,x2,y2, xtl, ytl : real; (* CÁC THỦ TỤC HỆ ĐỒ HOẠ 2D *) procedure khoitao_cuaso; begin xo := 20; yo := 40; w := 600; h := 400; xtl := 30; ytl := 30; x2 := w/xtl/2; x1 := -x2; y2 := h/ytl/2; y1 := -y2; end; function tox(x : real): integer; begin tox := xo + round((x-x1)*xtl); end; function toy(y : real): integer; begin toy := yo + round((y2-y)*ytl); end; procedure Line2D(x1,y1,x2,y2: real); begin Line(tox(x1),toy(y1),tox(x2),toy(y2)); end; procedure vetruc; var i : integer; x : string; begin SetColor(14); Line2D(x1,0,x2,0); Line2D(x2-0.2,+0.1,x2,0); Line2D(x2-0.2,-0.1,x2,0); Line2D(0,y1,0,y2); Line2D(+0.1,y2-0.2,0,y2); Line2D(-0.1,y2-0.2,0,y2); SetColor(lightgreen); SetTextJustify(1,1); for i := round(x1) + to round(x2) - if i then begin str(i,x); outtextxy(tox(i),toy(-0.4),x); Line2D(i,-0.1,i,0.1); end; for i := round(y1) + to round(y2) - if i then begin str(i,x); outtextxy(tox(-0.4),toy(i),x); Line2D(-0.1,i,0.1,i); end; end; {Vẽ đường sin y = sinx, x = -pi -> pi, quay góc} procedure quay(x,y,a:real; var tx,ty : real); begin tx := x * cos(a) - y * sin(a); ty := x * sin(a) + y * cos(a); end; procedure duongsin(goc : real); Một số chương trình đồ hoạ minh hoạ Turbo Pascal var x,y,a,b,dx,tx,ty : real; i,n : integer; begin setcolor(15); a := -2*pi; b := 2*pi; n := 50; dx := (b-a)/n; x := a; y := sin(x); quay(x,y,goc,tx,ty); moveto(tox(tx),toy(ty)); for i := to n begin x := x + dx; y := sin(x); quay(x,y,goc,tx,ty); lineto(tox(tx),toy(ty)); end; end; BEGIN gd := 0; initgraph(gd,gm,'C:\TP\BGI'); khoitao_cuaso; vetruc; duongsin(0); duongsin(pi/4); duongsin(pi/2); duongsin(3*pi/4); readkey; END BÀI VẼ CHONG CHÓNG QUAY BẰNG ĐỒ HOẠ RÙA uses crt,graph; var ra,rx,ry, gd,gm, i : integer; {CÁC THỦ TỤC CỦA HỆ ĐỒ HOẠ RÙA} procedure right(a: integer); begin := - a; if < then := + 360; end; procedure RmoveTo(x,y : integer); begin rx := x; ry := y; end; procedure RLineTo(x,y : integer); begin Line(rx,ry,x,y); rx := x; ry := y; end; procedure Rmove(d : integer); var dx,dy : integer; begin dx := round(d*cos(ra*pi/180)); dy :=-round(d*sin(ra*pi/180)); rx := rx + dx; ry := ry + dy; end; procedure RLine(d : integer); var dx,dy : integer; begin dx := round(d*cos(ra*pi/180)); dy :=-round(d*sin(ra*pi/180)); RLineTo(rx+dx,ry+dy); end; {Vẽ nhà kích thước cạnh s} procedure RHouse(s : integer); begin Một số chương trình đồ hoạ minh hoạ Turbo Pascal Rline(s); Right(30); Rline(s); Right(120); Rline(s); Right(30); Rline(s); Right(90); Rline(s); Right(90); end; {Vẽ chong chóng nhà} procedure Chongchong; begin for i := to begin RHouse(50); Right(60); end; end; {Cho chong chóng quay} procedure Quay; begin repeat setcolor(14); chongchong; delay(50); setcolor(0); chongchong; right(10); until keypressed; end; BEGIN gd := 0; initgraph(gd,gm,'C:\TP\BGI'); RMoveTo(320,240); {chuyển rùa hình} quay; readkey; END BÀI 10 VẼ CÁC ĐƯỜNG XOẮN ỐC BẰNG ĐỒ HOẠ RÙA uses crt,graph; var ra,rx,ry, gd,gm : integer; {CAC THU TUC CUA HE DO HOA RUA} procedure right(a: integer); begin := - a; if < then := + 360; end; procedure RmoveTo(x,y : integer); begin rx := x; ry := y; end; procedure RLineTo(x,y : integer); begin Line(rx,ry,x,y); rx := x; ry := y; end; procedure Rmove(d : integer); var dx,dy : integer; begin dx := round(d*cos(ra*pi/180)); dy :=-round(d*sin(ra*pi/180)); rx := rx + dx; ry := ry + dy; end; Một số chương trình đồ hoạ minh hoạ Turbo Pascal procedure RLine(d : integer); var dx,dy : integer; begin dx := round(d*cos(ra*pi/180)); dy :=-round(d*sin(ra*pi/180)); RLineTo(rx+dx,ry+dy); end; {Vẽ hệ đồ họa rùa} procedure Ngoisao; var i : integer; begin SetColor(14); := 0; Rmoveto(50,100); for i := to begin RLine(100); Right(144); end; end; {Vẽ đa giác n cạnh} procedure Dagiac; var i,n : integer; begin SetColor(11); := 0; Rmoveto(500,70); n := 10; for i := to n begin RLine(30); Right(360 div n); end; end; {Vẽ đường xoắn ốc polysprial} procedure polysprial(d, dd, da, n : integer); var i : integer; begin for i := to n begin RLine(d); Right(da); d := d + dd; end; end; procedure xoanoc; begin SetColor(12); := 0; Rmoveto(100,340); polysprial(5, 2, 90, 50); {xoắn ốc vuông, góc xoắn 90 độ} SetColor(10); := 0; Rmoveto(300,240); polysprial(20, 5, 170, 70); {xoắn ốc hình sao, góc xoắn 170 độ} SetColor(13); := -50; Rmoveto(520,340); polysprial(5, 2, 89, 50); {xoắn ốc hình nghiêng, góc xoắn 89 độ} end; BEGIN gd := 0; initgraph(gd,gm,'C:\TP\BGI'); ngoisao; dagiac; xoanoc; readkey; END 10

Ngày đăng: 14/04/2017, 18:17

TỪ KHÓA LIÊN QUAN

w