TNU Journal of Science and Technology
229(07): 14 - 21
http://jst.tnu.edu.vn 14 Email: jst@tnu.edu.vn
A SEQUENTIAL ALGORITHM FOR
CONSTRUCTING THE DELAUNAY TRIANGULATION
Trinh Minh Duc *
TNU - University of Information and Communication Technology
ARTICLE INFO
ABSTRACT
Received:
28/12/2023
The problem of constructing Delaunay triangulation is one of the
important problems in Computational Geometry. The Delaunay
triangulation has been used widely in computational geometry and
extended to other multi-purpose domains, for example, GIS, terrain
modelling, computer graphics, pattern recognition, finite element
analysis… As a result, developing fast and effective algorithms to
construct the Delaunay triangulation is becoming more and more
important. There are a variety of sequential algorithms implemented
effectively for constructing the Delaunay triangulation. In this paper,
we present a sequential algorithm for constructing the Delaunay
triangulation of a finite planar point set based on divide-and-conquer
stratery. In particular, we use a restricted area of the examination of
points for testing the circle criterion. The efficiency of the proposed
algorithm is verified by comparing its performance with the Delaunay
triangulation procedure given by O’Rourke. The results show that the
implementation of our algorithm significantly achieves better speedups
over O’Rourke’s code.
Revised:
28/3/2024
Published:
29/3/2024
KEYWORDS
Delaunay triangulation
Triangulation
Divide-and-conquer
Voronoi diagram
Computational geometry
MT THUẬT TOÁN TUẦN T ĐỂ XÂY DỰNG LƯỚI TAM GIÁC DELAUNAY
Trường Đại học Công nghệ thông tin và Truyền thông – ĐH Thái Nguyên
THÔNG TIN BÀI BÁO
TÓM TẮT
Ngày nhận bài:
28/12/2023
Bài toán xây dựng lưới tam giác Delaunay một trong các bài toán
bản trong hình học tính toán. Lưới tam giác Delaunay đã được s rng
rãi trong hình học tính toán được m rng sang nhiều lĩnh vực khác
như hệ thống thông tin địa (GIS), hình hóa địa hình, đồ họa máy
tính đa phương tiện, phn t hu hn, nhn dng mẫu... Do đó, vic
phát triển các thuật toán nhanh hiu qu để xây dựng ới tam giác
Delaunay ngày ng trở n quan trọng. nhiều thuật toán tuần t
được cài đặt một cách hiệu qu để xây dựng tam giác Delaunay. Trong
bài báo này, chúng tôi trình bày mt thuật toán tun t để xây dựng lưi
tam giác Delaunay ca mt tập điểm phng hu hn dựa trên chiến lược
chia đ tr. C thể, chúng tôi đưa ra một vùng giới hạn để loi b đi các
điểm không cần thiết cho vic kiểm tra tiêu cđường tròn trong quá
trình ghép nối hai ới tam giác Delaunay trong hai tập con lin k
nhau. Tính hiệu qu ca thuật toán đ xuất được chng minh bng vic
so sánh sự thc thi của với mt s cài đặt xây dựng lưới tam giác
Delaunay được đưa ra bởi O’Rourke. Các kết qu thc nghim ch ra
rng s cài đặt thuật toán chúng tôi thu đưc s tăng tốc tt hơn đáng kể
so vi s cài đặt của O’Rourke.
Ngày hoàn thiện:
28/3/2024
Ngày đăng:
29/3/2024
T KHÓA
ới tam giác Delaunay
Sơ đồ Voronoi
ới tam giác
Chia để tr
Hình học tính toán
DOI: https://doi.org/10.34238/tnu-jst.9487
* Corresponding author. Email: tmduc@ictu.edu.vn
TNU Journal of Science and Technology
229(07): 14 - 21
http://jst.tnu.edu.vn 15 Email: jst@tnu.edu.vn
1. Gii thiu
Bài toán xây dựng lưới tam giác Delaunay một trong các bài toán bản trong hình học
tính toán. Lưới tam giác Delaunay cùng với đồ th đối ngu của đồ Voronoi đã được ng
dng rộng rãi trong nhiều lĩnh vực như hệ thống thông tin địa lý (GIS), mô hình hóa địa hình, đồ
họa máy tính và đa phương tiện, phn t hu hn, nhn dng mu [1]-[3]... Vì những ng dng to
ln của lưới tam giác Delaunay trong các lĩnh vực nói trên nên nhiều nhà nghiên cứu đã đưa ra
các thuật toán cả tun t lẫn song song để xây dựng lưới tam giác Delaunay. Điển hình các
công trình của Fortune [4] vi thuật toán quét; Dwyer [5], Guibas và Stolfi [6] với thuật toán chia
để tr; thuật toán tăng dần của Green và Sibson [7]...
Rt nhiều c thuật toán hiệu qu để xây dựng lưới tam giác Delaunay cả tun t ln song
song [8]-[10] dựa trên chiến lược chia đ tr. Chi tiết thuật toán xây dựng lưới tam giác
Delaunay dựa trên chiến lược chia để tr được trình bày trong [5], [6], [10], [11]. Thuật toán chia
để tr được đề xut bởi Shamos Hoey [12] được ng dụng để xây dựng đồ Voronoi vi
độ phc tp thời gian O(nlogn). Thuật toán này sau đó được s dng bởi Guibas Stolfi [6],
Lee Schachter [11] để xây dựng lưới tam giác Delaunay, thời gian chy của tiệm cn ti
ưu (độ phc tp thời gian O(nlogn)). Dwyer [5] tiếp tc ci tiến thuật toán để làm giảm độ
phc tp thi gian ti O(nlog logn), tuy nhiên số điểm đầu vào lớn nht cho s ci tiến này là
65536 điểm.
Trong bài báo này, chúng tôi trình bày một thuật toán tun t mới để xây dựng lưới tam giác
Delaunay ca mt tập điểm phng hu hn dựa trên chiến lược chia để tr của Guibas Stolfi.
C thể, chúng tôi đưa ra một vùng giới hạn để loi b đi các điểm không cn thiết cho vic kim
tra tiêu chí đường tròn trong quá trình ghép nối hai lưới tam giác Delaunay trong hai tp con lin
k nhau.
Bài báo được t chức như sau: Trong Phần 2, chúng tôi s trình bày một s khái niệm cơ bản
và xem xét lại một vài công việc có liên quan, sau đó chúng tôi trình bày thuật toán đề xut. Phn
3 đưa ra các kết qu thc nghim. Phn cuối dành cho kết lun.
2. C s lý thuyết và thuật toán đề xut
2.1. Cơ sở lý thuyết
Cho V = {v1, v2,..., vn} một tp bao gm n điểm phân biệt trong không gian Euclidean hai
chiu
2
. Gi s rng, tt c các điểm là không thẳng hàng và không bốn điểm nào nằm trên
cùng một đường tròn. Với hai điểm p, q bt k trong mt phẳng, chúng tôi hiệu một đoạn
thng hay cnh [p,q] = {(1-λ)p + λq : 0 λ 1} hiu pq đường thẳng đi qua hai điểm p
q [13]. Một đường thẳng hướng là một đường thẳng được xác định bởi hai điểm đã cho
trong mt th t c th (p,q). Một điểm z nằm bên trái của (p,q) nếu din tích của tam giác theo
th t ngược chiều kim đồng h pqz (pqz biu th một tam giác với ba đỉnh p,q,z) dương
[14]. Đặt E là tập các cạnh hay đoạn thng giữa các đỉnh trong V.
Định nghĩa 2.1 [14]: ới tam giác T = (V,E) một đồ th phẳng mỗi cạnh không chứa
điểm nào khác ngoài hai điểm đầu mút của nó, không hai cạnh nào cắt nhau và tt c các mặt
là những tam giác với hp của chúng là bao lồi ca tập điểm V.
Định nghĩa 2.2 [14]-[16]: Mt cnh [vi,vj]
E được cho là thỏa mãn đặc tính đường tròn rỗng
nếu tn ti một đường tròn đi qua vi, vj sao cho đường tròn này không chứa bt k điểm nào của V
bên trong nó. Một lưới tam giác T ca V một lưới tam giác Delaunay (DT(V)) nếu mi cnh
ca T thỏa mãn đặc tính đường tròn rỗng. Tam giác
vivjvk là một tam giác Delaunay ca DT(V)
nếu và chỉ nếu đường tròn ngoại tiếp của nó không chứa bt k điểm nào của V bên trong nó.
Đặc tính sau cùng trong định nghĩa trên được gọi tiêu chí đường tròn. thường được s
dụng như mt quy tắc để xây dựng lưới tam giác Delaunay.
Định nghĩa 2.3 [14]-[16]: Mt tiếp tuyến chung của hai đa giác lồi đơn giản một đoạn
thng nm bên ngoài của c hai đa giác, giao ct mỗi đa giác tại một đỉnh duy nht. Nếu được
TNU Journal of Science and Technology
229(07): 14 - 21
http://jst.tnu.edu.vn 16 Email: jst@tnu.edu.vn
kéo dài hạn theo bt k hướng nào, tiếp tuyến chung s không cắt vào phần bên trong của bt
k đa giác nào. Tiếp tuyến chung trên đường thng giao ct mỗi đa giác tại một đỉnh sao cho
toàn bộ phn ca c hai đa giác nằm dưới đường tiếp tuyến này. Tiếp tuyến chung dưới là đường
thng giao ct mỗi đa giác tại một đỉnh sao cho toàn bộ phn ca c hai đa giác nằm trên đường
tiếp tuyến này.
Thuật toán của Guibas và Stolfi [6] một thuật toán tun t quan trọng đưc s dụng để xây
dựng lưới tam giác Delaunay của mt tập điểm phng hu hn. Thuật toán này phù hp với
hình chia để tr tiêu chuẩn trong vic gii quyết một bài toán bằng cách chia đệ quy nó thành các
bài toán con nhỏ hơn và sau đó kết hợp các kết qu của các bài toán con đ giải bài toán ban đầu.
Thuật toán của Guibas Stolfi hiệu qu phc tp thời gian trong trường hp xu nhất
O(nlogn)) vi mt cấu trúc dữ liu Quad-edge để h tr cho việc ghép nối hai lưới tam giác
Delaunay (DT) trong hai tp con lin k nhau do vậy chúng tôi đã chọn thuật toán chia để tr
của Guibas và Stolfi. Các bước cơ bản như sau:
1) Sp xếp tập điểm V theo th t tăng dần bi tọa độ x.
2) Chia tập điểm V thành các tập con trái phải (VL VR) sao cho mi tập con s
ợng điểm xp x nhau.
3) Xây dựng một cách đệ quy các lưới tam giác Delaunay DT(VL) DT(VR).
4) Ghép nối hai lưới tam giác Delaunay DT(VL) DT(VR) để tạo thành DT(VL
VR).
Hình 1. ới tam giác Delaunay
Trong thuật toán của Guibas Stolfi, bước quan trọng phức tp nhất ghép nối hai lưới
tam giác trái và phải. Trong Hình 1, chúng ta thấy hai cạnh Delaunay được thêm mới lin k nhau
chung một đỉnh, do đó một chuỗi các cạnh Delaunay ni tiếp nhau đưc tạo thành theo
phương thẳng đứng, điều này làm cho quá trình ghép nối tuân theo một th t t dưới lên trên.
Để ghép nối hai lưới tam giác Delaunay trái phi, DT(VL) DT(VR), chúng tôi cn s dng
các tiếp tuyến chung trên dưới ca hai bao li CH(VL) CH(VR). Hai tiếp tuyến chung này
chính hai cạnh Delaunay trong DT(VL
VR) [11]. Quá trình ghép nối bắt đầu vi tiếp tuyến
chung dưới ca hai bao li, gọi đường cơ s basel và chọn một điểm th ba trong các điểm
lin k với hai điểm đầu mút của tiếp tuyến chung dưới để tạo thành một tam giác Delaunay bằng
cách kiểm tra tiêu chí đường tròn ngoại tiếp rỗng. Lúc này chúng ta thể kết nối điểm đầu mút
trái (trong VL) ti một đim lin k với điểm đầu mút phải (trong VR) ca tiếp tuyến chung dưới
hoc kết nối điểm đầu mút phải (trong VR) ti một điểm lin k với điểm đầu mút trái (trong VL)
TNU Journal of Science and Technology
229(07): 14 - 21
http://jst.tnu.edu.vn 17 Email: jst@tnu.edu.vn
ca tiếp tuyến chung dưới để tạo thành một cnh Delaunay mi trong DT(VL
VR). Quá trình
ghép nối được lp li vi cnh Delaunay mới này thay thế cho tiếp tuyến chung dưới và trở thành
một đường basel mới. Khi đường basel này lên tới tiếp tuyến chung trên của hai bao lồi, quá trình
ghép nối kết thúc.
Một dụ của quá trình này được minh họa trong Hình 2. Đường tròn ngoại tiếp CR ca tam
giác
rsr1 không chứa điểm nào của VR bên trong của đường tròn ngoại tiếp CL ca tam
giác
rsl1 không chứa điểm nào của VL bên trong của nó. Bây giờ chúng ta kết ni l1 ti s
hoc r1 ti r. Trong Hình 2, CR cha l1 bên trong của nó, vì thế chúng ta chọn cnh [s,l1] một
cnh Delaunay trong DT(VL
VR).
Hình 2. Minh họa quá trình ghép nối DT(VL) và DT(VR) để tạo thành DT(VL
VR)
2.2. Thuật toán đề xut
Đặt V = {v1, v2,..., vn} tập bao gm n điểm phân biệt trong mt phẳng và được sp xếp tăng
dn theo tọa độ x. Gi s rng tt c c điểm không thẳng hàng không bốn điểm nm
trên cùng một đường tròn. Với mỗi điểm vi chúng tôi lưu một danh sách các điểm lin k thứ
t vi1, vi2,..., vik sao cho cnh [vi,vij], j = 1, ..., k một cnh Delaunay (cnh ca một tam giác
Delaunay được gọi cạnh Delaunay). Chúng ta biết rằng, quá trình ghép nối hai lưới tam giác
trái phải lin k nhau là quan trọng tốn nhiều chi phí nhất, vậy trong phần này chúng tôi
đề xut mt thuật toán mới để ghép nối hai lưới tam giác Delaunay DT(VL) DT(VR) để to
thành DT(VL
VR)
Thuật toán
Input: Hai lưới tam giác Delaunay DT(VL) và DT(VR), tiếp tuyến chung trên dưới ca hai
bao li CH(VL) và CH(VR).
Output: ới tam giác Delaunay DT(VL
VR).
c 1: /* Khi to */
a. Gán r điểm đầu mút trái của tiếp tuyến chung dưới, s điểm đầu mút phải ca tiếp
tuyến chung dưới.
Gi ADD(r,s) để tạo thành một cnh Delaunay [r,s].
b. Gán p điểm đầu mút trái của tiếp tuyến chung trên, q điểm đầu mút phi ca tiếp
tuyến chung trên.
TNU Journal of Science and Technology
229(07): 14 - 21
http://jst.tnu.edu.vn 18 Email: jst@tnu.edu.vn
Gi ADD(p,q) để tạo thành mt cnh Delaunay [p,q].
c 2: /* Bắt đầu vi tiếp tuyến chung dưi */
a. Nếu đường tròn đi qua ba điểm r, s, q thỏa mãn tiêu chí đường tròn tcạnh [r,q] một
cạnh Delaunay và nhảy ti c 5.
b. Trái lại nếu đường tròn đi qua ba điểm r, s, p thỏa mãn tiêu chí đường tròn thì cạnh [s,p]
là một cạnh Delaunay và nhảy ti c 6.
c. Trái lại
i. Tìm một điểm u trong các danh sách liền k ca r s sao cho u nm v phía trái (r,s)
đường tròn đi qua ba điểm r, s, u thỏa mãn tiêu chí đường tròn.
ii. Nếu u trong danh sách liền k ca r thì cạnh [s,u] một cạnh Delaunay nhảy ti
c 3.
iii. Trái lại, cnh [r,u] là một cạnh Delaunay và nhảy ti c 4.
c 3:
a. /* Thêm mt cạnh Delaunay vào trong DT(VL
VR) */
Gi ADD(s,u) để tạo thành một cnh Delaunay [s,u]
b. /* Xóa các cạnh không phải là cạnh Delaunay trong DT(VL
VR) */
Vi mỗi điểm u’ nm gia r u trong danh ch lin k ca r theo hướng ngược chiu kim
đồng h (CCW): Nếu cnh [r,u’] là một cạnh Delaunay thì DEL(r,u’).
c. Gán r u và nhảy ti c 2.
c 4:
a. /* Thêm mt cạnh Delaunay vào trong DT(VL
VR) */
Gi ADD(r,u) để tạo thành một cnh Delaunay [r,u]
b. /* Xóa các cạnh không phải là cạnh Delaunay trong DT(VL
VR) */
Vi mỗi điểm u’ nm gia s u trong danh sách liền k ca s theo ớng cùng chiều kim
đồng h (CW): Nếu cnh [s,u’] là mt cạnh Delaunay thì DEL(s,u’).
c. Gán s u và lặp li c 2.
c 5:
a. /* Thêm mt cạnh Delaunay vào trong DT(VL
VR) */
Gi ADD(r,q) để tạo thành mt cnh Delaunay [r,q]
b. /* Xóa các cạnh không phải là cạnh Delaunay trong DT(VL
VR) */
Vi mỗi điểm u’ nm gia s q trong danh sách liền k ca s theo ớng cùng chiều kim
đồng h (CW): Nếu cnh [s,u’] là mt cạnh Delaunay thì DEL(s,u’). STOP.
c 6:
a. /* Thêm mt cạnh Delaunay vào trong DT(VL
VR) */
Gi ADD(s,p) để tạo thành mt cnh Delaunay [s,p]
b. /* Xóa các cạnh không phải là cạnh Delaunay trong DT(VL
VR) */
Vi mỗi điểm u’ nm gia r p trong danh ch lin k ca r theo hướng ngược chiu kim
đồng h (CCW): Nếu cnh [r,u’] là một cạnh Delaunay thì DEL(r,u’). STOP.
Trong thuật toán ở trên hàm ADD(a,b) có chức năng thêm a vào trong danh sách liền k ca b
b vào danh sách lin k ca a v trí thích hợp. Hàm DEL(a,b) xóa a t danh sách lin k ca
b b t danh sách liền k ca a.
Một điều cần lưu ý những cạnh là cạnh Delaunay trong DT(VL) hoc DT(VR) mà không
cạnh Delaunay trong DT(VL
VR), nhng cạnh này sẽ b xóa khỏi DT(VL
VR) (các Bước
3b, 4b, 5b, 6b). Trong Hình 1 chúng ta thấy [s,q] là một cnh Delaunay trong DT(VR). Tuy nhiên,
trong quá trình ghép nối, đường tròn đi qua ba điểm s, l1 r1 thỏa mãn tiêu chí đường tròn, trong
khi đường tròn đi qua ba điểm s, l1 q không thỏa mãn tiêu chí đường tròn đối vi tp V. Thêm
nữa, điểm q nm gia s r1 trong danh sách liền k ca s theo hướng cùng chiều kim đng h
tung độ ca q giá trị lớn hơn tung độ ca r1, điều này dẫn đến cnh [l1,r1] luôn ct cnh
[s,q]. Do đó, cạnh [s,q] không cạnh Delaunay trong DT(VL
VR) phải b xóa khỏi DT(VL
VR). Chúng ta thấy rằng, khi đường tròn đi qua ba điểm s, l1 r1 thỏa mãn tiêu chí đường