ở 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á
Trang 1ở 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 0 0 0
0 1 0 0
0 0 1 0
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:
Trang 2( , , , ) ( , , , ) cos sin
ư
⎡
⎣
⎢
⎢
⎢
⎢
⎤
⎦
⎥
⎥
⎥
⎥
x y z 1 x y z 1
ϕ ϕ = → op R x ( , ) ϕ
Tương tự nếu quay →
op quanh trục Oy thì →′ op được xác định theo công thức sau:
( , , , ) ( , , , )
ư
⎡
⎣
⎢
⎢
⎢
⎢
⎤
⎦
⎥
⎥
⎥
⎥
x y z 1 x y z 1
→ op ′ = → op R y ( , ) ϕ Phép quay quanh trục OZ
Tương tự nếu quay →
op quanh trục OZ thì →′ op được xác định theo công thức sau:
( , , , ) ( , , , )
⎡
⎣
⎢
⎢
⎢
⎢
⎤
⎦
⎥
⎥
⎥
⎥
x y z 1 x y z 1
→′ = →
op op R z ( , )ϕ
3 Phép co gi∙n trong không gian 3 chiều
Giả sử trong hệ toạ độ OXYZ trục OX co giãn với hệ số lx,OY co giãn với hệ số ly, trục OZ co giãn với hệ số lz, khi đó trong hệ toạ độ OXYZ ta có → ′ op được xác định theo công thức sau:
( ′ ′ ′ , , , ) = ( , , , ) ì
⎡
⎢
⎢
⎢
⎤
⎥
⎥
⎥
lx ly
Trang 3Giả sử cho mặt phẳng Π xác định bởi ax+by+cz=d và cho điểm P hãy tìm P' đối xứng với P qua mặt phẳng Π
Gọi → n là véctơ pháp tuyến của Π : → n =(a,b,c)
Gọi Q là điểm thuộc Π sao cho PQ ⊥ Π
Q=(x
1,y1,z1) , P=(x,y,z)
⇒ → = →
pq α.n ⇒x-x
1=αa; y-y1=αb; z-z1=αc vì Q∈Π → ax
1+by1+cz1=d
⇒ a(x-αa)+b(y-αb)+c(z-αc)=d
a2 b2 c
x
1= x-αa; y1= y-αb; z1= z-αc do đó ta xác định được Q
Sau khi xác định Q để xác định P' ta hãy tịnh tiến P theo vectơ 2→ pq
P'=P ì T(2.(x
1 -x), 2.(y 1 -y), 2.(z 1 -z))
5 Cách vẽ hình 3 chiều trên màn hình máy tính :
a Hệ toạ độ trong không gian ba chiều :
Trong không gian 3 chiều người ta hay dùng 2 hệ toạ độ đó là hệ toạ độ tay phải và
hệ toạ độ tay trái :
Trang 4Trong máy tính, khi thì ta dùng hệ toạ độ tay phải, khi thì ta dùng hệ toạ độ tay trái (nh− khi dùng các thuật toán để xử lý các hình khuất mặt khuất theo độ sâu, có nghĩa là nếu một điểm nào đó có toạ độ theo trục Oz càng lớn thì điểm ấy nằm càng sâu) Để biểu diễn một điểm trong không gian 3 chiều ta phải đ−a nó về không gian
2 chiều, Và cách đ−a về dạng biểu diễn trong không gian 2 chiều nh− sau
b Đ−a một điểm biểu trong không gian 3 chiều sang 2 chiều :
Trang 5Procedure 3D_To_2D(P3D : Point_3D; Var P2D : Point_2D);
Begin
P2D.x := P3D.x - P3D.z * Cos(G);
P2D.y := P3D.y - P3D.z * Sin(G);
End;
Và sau đó ta thực hiện cách vẽ hình trong không gian 2 chiều như đã hướng dẫn ở bài trước
Ví dụ : Vẽ đường cong x=Sin(t), y=Cos(t), z=Sin(t)*Cos(t)
Program Duong_ba_chieu;
Uses Crt, Graph;
Type
Point_2D = Record
x, y : Real;
End;
Point_3D = Record
x, y, z : Real;
End;
Const
Xmin: Real=0;
Ymin: Real=0;
Zmin: Real=0;
Xmax: Real=639;
Ymax: Real=479;
Zmax: Real=479;
MaxX: Integer=600;
MaxY: Integer=440;
G : Real=PI/4;
Var
m,n : Integer;
ch: char;
CGx,CGy,x,y,z,t,b,Xgoc,Ygoc : Real;
p1,p2 : Point_2D;
p3 : Point_3D;
(*********************)
Procedure C3_2(p : Point_3D; Var q : Point_2D);
Begin
q.x:=p.x-p.z*Cos(G);
q.y:=p.y-p.z*Sin(G);
End;
(*********************)
Procedure WTV(p : Point_2D; Var q : Point_2D);
Begin
q.x:=p.x*CGx;
q.y:=p.y*CGy;
Trang 6End;
(*********************)
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
SetLineStyle(1,0,1);
Line(Round(Xgoc),0,Round(Xgoc),GetMaxY);
Line(0,Round(Ygoc),GetMaxX,Round(Ygoc));
Line(0,Round(Ygoc+Xgoc),639,Round(Ygoc+Xgoc)-639);
SetLineStyle(0,0,1);
End;
(*********************)
Procedure bp(t: Real; Var p : Point_3D);
Begin
p.x:=Sin(t); p.y:=Cos(t); p.z:=Sin(t)*Cos(t);
end;
(*********************)
Begin
clrscr;
m:=0;
InitGraph(m,n,'c:\tp\bgi');
DirectVideo:=False;
MaxX:=GetMaxX;
MaxY:=GetMaxY;
b:=2*pi/360;
Xmin:=-1; Xmax:=1;
Ymin:=-1; Ymax:=1;
Zmin:=-1/2; Zmax:=1/2;
Xmin:=Xmin+Zmin*Sin(G);
Xmax:=Xmax+Zmax*Cos(G);
Ymin:=Ymin+Zmin*Sin(G);
Trang 7Ymin:=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;
t:=0;
bp(t,p3);
C3_2(p3,p1);
WTV(p1, p2);
p1:=p2;
VTS(p2, p2);
MoveTo(Round(p2.x),Round(p2.y));
Repeat
bp(t,p3);
C3_2(p3,p1);
WTV(p1, p2);
p1:=p2;
VTS(p2, p2);
LineTo(Round(p2.x),Round(p2.y));
t:=t+b;
Until t>2*pi+b;
Readln;
CloseGraph;
End
Bμi tập :
1 Thực hiện các phép tịnh tiến, phép quay, phép co dãn cho một đoạn thẳng
2 Thực hiện các phép tịnh tiến, phép quay, phép co dãn cho một tứ diện
3 Thực hiện các phép tịnh tiến, phép quay, phép co dãn cho một hình hộp chữ nhật
4 Vẽ các đường cong ba chiều đã biết
5 Quay đường một đường thẳng quanh các trục để được mặt nón tròn xoay
6 Quay đường cong ba chiều đã biết quanh các trục để được các mặt tròn xoay
7 Quay đoạn thẳng PQ quanh trục toạ độ OX một góc α
8 Quay đoạn thẳng PQ quanh trục toạ độ OY một góc α
9 Quay đoạn thẳng PQ quanh trục toạ độ OZ một góc α
10 Cho điểm M(x,y,z) hãy xác định M sau khi quay nó quanh trục đi qua đoạn thẳng PQ cho trước