1. Trang chủ
  2. » Công Nghệ Thông Tin

Đồ 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 579 1
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 254,31 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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:

′ = +

′ = +

x x Tx

y y Ty ( )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:

( ,′ ′ =, ) ( , , )ì ( )

Tx Ty

1

211

ma trận

1

Tx Ty

⎥ gọi là ma trận tịnh tiến ký hiệu là T(Tx,Ty)

Trang 2

2 Phép quay quanh gốc toạ độ

Phép quay quanh gốc toạ độ O một góc θ

ϕ

r

x '

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ó:

cos sin sin cos ( )

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

x y 1 x y1

0 0

Có thể ký hiệu ma trận trên là ma trận quay

cos sin

0 0

= R O

R(θ,O) ký hiệu cho ma trận quay quanh gốc toạ độ O một góc θ

3 Phép co gi∙n 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:

′=

′=

x L x

y L y

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:

Trang 3

( ,′ ′ =, ) ( , , )ì

L L

x y

0 0

kí hiệu ma trận co giãn L L L

L L

x y ( , )=

0 0

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 nhưng 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), nhưng 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;

Trang 4

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;

Trang 5

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;

Trang 6

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

Trang 7

ở 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

Bμi 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ó:

( ,′ ′ ′ =, , ) ( , , , )ì

x y z x y z

tx ty tz

1

=op T tx ty tz ( , , )

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:

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

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm