Do hoa may tinh (de 2) - Giai ppt

5 801 15
Do hoa may tinh (de 2) - Giai ppt

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

Thông tin tài liệu

Đồ họa máy tính (đề 2) Câu 1: a, Viết thủ tục vẽ đoạn thẳng trong trường hợp m thuộc (1,+ ∞ ) Procedure ve(x1,y1,x2,y2:real); Var x, y, dx, dy, p, const1, const2 : real; i : integer; Begin If (y1>y2) then Begin X:=x1; y:=y1; X1:=x2; y1:=y2; X2:=x; y2:=y; End; Dx:=x2-x1; dy:=y2-y1; P:=2*dx-dy; Const1:=2*dx-2*dy; Const1:=2*dx; X:=x1; Y:=y1; Putpixel(x,y,red); y:=y+1; For i:=y1 to y2 do Begin If (p>0 )then Begin X:=x+1; P:=p+const1; End Else P:=p+const2; Putpixel(x,y,red); Y:=y+1; End; End; b, Tính tọa độ các điểm thuộc đoạn thẳng AB với A(15; 10), B(5; 5) - Tính hệ số góc: m = (y2-y1)/(x2-x1) = (5-10)/(5-15) = 1/2 (m ∈ (0; 1]) Xa >Xb đổi chỗ cho A và B > A(5,5), B(15,10) Dx = x2 - x1 = 10 Dy = y2 - y1 = 5 P = 2dy - dx = 10 - 10 = 0 1 Const1 = 2dy - 2dx = 10 - 20 = -10 Const2 = 2dy = 10 Lập bảng các điểm thuộc đoạn thẳng AB x 5 6 7 8 9 10 11 12 13 14 15 y 5 5 6 6 7 7 8 8 9 9 10 P 0 10 0 10 0 10 0 10 0 10 0 Câu 2: Viết chương trình mô phòng đồ thị hàm số y=x 3 + 3 với x ∈ [-3, 3] và ảnh của nó qua phép đối xứng qua trục x=2, trên khung nhìn tùy chọn. Uses crt,graph; Var gd, gm : integer; xw1, xw2, yw1, yw2, tlx, tly : real; xv1, xv2, yv1, yv2 : integer; Procedure cuaso(x1,y1,x2,y2:real); Begin Xw1:=x1; Xw2:=x2; Yw1:=y1; Yw2:=y2; End; Procedure khungnhin(x1,y1,x2,y2:integer); Begin Xv1:=x1; Xv2:=x2; Yv1:=y1; Yv2:=y2; Tlx:=(xv2-xv1)/(xw2-xw1); Tly:=(yv2-yv1)/(yw2-yw1); End; Procedure chuyenhequansat(x,y:real; var x1,y1:integer); Begin X1:=round(tlx*(x-xw1)+xv1); Y1:=round(tly*(yw2-y)+yv1); End; Procedure chuyenden(x,y:real); Var xm,ym:integer; Begin 2 Chuyenhequansat(x,y,xm,ym); Moveto(xm,ym); End; Procedure veden(x,y:real); Var xm,ym:integer; Begin Chuyenhequansat(x,y,xm,ym); lineto(xm,ym); End; (* Tìm ma trận phép biến đôi lấy tịnh tiến} - Tịnh tiến x=2 về 0y X’= x-2 Y’= y           − = 102 010 001 1 T - Lấy đối xứng qua trục 0y x’= x y’= -y           −= 100 010 001 2 T - Tịnh tiến trở lại x’=x+2 y’=y           + = 102 010 001 3 T Nhân 3 ma trận trên lại, ta được: x’=-x+4 y’=y           − == 104 010 001 3214 xTxTTT *) Procedure laydoixung(x,y:real; var xm,ym:real); Begin Xm:= -x+4; Ym:=y; End; Procedure chuyendendx(x,y:real); Var x1,y1 : real; x2,y2:integer; Begin Laydoixung(x,y,x1,y1); Chuyenhequansat(x1,y1,x2,y2); Moveto(x2,y2); End; 3 Procedure vedendx(x,y:real); Var x1,y1 : real; x2,y2:integer; Begin Laydoixung(x,y,x1,y1); Chuyenhequansat(x1,y1,x2,y2); lineto(x2,y2); End; Begin Gd:=0; initgraph(gd, gm, ' \bgi'); Cuaso(-3,-24, 3, 31); Khungnhin(150, 150, 300, 250); rectangle(150, 150, 300, 250); Dx:= 0.01; X := xw1; Y := x*x*x + 3; Chuyenden(x,y); {ve do thi} Repeat X := x+dx; Y := x*x*x + 3; If (x<xw2) then Veden(x,y); Until x>=xw2; {ve anh} X := xw1; Y := x*x*x + 3; Chuyendendx(x,y); Repeat X := x+dx; Y := x*x*x + 3; If (x<xw2) then Vedendx(x,y); Until x>=xw2; Readln; Closegraph; End. 4 Câu 3: Tính tập hợp các điểm thuộc đường cong Bezier với 4 điểm điều khiển theo thứ tự: A(1, 1), B(5, 3), C(6, 4), D(7, 2) có độ phân hoạch (bước nhảy của tham biến u, u ∈ [0, 1]) ∆u=0.2, tọa độ của các điểm lấy chính xác 1 chữ số sau dấu phẩy. - Đường cong Bezier luôn đi qua điểm điều khiển đầu và cuối, vì vậy điểm A và D thuộc đường cong Bezier. - Các điểm thuộc đường cong sẽ có tọa độ thỏa mãn công thức: . Trong đó: t ≡ u L = 4-1 = 3 • u=0: Ứng với điểm A. • u=0.2: Tọa độ của điểm này được tính như sau: )2.0()()2.0( 3 0 3 0 ∑∑ == == k kk L k L kk BPtBPP 1311 31 0300 30 )2,01.(2,0 )2,01.(2,0 )2.0( −− −+−= CPCPP 3333 33 2322 32 )2,01.(2,0 )2,01.(2,0 −− −+−+ CPCP 008,0.096,0.384,0.512,0. 3210 PPPP +++= )064,2;064,3(008,0).2;7(096,0).4;6(384,0).3;5(512,0).1;1( =+++= Điểm có tọa độ (X, Y) là 1 điểm thuộc đường cong Bezier. • Tương tự tính cho trường hợp u = 0.4, 0.6, 0.8 • u=1: Ứng với điểm D. ==> Tóm lại sẽ có 6 điểm thuộc đường cong bezier 5 . B(5; 5) - Tính hệ số góc: m = (y2-y1)/(x2-x1) = ( 5-1 0)/( 5-1 5) = 1/2 (m ∈ (0; 1]) Xa >Xb đổi chỗ cho A và B > A(5,5), B(15,10) Dx = x2 - x1 = 10 Dy = y2 - y1 = 5 P = 2dy - dx = 10 - 10 =. khungnhin(x1,y1,x2,y2:integer); Begin Xv1:=x1; Xv2:=x2; Yv1:=y1; Yv2:=y2; Tlx:=(xv2-xv1)/(xw2-xw1); Tly:=(yv2-yv1)/(yw2-yw1); End; Procedure chuyenhequansat(x,y:real; var x1,y1:integer); Begin X1:=round(tlx*(x-xw1)+xv1); Y1:=round(tly*(yw2-y)+yv1); End; Procedure. X1:=x2; y1:=y2; X2:=x; y2:=y; End; Dx:=x2-x1; dy:=y2-y1; P:=2*dx-dy; Const1:=2*dx-2*dy; Const1:=2*dx; X:=x1; Y:=y1; Putpixel(x,y,red); y:=y+1; For i:=y1 to y2 do Begin If (p>0 )then Begin X:=x+1; P:=p+const1;

Ngày đăng: 08/08/2014, 09:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan