bộ, một phần hoặc không nhìn thấy Bài toán đặt ra là cần phải thể hiện phần không bị khuất của các vật thể tuỳ theo vị trí và góc độ quan sát của người quan sát 1.. Mô tả vùng quan sát
Trang 1q[1]:=x1-xmin; q[2]:=xmax-x1; q[3]:=y1-ymin; q[4]:=ymax-y1;
For k:=1 To 4 Do
Begin
t:=q[k]/p[k];
If p[k]<0 then If t1<t Then t1:=t;
If p[k]>0 then If t2>t then t2:=t;
End;
If t1<=t2 then
Begin
xw1:=x1+t1*dx; yw1:=y1+t1*dy;
xw2:=x1+t2*dx; yw2:=y1+t2*dy;
Line(Round(xw1),Round(yw1),Round(xw2),Round(yw2));
End;
End;
(*****************************)
Begin
Clrscr;
write('Nhap (xmin,ymin): '); readln(xmin,ymin);
write('Nhap (xmax,ymax): '); readln(xmax,ymax);
write('Nhap (a1,b1): '); readln(a1,b1);
write('Nhap (a2,b2): '); readln(a2,b2);
gd:=detect;
Initgraph(gd,gm,'C:\tp\bgi');
setcolor(White);
setlinestyle(1,0,0);
Line(Round(a1),Round(b1),Round(a2),Round(b2));
setlinestyle(0,0,0);
If (a1<>a2) And (b1<>b2) Then Liang_Barsky_Clipping(a1,b1,a2,b2)
Else Special_Line(a1,b1,a2,b2);
settextjustify(1,1);
outtextxy(320,450,'HIEN THI MOT DOAN THANG TRONG MOT CUA SO CHO TRUOC');
outtextxy(320,470,'THEO THUAT TOAN LIANG_BARSKY');
rectangle(xmin,ymin,xmax,ymax);
Readln;
Closegraph;
End
$13 Vùng nhìn thấy
Trong khi quan sát các vật thể trong không gian chúng ta gặp hai tình huống sau:
1 Từ vị trí quan sát chúng ta có thể nhìn thấy một phần hay không nhìn thấy vật thể
Điều này phụ thuộc vào vị trí và góc nhìn của người quan sát đối với vật thể
Trang 2bộ, một phần hoặc không nhìn thấy
Bài toán đặt ra là cần phải thể hiện phần không bị khuất của các vật thể tuỳ theo vị trí và góc độ quan sát của người quan sát
1 Mô tả vùng quan sát
Để dễ hình dung, chúng ta có thể giả sử người quan sát có một máy ảnh, ống kính của máy ảnh hướng theo trục OZ mặt phẳng chiếu Π là diện tích của tấm phim trong buồng tối có kích thước 2u x 2w khoảng cách từ mắt người quan sát đến mặt phẳng chiếu Π là v=EO
Ta gọi vùng nhìn thấy được của người quan sát là hình chóp vô hạn có đỉnh E và các cạnh là các đường thẳng đi qua đỉnh E và có hướng là:
u + +v w, u+ ưv w, vư +u w, vư ưu w,
Ví dụ: epρ eoρ opρ eoρ ρ ρ ρ ρ ρu w v u w
Nói chung điểm E vị trí của người quan sát có thể là một điểm tuỳ ý trong không gian, giả sử E(xe,ye,ze) các vectơ ρ ρ ρ
u v w, , vuông góc với nhau từng cặp và P(x,y,z)
là một điểm nào đó, hãy xác định hình chiếu P' của P lên mặt phẳng chiếu Π qua tâm E
Từ hình vẽ dễ dàng nhận xét:
ρ ρ
v
ep′ = cosα
( )
ep
ep v
ep
ep v
ρ
ρ
ρ ρ
ρ
ρ ρ
1
Z
w
P2
P3 u
P4 E
O P1
v
α
P
v
E
Trang 3( )
⇒ ep′ = ep
ep v
ρ ϖ ( ).1 Công thức (1) cho chúng ta cách xác định P' thông qua vectơ epρ
và véctơ ρ
v
Ta có thể xác định P' theo một công thức khác
ep ρ ρ v op ρ
′ = + ' Trên mặt phẳng Π ta có:
opρ x eρu y eρw '= ′ + ′
ở đây ρ ρ
ρ ρ
w
u = , w = , ′ ′, là toạ độ của P' trong hệ toạ độ Ouw
⇒ epρ ρ′ = + ′ + ′v x eρu y eρw
( )2
hay ep x y
e e v
u v
ρ
ρ ρ ρ
′ = ′ ′
⎡
⎣
⎢
⎢
⎢
⎤
⎦
⎥
⎥
⎥ ( , , )1 ( )3
Nhân (2) lần l−ợt với ρ ρ ρ
e eu, w,v ta suy ra:
′ = ′
′ =
=
⎫
⎬
⎪
⎭⎪
x ep e
y ep e
v v ep v
u w
ρ ρ
ρ ρ
ρ ρ ρ ρ
.
( ) 4
thay ep ep
ep v
ρ ρ
′ = ( )
Ta có:
′ =
′ =
⎫
⎬
⎪⎪
⎭
⎪
⎪
ep v
ep v
u
w
( )
( )
( )
ρ ρ
ρ ρ
ρ ρ
ρ ρ
5
Công thức (5) là tọa độ x',y' cần tìm của P' trên mặt phẳng Π
Chú ý:
Công thức (5) không xác định khi ep vρ ρ
=0 Điều này có nghĩa là P nằm trên mặt phẳng song song với Π và đi qua tâm chiếu E
Trong công thức (5) nếu ep vρ ρ
<0 điều này có nghĩa góc của epρ
và ρ
v lớn hơn 90o
Có nghĩa điểm P nằm về phía sau tâm chiếu do đó P không nằm trong vùng nhìn thấy, nh− vậy không thể có P'
Trong công thức (5) nếu ep vρ ρ
>0 điều này chứng tỏ P thuộc vùng nhìn thấy và x',y'
là đ−ợc xác định
Trang 42 Chuyển hệ toạ độ thực về hệ toạ độ quan sát
Chúng ta gọi hệ toạ độ mô tả đối tượng là hệ toạ độ thực hay hệ toạ độ cho trước ký hiệu là OXYZ, gọi hệ toạ độ quan sát là hệ toạ độ người quan sát dùng để quan sát đối tượng ký hiệu là O'X'Y'Z' Trong hệ toạ độ quan sát ta giả sử người quan sát quan sát đối tượng theo hướng O'Z' và ở vị trí cách O' một đơn vị
O
Y
X' X Z Z'
O'
Y' E(XE,YE,ZE)
Nếu hệ toạ độ thực OXYZ chưa trùng với hệ toạ độ quan sát ta cần phải thực hiện các phép biến đổi tịnh tiến và quay để đưa hệ toạ độ thực về hệ toạ độ quan sát
3 Mô tả vật thể
a Mô hình khung giây (Wireframe)
Một mô hình Wireframe thể hiện hình dáng của đối tượng 3 chiều bằng 2 danh sách, một danh sách các đỉnh và một danh sách các cạnh Danh sách các đỉnh lưu giữ toạ
độ các đỉnh của đối tượng và được đánh số thự tự thích hợp, danh sách các cạnh lưu giữ số thứ tự của cặp các điểm đầu và cuối của mỗi cạnh
Ví dụ : Danh sách các đỉnh và các cạnh của một hình lập phương
Danh sách các đỉnh
Danh sách các cạnh Cạnh đỉnh 1 đỉnh 2
Trang 54 4 1
Vẽ hình lập phương theo mô hình trên
b Mô hình đa giác (Polygon Method)
Không có gì khác nhau giữa mô hình đa giác và mô hình Wireframe Mô hình đa giác thể hiện hình dáng của đối tượng 3 chiều bằng 2 danh sách, một danh sách các
đỉnh và một danh sách các mặt Danh sách các đỉnh lưu giữ toạ độ các đỉnh của đối tượng và được đánh số thự tự thích hợp, danh sách các mặt lưu giữ số thứ tự của các
đỉnh lần lượt là các đỉnh của mỗi mặt
Ví dụ : Danh sách các đỉnh và các mặt của một hình lập phương
Danh sách các đỉnh
Trang 61 1 2 3 4
Vẽ hình lập phương theo mô hình trên
Bài tập : Biểu diễn các khối đa diện đều và viết chương trình minh hoạ :
1 Tứ diện đều
2 Khối lập phương
3 Bát diện đều (8 mặt, mỗi mặt là một tam giác đều, 1 đỉnh kề 4 mặt)
4 Nhị thập diện đều (20 mặt, mỗi mặt là một tam giác đều, 1 đỉnh kề 5 mặt)
5 Thập nhị diện đều (12 mặt, mỗi mặt là một ngũ giác đều, 1 đỉnh kề 3 mặt)
6 Biểu diễn hình lăng trụ và viết chương trình minh hoạ
$14 Xác định đường khuất mặt khuất
Để có thể tạo ra ảnh nổi trong không gian 3 chiều người ta phải bỏ đi các mặt khuất
đường khuất hoặc dựa vào màu sắc để tạo nên độ sáng tối khác nhau, điều này dẫn
đến bài toán xác định mặt khuất đường khuất trong kỹ thuật đồ hoạ
1 Xác định phía trước phía sau của một mặt
Giả sử cho một vật thể trong không gian 3D được giới hạn bởi các mặt là các đa giác Một mặt giới hạn cùng vật thể là phần giới hạn của mặt phẳng chứa đa giác đó giả
sử mặt phẳng có phương trình: