Đồ họa máy tính - Chương 2 Các phép biến đổi hình trên hệ toạ độ - Bài 4 ppt

7 578 1
Đồ họa máy tính - Chương 2 Các phép biến đổi hình trên hệ toạ độ - Bài 4 ppt

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

Thông tin tài liệu

Kỹ thuật Đồ hoạ máy tính 35 Chơng 2 Các phép biến đổi hình trên hệ toạ độ $4. Các phép biến đổi trong không gian 2 chiều Chúng ta biết rằng trong không gian hai chiều để biểu diễn các hình ngời ta thờng chọn hệ toạ độ Decác hoặc hệ toạ độ cực. Để tiện cho việc khảo sát các hình ngời ta cần phải thực hiện một số phép biến đổi, dới đây ta xem xét một số phép biến đổi cơ bản: tịnh tiến, quay, co giãn trong không gian hai chiều 1. Phép tịnh tiến: Giả sử trong hệ toạ độ Decac XOY cho điểm P(x,y) để dịch chuyển điểm P(x,y) đến điểm P'(x',y') theo vectơ T=[Tx,Ty] khi đó x',y' đợc xác định nh sau: =+ =+ xxTx yyTy (.)11 T P Tx x Ty P' O y Y Một cách hình thức để tiện cho việc ký hiệu ta có thể biểu diễn công thức 1.1 dới dạng vectơ sau: ( , ,) ( , ,) ( ) =ì xy xy Tx Ty 11 10 0 010 1 211 ma trận 100 010 1Tx Ty gọi là ma trận tịnh tiến ký hiệu là T(Tx,Ty) Kỹ thuật Đồ hoạ máy tính 36 2. Phép quay quanh gốc toạ độ Phép quay quanh gốc toạ độ O một góc r r x' P x X y' P' O y Y Giả sử điểm P(x,y) làm với trục ox một góc , |OP| = r sau khi quay OP đi một góc ta đợc vectơ OP' Điểm P' có toạ độ (x',y') đợc xác định nh sau: x'=rcos(+)=r cos cos - r sin sin y'=rsin(+)=r cos sin + rsin cos do x=rcos(), y=rsin() ta có: = =+ xx y yx y cos sin sin cos ( ) 212 Công thức (2.1.2) có thể viết lại một cách hình thức sau: ( , ,) ( , ,) cos sin sin cos =ì xy xy11 0 0 001 Có thể ký hiệu ma trận trên là ma trận quay cos sin sin cos ( , ) 0 0 001 = RO R(,O) ký hiệu cho ma trận quay quanh gốc toạ độ O một góc 3. Phép co gin hệ toạ độ Giả sử có hệ toạ độ OXY ta cần phải giãn trục OX với hệ số Lx, trục OY với hệ số Ly khi đó điểm P(x,y) sẽ trở thành điểm P'(x',y') biểu diễn trong hệ XOY có dạng: = = xLx yLy x y . . ( )213 Một cách hình thức ta có thể viết công thức (2.1.3) ở dạng: Kỹ thuật Đồ hoạ máy tính 37 ( , ,) ( , ,) =ì xy xy L L x y 11 0 0 00 001 kí hiệu ma trận co giãn LL L L L xy x y (,)= 0 0 00 001 4. Biến đổi từ hệ toạ độ thực sang toạ độ màn hình : Trớc tiên ta khai báo kiểu cấu trúc của điểm trong không gian 2 chiều nh sau : Type Point_2D = Record x, y : Real; End; (Tuy rằmg toạ độ trên màn hình là kiểu số nguyên nhng ta khai báo là kiểu số thực, vì nếu khai báo là kiểu số nguyên các phép tính giữa số thực và số nguyên hay bị tràn số) a. Chuyển từ toạ độ thực sang cửa sổ nhìn : Giả sử hình vẽ của chúng ta ở hệ toạ độ thực là nằm trong hình chữ nhật có đỉnh trên bên trái là (Xmin,Ymin) và đỉnh dới bên phải là (Xmax, Ymax) nh vậy kích thớc của hình vẽ là (Xmax-Xmin) x (Ymax-Ymin), nhng ta lại muốn nhìn hình vẽ trong một cửa sổ có kích thớc là MaxX x MaxY nên nếu hình vẽ nhỏ hơn của sổ nhìn thì ta phải phóng to lên, còn ngợc lại nếu lớn hơn thì ta phải thu nhỏ lại, nh vậy ta sẽ thực hiện một phép co dãn theo hệ số co dãn là : CGx:=MaxX/(Xmax-Xmin); CGy:=MaxY/(Ymax-Ymin); Lúc này các toạ độ của các điểm sẽ đợc nhân với CGx và CGy : Xmin:=CGx*Xmin; Xmax:=CGx*Xmax; Ymin:=CGy*Ymin; Ymax:=CGy*Ymax; Kỹ thuật Đồ hoạ máy tính 38 Và ta có thủ tục chuyển một điểm từ toạ độ thực sang cửa sổ nhìn nh sau : Procedure WTV(p : Point_2D; Var q : Point_2D); Begin q.x:=p.x*CGx; q.y:=p.y*CGy; End; b. Chuyển từ cửa sổ nhìn sang màn hình Nh ta đã biết toạ độ của màn hình có gốc là đỉnh trên bên trái và theo chiều dơng nh trên hình vẽ, mà ta lại phải mô tả hình vẽ nh là ở thế giới thực, do đó ta phải biến đổi hình vẽ từ cửa sổ nhìn sang màn hình. Nh ở hình trên gốc toạ độ O của hình vẽ thực sẽ có toạ độ ở trên màn hình là : Xgoc:=0; If Xgoc>Xmin Then Xgoc:=Round(ABS(Xmin)); Ygoc:=0; If Ygoc<Ymax Then Ygoc:=Round(ABS(Ymax)); Và ta có thể vẽ hệ trục toạ độ bằng thủ tục sau: Procedure He_Truc; Begin Line(Round(Xgoc),0,Round(Xgoc),GetMaxY); Line(0,Round(Ygoc),GetMaxX,Round(Ygoc)); End; Và một điểm (u,v) của hình vẽ thực khi chuyển sang toạ độ màn hình sẽ có toạ độ (x,y) nh sau : x=Xgoc+u ; y=Ygoc-v Và ta có thủ tục chuyển một điểm từ của sổ nhìn sang toạ độ màn hình nh sau : Procedure VTS(p : Point_2D; Var q : Point_2D); Begin q.x:=Xgoc+p.x; q.y:=Ygoc-p.y; End; Ta có ví dụ minh hoạ sau : Program Hinh_sin; Kü thuËt §å ho¹ m¸y tÝnh 39 Uses Crt, Graph; Type Point_2D = Record x, y : Real; End; Const Xmin: Real=0; Ymin: Real=0; Xmax: Real=639; Ymax: Real=479; MaxX: Integer=600; MaxY: Integer=440; Var m,n : Integer; ch: char; CGx,CGy,x,b,Xgoc,Ygoc : Real; p1,p2 : Point_2D; (*********************) Procedure WTV(p : Point_2D; Var q : Point_2D); Begin q.x:=p.x*CGx; q.y:=p.y*CGy; End; (*********************) Procedure VTS(p : Point_2D; Var q : Point_2D); Begin q.x:=Xgoc+p.x; q.y:=Ygoc-p.y; End; (********************) Procedure He_Truc; Begin Line(Round(Xgoc),0,Round(Xgoc),GetMaxY); Line(0,Round(Ygoc),GetMaxX,Round(Ygoc)); End; (*********************) Function bp(x: Real) : Real; Begin bp:=Sin(x); { bp:=Cos(x); bp:=Sqr(x); } end; (*********************) Begin clrscr; Kü thuËt §å ho¹ m¸y tÝnh 40 m:=0; InitGraph(m,n,''); DirectVideo:=False; MaxX:=GetMaxX; MaxY:=GetMaxY; b:=2*pi/360; Xmin:=0; Xmax:=2*pi; Ymin:=-1; Ymax:=1; { Xmin:=-PI+b; Xmax:=pi-b; Ymin:=-1; Ymax:=1; Xmin:=-50; Xmax:=50; Ymin:=0; Ymax:=2500;} If Xmin>0 Then Xmin:=0; If Ymin>0 Then Ymin:=0; If Xmax<0 Then Xmax:=0; If Ymax<0 Then Ymax:=0; CGx:=MaxX/(Xmax-Xmin); CGy:=MaxY/(Ymax-Ymin); Xmin:=CGx*Xmin; Xmax:=CGx*Xmax; Ymin:=CGy*Ymin; Ymax:=CGy*Ymax; Xgoc:=0; If Xgoc>Xmin Then Xgoc:=Round(ABS(Xmin)); Ygoc:=0; If Ygoc<Ymax Then Ygoc:=Round(ABS(Ymax)); He_Truc; x:=Xmin; p1.x:=x; p1.y:=bp(x); WTV(p1, p2); p1:=p2; VTS(p2, p2); MoveTo(Round(p2.x),Round(p2.y)); Repeat p1.x:=x; p1.y:=bp(x); WTV(p1, p2); p1:=p2; VTS(p2, p2); LineTo(Round(p2.x),Round(p2.y)); x:=x+b; Until x>2*pi-Xmin+b; Readln; CloseGraph; End. Kỹ thuật Đồ hoạ máy tính 41 ở ví dụ trên ta có thể vẽ đồ thị của nhiều hàm số khác nhau mà không cần lập lại chơng trình, mà chỉ cần thay hàm mới gán lại các giá trị của Xmin, Xmax và Ymin, Ymax tức là đa bài toán về tìm giá trị lớn nhất và nhỏ nhất của hàm số ở trên đoạn [Xmin, Xmax] Tơng tự nh vậy ta cũng có thể áp dụng cho chơng trình mô tả các phép biến hình để hình vẽ có thể đợc phóng to lên đầy màn hình. Bi tập : 1. Lập chơng trình vẽ đồ thị của các hàm đã biết 2. Lập chơng trình mô tả phép biến một đoạn thẳng thành một đoạn thẳng qua các phép biến hình đã nói ở trên. 3. Lập chơng trình mô tả phép biến một đa giác thành một đa giác qua các phép biến hình đã nói ở trên. 4. Lập chơng trình mô tả phép biến một đờng tròn thành một đờng tròn qua các phép biến hình đã nói ở trên. 5. Lập chơng trình mô tả phép biến một đờng Elip thành một đờng Elip qua các phép biến hình đã nói ở trên. 6. Lập chơng trình mô tả phép biến một đờng Hypebol thành một đờng Hypebol qua các phép biến hình đã nói ở trên. $5. Các phép biến đổi trong không gian 3 chiều 1. Phép tịnh tiến trong không gian 3 chiều Giả sử trong hệ toạ độ OXYZ có điểm P(x,y,z) cần phải tịnh tiến điểm p theo vectơ T(tx,ty,tz) khi đó ta đợc điểm P'(x',y',z') đợc suy tơng tự nh trong không gian 2 chiều ta có: (,,,)(,,,) =ì xyz xyz ttt xyz 11 1000 0100 0010 1 =opTtxtytz.(,,) 2. Phép quay trong không gian ba chiều Trực tiếp suy từ trờng hợp 2 chiều. Giả sử có vectơ op =(x,y,z) cần phải quay op quanh trục Ox một góc , ta đợc vectơ op =(x',y',z') xác định theo công thức: . thuật Đồ hoạ máy tính 35 Chơng 2 Các phép biến đổi hình trên hệ toạ độ $4. Các phép biến đổi trong không gian 2 chiều Chúng ta biết rằng trong không gian hai chiều để biểu diễn các hình. ngời ta thờng chọn hệ toạ độ Decác hoặc hệ toạ độ cực. Để tiện cho việc khảo sát các hình ngời ta cần phải thực hiện một số phép biến đổi, dới đây ta xem xét một số phép biến đổi cơ bản: tịnh. thẳng qua các phép biến hình đã nói ở trên. 3. Lập chơng trình mô tả phép biến một đa giác thành một đa giác qua các phép biến hình đã nói ở trên. 4. Lập chơng trình mô tả phép biến một đờng

Ngày đăng: 24/07/2014, 10:21

Từ khóa liên quan

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

Tài liệu liên quan