Thuật toán chia nhị phân

Một phần của tài liệu Hướng dẫn làm đồ họa vi tính giáo trình cơ bản (Trang 69 - 72)

M Ở ĐẦU

5.3.2 Thuật toán chia nhị phân

Một tiếp cận là dựa trên cơ chế đánh mã được phát triển bởi Cohen và Sutherland. Mọi điểm ở hai đầu mút đoạn thẳng trong hình ảnh sẽ được gán một mã nhị phân 4 bit, được gọi là mã vùng, giúp nhận ra vùng tọa độ của một điểm. Các vùng này được xây dựng dựa trên sự xem xét với biên cửa sổ, nhưở hình 6-8. Mỗi vị trí bit trong mã vùng được dùng để chỉ ra một trong bốn vị trí tọa độ tương ứng của điểm so với cửa sổ: bên trái (left), phải (right), trên đỉnh (top), dưới đáy (bottom). Việc đánh số theo vị trí bit trong mã vùng từ 1 đến 4 cho từ phải sang trái, các vùng tọa độ có thể

liên quan với vị trí bit như sau:

Hình 5.5: Mã hóa các đầu mút ca đon thng

Giá trị 1 ở bất kỳ vị trí nào chỉ ra rằng điểm ở vị trí tương ứng, ngược lại bit ở vị

trí đó là 0. Nếu một điểm nằm trong cửa sổ, mã vị trí là 0000. Một điểm bên dưới và bên trái cửa sổ có mã vùng là 0101.

Cài đặt minh ha thut toán mã hóa

byte EncodePoint(Point LeftTop, Point RightBottom, Point P) { byte code = 0; if (P.X < LeftTop.X) { code |= 8; } if (P.X > RightBottom.X) { code |= 4; } if (P.Y < RightBottom.Y)

{ code |= 2; } if (P.Y > LeftTop.Y) { code |= 1; } return code; }

Thut toán chia nh phân

1. Nếu E(A) = 0 và E(B) = 0 kết luận AB∩ (R) = AB; thuật toán dừng. 2. Nếu [E(A) AND E(B)] != 0 kết luận AB∩ (R) = ∅; kết thúc thuật toán. 3. Nếu E(A) = 0 và E(B) ≠ 0(tức A∈ (R) và B∉ (R)) thực hiện:

a. Đặt C = A, D = B.

b. Trong khi độ dài ||CD|| lớn hơn ε

Đặt M là trung điểm của đoạn CD.

Nếu E(M) = 0 thì cập nhật C = M ngược lại D = M. c. Kết luận AB∩ (R) = AM; kết thúc thuật toán.

4. Nếu E(A) = 0 và E(B) = 0, hoán đổi vai trò của AB; lặp lại bước 3. 5. Ngược lại, thực hiện:

a. Đặt C = A, D = B.

b. Trong khi độ dài ||CD|| lớn hơn ε

Đặt M là trung điểm của đoạn CD.

Nếu E(M) = 0 áp dụng Bước 3 cho hai đoạn MCMD. Kết luận

AB∩(R) = CD;kết thúc thuật toán. Nếu [E(M) AND E(R)] != 0 đặt C = M.

Nếu [E(M) AND E(D)] != 0 đặt D = M.

Nếu [E(R) AND E(D)] != 0 kết luận AB∩ (R)= ∅; kết thúc thuật toán.

Hình 5.6: Minh ha ca thut toán chia nh phân.

Một phần của tài liệu Hướng dẫn làm đồ họa vi tính giáo trình cơ bản (Trang 69 - 72)

Tải bản đầy đủ (PDF)

(120 trang)