III. CÁC THUẬT TOÁN KIỂM TRA SỰ TƯƠNG QUAN GIỮA CÁC ĐỐI TƯỢNG HÌNH HỌC
9. Kiểm tra quan hệ hai đa giác
Cơ sở toán học:
Giải thuật này cho phép clip bất kỳ một đa giác vào 1 đa giác. Nó cũng cho phép hình thành sự giao, hội của 2 đa giác.Chúng ta bắt đầu bằng ví dụ minh họa trong hình sau. Ta liệt kê những đỉnh theo thứ tự từ trái sang phải, theo chiều kim đồng hồ. Hai đa giác SUBJ và CLIP được thể hiện bằng 2 danh sách (a,b,c,d) và (A,B,C,D) tương ứng. Tất cả điểm giao của 2 danh sách sẽ được xác định và lưu vào danh sách (theo thứ tự sang phải của mỗi cạnh).
D
Dựựaavvààoohhììnhnhvvẽẽtrtrêên,n,tataccóó::
SUBJ_LIST:
SUBJ_LIST: a,a,1,1,b,b,2,2,c,c,3,3,4,4,d,d,5,5,66
CLIP_LIST: A, 6 ,3 , 2, B, C, D, 4, 5
Duyệt SUBJ theo hướng đi tới cho tới khi tìm được 1 điểm giao đi vào (entering intersection), là điểm giao mà SUBJ di chuyển từ ngoài vào trong đa giác CLIP.Và đưa điểm này vào danh sách xuất đa giác được clip.
D 6 5 4 3 2 1 d c b a C B A
Luận văn tốt nghiệp
Thiết kế hệ thống kiểm tra cácc quan hệ hình họctrang 41 trang 41
Duyệt SUBJ tới khi gặp 1điểm giao khác. Nhảy ra khỏi SUBJ và di chuyển theo CLIP thay vì SUBJ. Duyệt CLIP theo hướng đi tới. Tới khi gặp một điểm giao, nhảy ra khỏi CLIP và duyệt theo SUBJ theo hướng đi tới, và cứ tiếp tục như vậy. Mỗi đỉnh hoặc mỗi điểm giao gặp phải khi duyệt sẽ được đưa vào danh sách xuất đa giác được clip. Lặp lại tiến trình trên giữa 2 đa giác, duyệt mỗi đa giác theo hướng đi tới cho tới khi đỉnh đầu tiên được gặp lại. Danh sách xuất ra ở thời điểm này (1,b,2,B)
Bây giờ, ta kiểm tra một điểm giao“entering” khác của SUBJ. Và sẽ tạo ra danh sách xuất (3,4,5,6). Việc kiểm tra những điểm giao “entering” khác sẽ chỉ ra là tất cả chúng đã được duyệt, quá trình chấm dứt.
Cách thức để hiện thực quá trình xử lý này là xây dựng hai danh sách SUBJ_LIST: a, 1, b, 2, c, 3, 4, d, 5, 6
CLIP_LIST : A, 6, 3, 2, B,1, C, D, 4 , 5
Mà trong đo, việc duyệt mỗi đa giác và liệt kê những đỉnh và điểm giao phải theo thứ tự được gặp.
Giải thuật:
-Bước 1:Tạo danh sách SUBJ_LIST
Duyệt lần lượt mỗi cạnh đa giác SUBJ theo thứ tự cùng chiều kim đồng hồ {
- Tìm các điểm cắt của cạnh Pi-Pi+1 với đa giác CLIP.
1 b 2 3 4 d 5 a a rest star SUBJ_LIS T: SUBJ_LIS T: A 6 3 2 B 1 C D 4 5
Luận văn tốt nghiệp
Thiết kế hệ thống kiểm tra cácc quan hệ hình họctrang 42 trang 42
- Sắp xếp danh sách điểm cắt theo hoành độ tăng dần . Nếu hoành độ Pi.x=Pi+1.x thì sắp xếp theo tung độ.
- Đưa đỉnh Pi vào danh sách SUBJ_LIST
- Đưa các điểm cắt từ danh sách điểm cắt vào SUBJ_LIST theo hướng đi từ Pi tới Pi+1
}
-Bước 2: Tạo danh sách CLIP_LIST
Duyệt lần lượt mỗi cạnh đa giác CLIP theo thứ tự cùng chiều kim đồng hồ {
- Tìm các điểm cắt của cạnh Pi- Pi+1 với đa giác SUBJ.
- Sắp xếp danh sách điểm cắt theo hoành độ tăng dần. Nếu hoành độ Pi.x=Pi+1.x sắp xếp theo tung độ.
- Đưa đỉnh Pi vào danh sách CLIP_LIST.
- Đưa các điểm cắt từ danh sách điểm cắt vào CLIP_LIST theo hướng đi từ Pi tới Pi+1.
}
-Bước 3: Duyệt danh sách SUBJ_LIST và CLIP_LIST. Vòng lặp (1)
Vòng lặp (2)
- Tìm điểm giao “entering” chưa duyệt của SUBJ_LIST. - Duyệt trên SUBJ_LIST tới khi thấy điểm giao tiếp theo .
- Chuyển sang duyệt trên CLIP_LIST tới khi thấy điểm giao tiếp theo. Cho tới khi điểm đầu tiên(điểm ‘entering’) được gặp lại. (vòng lặp 2 ) - Xuất Danh sách đa giác tìm được ở trên.
Cho tới khi tất cả các điểm giao ‘entering’ đã được duyệt (vòng lặp 1)