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.. Lập bảng các bước tiến hành thuật toán DDA để vẽ đoạn thẳng AB.. Câ
Trang 1Đề 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
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!
Trang 2Bà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;
Trang 3while 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;
Trang 4rn:=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 pi<0 then yi+1=yi, pi+1=pi+2dy; if pi<0 then yi+1=yi+1, pi+1=pi+2dy-2dx; Dx=25-5=20;
Dy=24-12=12;
P0=2Dy-Dx=4;
Trang 520 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