Việc tạo lưới tam giác cho các đa giác giả được dựa trên chiến lược "chia và trị" (Hình 2.32). Ý tưởng chính là tạo lưới tam giác cho cả đa giác trên và đa giác dưới và liên kết chúng lại khi hoàn tất. Trước tiên, ta duyệt qua tất cả các đỉnh của đa giác và kiểm tra điều kiện đường tròn ngoại tiếp rỗng với mỗi tam giác có thể tạo thành bởi đỉnh được duyệt và cạnh đáy. Việc kiểm tra kết thúc khi điều kiện được thỏa mãn. Nếu đỉnh được chọn hiện tại là , vậy thì sẽ chia đa giác thành các đa giác con nằm bên trái và bên phải, và sẽ được đệ quy để tạo lưới tam giác lại. Quá trình đệ quy ngưng khi đạt được một đa giác chỉ chứa ba đỉnh. Như vậy, với chi phí không đáng kể, một tam giác có thể được xây dựng và thêm vào lưới tam giác (nó phải được liên kết với các tam giác láng giềng của mình). Các bước này được lặp lại đến khi toàn bộ đa giác được tạo lưới tam giác xong.
Hình 2.32. Tạolưới tam giác cho đa giác giả: Tam giác abcthỏađiềukiện
Delaunay, nên đỉnh c chia đa giác thành PE và PL
Trong công trình [33] Domiter V. và B. Žalik đưa ra cách tiếp cận xây dựng lưới tam giác Delaunay ràng buộc dựa trên nguyên lý sweep-line. Tác giả đã đề nghị giải pháp gộp công đoạn chèn đỉnh và chèn ràng buộc đồng thời. Tuy nhiên, cách tiếp cận này phải xử lý khá phức tạp khi cạnh ràng buộc cắt đường tiền tuyến và có thể làm hiệu suất thực thi bị giảm đi. Hơn nữa, các công trình nghiên cứu [25] [27] [30] [33] đều không đề cập xử lý trường hợp cạnh ràng buộc thêm vào cắt một hay một số cạnh ràng buộc của lưới tam giác đang xây dựng. Trong công trình [31] Kallmann và các cộng sự thực hiện hai công đoạn để xác định các điểm giao của các cạnh ràng buộc rồi mới thực hiện chèn cạnh và cập nhật các thông tin quan hệ liên quan. Một giải pháp xây dựng lưới tam giác ràng buộc đã được tác giả công bố trong công trình [3] . Trong quá trình chèn cạnh ràng buộc, tác giả đề nghị thực hiện
của hai cạnh ràng buộc nếu có) và hiệu chỉnh toàn bộ thông tin chèn cạnh trong một lần duyệt. Thực nghiệm cài đặt đã khẳng định rằng tốc độ thực thi tăng đáng kể. Mã giả của hàm chèn cạnh ràng buộc được mô tả dưới đây:
AddConstrainedEdge
Input: CDT T, edge ab
Precondition: a, b in T and ab not in T
1 ; ;
2 do {
3 find triangle t in T that contains v and is cut by vb; 4 let e in t be the edge cut by vb;
5 if e lies on vb then {
6 do {
7 set e as constrained edge; 8 if t contains b then return;
9 let be the other end of e; ;
10 find triangle in T that contains v and is cut by ; ;
11 let in t be the edge cut by ; ;
12 } while e lies on vb;
13 }
14 else {
15 if e is constrained edge then {
16 let I be the intersection of e and vb; 17 add I to T as new node;
18 add new faces created by I to U;
19 continue; 20 } 21 } 22 ; ; 23 add t to ; add e to ; 24 do {
25 let in T be the opposite face of t through e; ; 26 add t to ;
27 if t contains b then {
28 AddConstrains(T, vb, , );
29 return;
30 }
31 let in t be the edge cut by vb; ; 32 if e lies on vb then {
33 let be the other end of e; 34 AddConstrains(T, , , );
35 ;
36 break;
38 else {
39 if e is constrained edge then {
40 let I be the intersection of e and vb; 41 add I to T as new node;
42 add new faces created by I to U;
43 break; 44 } 45 } 46 } while true; 47 } while ; 48 UpdateDelaunay(T, U); a) b) c) d)
Hình 2.33.Các bước quá trình thêm cạnh ràng buộc vào lưới tam giác (a) Chèn cạnh ab
(b) Cắtcạnh ràng buộc (in đậm)ở giao điểm i và thêm vào lưới tam giác (c) Các cạnhbịcắtbởicạnh ràng buộcsẽ bịloạibỏ
(d) Tập các đoạn con củacạnh ab sẽđược thêm vào và các vùng đa giác giảsẽ đượcđiềnđầy thành lưới tam giác