Tải bản đầy đủ (.pdf) (7 trang)

Đồ 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

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 (254.31 KB, 7 trang )

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:

×