Tải bản đầy đủ (.doc) (5 trang)

Đề thi đồ họa máy tính doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (106.67 KB, 5 trang )

Đề thi đồ họa máy tính, K56 (Khóa 2006-2010)
Ngày thi 22/12/2008
Thời gian: 90 phút
Câu 1:
Viết chương trình vẽ hình vuông ở tâm màn
hình từ từ nở to ra đến khi chạm cạnh màn high rồi
lại từ từ co về kích thước ban đầu như hình vẽ bên:
Câu 2:
Viết chương trình vẽ đồ thị hàm y=sin(2x) trong khoảng (-2π, 2π) kèm theo 2
đường thẳng tượng trưng cho 2 trục tọa độ, gốc tọa độ đặt ở tâm màn hình.
Vẽ một high vuông nhỏ màu đỏ trượt theo đường sin đó sao cho thời gian mà nó
đi từ điểm đầu tới điểm cuối là 10 giây.
Câu 3:
Cho A(5, 12), B(25, 24). Lập bảng các bước tiến hành thuật toán DDA để vẽ đoạn
thẳng AB.
i x
i
y
i
y
… … … …
Câu 4:
Lập trình vẽ một bánh xe lăn bên trong một hình tròn
Chúc mạnh giỏi!
Bài làm:
Câu 1:
Uses crt, graph;
Var
gd, gm: integer;
cx, cy, dem: integer;
Procedure hinhVuongNghieng(i: integer);


Begin
line(getMaxX div 2, (getMaxY div 2)-i, (getMaxX div 2)+i, getMaxY div 2);
moveTo((getMaxX div 2)+i, getMaxY div 2);
lineTo(getMaxX div 2, (getMaxY div 2)+i );
lineTo((getMaxX div 2)-i, getMaxY div 2);
lineTo(getMaxX div 2, (getMaxY div 2)-i);
End;
BEGIN
gd:=0;
initGraph(gd, gm, '');
dem:=0;
repeat
setColor(15);
if dem=getMaxY div 2 then dem:=0
else inc(dem);
{setWriteMode(1);}
hinhVuongNghieng(dem);
delay(10);
setColor(0);
hinhVuongNghieng(dem);
until keyPressed;
readln;
END.
Câu 2:
Uses crt, graph;
Var
gd, gm, tx, ty: integer;
d, x: real;
Procedure hinhVuong(i, j: integer);
Begin

rectangle(i-10, j-10, i+10, j+10);
End;
BEGIN
gd:=0;
initGraph(gd, gm, '');
setColor(14);
setViewPort(getMaxX div 2, getMaxY div 2, getMaxX, getMaxY, clipOff);
d:=0.01; tx:=40; ty:=60; x:=-2*pi;
while x<2*pi do
Begin
line(round(x*tx), -round(sin(2*x)*ty), round((d+x)*tx),
-round(sin(2*(x+d))*ty));
x:=x+d;
End;
setColor(15);
line(-400, 0, 400, 0);
line(0, 200, 0, -200);
x:=-2*pi;
setFillStyle(0,4);
while x<2*pi do
Begin
setWriteMode(xorPut);
hinhVuong(round(x*tx), -round(sin(2*x)*ty));
delay(2);
hinhVuong(round(x*tx), -round(sin(2*x)*ty));
x:=x+d;
End;
readln;
closeGraph;
END.

Câu 4:
Uses crt, graph;
Var
gd, gm, x, y, dx, da, r, rl, rn, a, g: integer;
Procedure banhXe(x, y, r, c, n, a: integer);
Var
dx, dy, goc, i: integer;
Begin
setColor(c);
goc:=a;
circle(x, y, r);
for i:=1 to n do
Begin
dx:=round(r*cos(goc*pi/180));
dy:=-round(r*sin(goc*pi/180));
line(x, y, x+dx, y+dy);
goc:=goc+360 div n;
End;
End;
BEGIN
gd:=0;
initGraph(gd, gm, '');
setViewPort(getMaxX div 2, getMaxY div 2, getMaxX, getMaxY, clipOff);
r:=30; rl:=200; g:=180;
rn:=rl-r-2;
x:=-rl+3; y:=0; dx:=3; a:=30;
da:=round(dx/r*180/pi);
circle(0, 0, rl);
repeat
banhXe(x, y, r, 14, 12, a);

delay(40);
banhXe(x, y, r, 0, 12, a);
x:=round(rn*cos(g*pi/180));
y:=-round(rn*sin(g*pi/180));
if g>360 then g:=0
else inc(g);
if a<0 then a:=a+360;
a:=a-da;
until keyPressed;
END.
Câu 3:
A(5, 12); B(25, 24)
Theo thuật toán Bresenham:
Chú ý: if p
i
<0 then y
i+1
=y
i
, p
i+1
=p
i
+2dy; if p
i
<0 then y
i+1
=y
i
+1, p

i+1
=p
i
+2dy-2dx;
Dx=25-5=20;
Dy=24-12=12;
P0=2Dy-Dx=4;
i xi yi pi c1 c2
0 5 12 4 24 -16
1 6 13 -12
2 7 13 12
3 8 14 -4
4 9 14 20
5 10 15 4
6 11 16 -12
7 12 16 12
8 13 17 -4
9 14 17 20
10 15 18 4
11 16 19 -12
12 17 19 12
13 18 20 -4
14 19 20 20
15 20 21 4
16 21 22 -12
17 22 22 12
18 23 23 -4
19 24 23 20
20 25 24 4
Theo DDA, ví dụ:

A(12, 20), B(22,
27)
dx=10 dy=7
c1=14 c2=-6
p0=4
m=dy/dx=0.7
i xi yi y
0 12 20 20
1 13 20 20.7
2 14 21 21.4
3 15 22 22.1
4 16 23 22.8
5 17 24 23.5
6 18 24 24.2
7 19 25 24.9
8 20 26 25.6
9 21 26 26.3
10 22 27 27

×