Tải bản đầy đủ (.docx) (20 trang)

Tam giác phân delaunay (delaunay triangulation)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (713.51 KB, 20 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

Hình học tính toán
ĐỀ TÀI 7
Tam giác phân Delaunay (Delaunay Triangulation)

Giảng viên hướng dẫn: Huỳnh Thị Thanh Bình
Nhóm 2

Hà Nội, tháng 4 - 2014

MỤC LỤC


Lời nói đầu
Trong toán học cũng như hình học tính toán, tam giác phân Delaunay (Delaunay
Triangulation) là một cấu trúc quan trọng và có nhiều ứng dụng thực tế. Nó được coi là cấu
trúc đối ngẫu của biểu đồ Voronoi (Voronoi Diagram) cho nên nó kế thừa tất cả những
thuộc tính đáng quan tâm của loại biểu đồ này. Ngoài ra, tam giác phân Delau nay tự nó
còn có những thuộc tính đặc biệt khác. Chính vì vậy, trong khi học học phần Hình học tính
toán này, chúng em đã quyết định chọn đề tài 7 nghiên cứu về Tam giác phân Delaunay
làm đề tài bài tập lớn. Trong báo cáo này, chúng em sẽ áp dụng tam giác phân Delaunay
vào một bài toán cụ thể, đó là mô hình hóa một phần bề mặt địa hình Trái Đất.
Nội dung báo cáo gồm 3 phần chính:
- Phần 1: Giới thiệu sơ lược về biểu đồ Voronoi.
- Phần 2: Giới thiệu tam giác phân của một tập điểm trên mặt phẳng ứng dụng trong
giải bài toán mô hình hóa một phần bề mặt Trái Đất và một trường hợp riêng của
nó: Tam giác phân Delaunay.
- Phần 3: Xây dựng tam giác phân Delaunay cho bài toán mô hình hóa một phần bề


mặt Trái Đất.
Do thời gian nghiên cứu trình độ hiện tại của nhóm có hạn nên chắc chắn trong quá
trình thực hiện đề tài không tránh khỏi những sai lầm, thiếu sót cả về nội dung lẫn hình
thức. Trong quá trình nghiên cứu, chúng em đã nhận được sự chỉ bảo, giúp đỡ tận tình của
cô Huỳnh Thị Thanh Bình cũng như các bạn sinh viên cùng lớp, để có thể hoàn thành báo
cáo này. Chúng em xin chân thành cảm ơn!

2


Chương 1
Giới thiệu sơ lược về biểu đồ Voronoi
1. Biểu đồ Voronoi
Biểu đồ Voronoi là một trong những cấu trúc quan trọng nhất của hình học tính toán,
thường được dùng để mã hóa thông tin lân cận. Cho là tập các điểm trên mặt phẳng hay
bất kỳ không gian n chiều khác. Ta cũng gọi các điểm này là site. Gọi là ô Voronoi của
site , là tập các điểm q nằm trên mặt phẳng mà gần hơn các site khác.
Ta cũng có thể định nghĩa ô Voronoi dựa trên khái niệm giao của các nửa mặt phẳng.
Cho 2 site , , tập các điểm gần hơn tạo nên một nửa mặt phẳng mở với đường bao là
đường trung trực của cạnh . Ký hiệu nửa mặt phẳng này là , . Dễ thấy một điểm q nằm trên
nếu và chỉ nếu q nằm trong phần giao nhau của các , với . Vì giao của các nửa mặt phẳng
là một đa giác lồi nên cũng là đa giác lồi (ngoại trừ các điểm nằm trên bao lồi của P là
không có bao đóng).
Ta định nghĩa biểu đồ Voronoi của tập điểm P là những gì còn lại của mặt phẳng sau
khi đã loại bỏ hết các ô Voronoi (không tính biên của chúng). Ký hiệu làVor(P). Dễ thấy,
biểu đồ Voronoi chứa một tập các đoạn thẳng và các tia.

Hình 1.1 Biểu đồ Voronoi

2. Một số tính chất của biểu đồ Voronoi

a. Phức hợp Voronoi
Biểu đồ Voronoi là một phức hợp các ô mà các mặt là các đa giác lồi. Mỗi điểm A trên
cạnh của biểu đồ Voronoi cách đều ít nhất hai láng giềng gần nhất của nó là , . Tồn tại một
đường tròn tâm A đi qua và không có một site nào khác nằm trong đường tròn này (Hình
1.2a).

3


Hình 1.2: Các tính chất của biểu đồ Voronoi

b. Đỉnh Voronoi
Đỉnh Voronoi là nơi ba ô Voronoi , , giao nhau. Đỉnh này cách đều cả ba site do đó là
tâm của đường tròn đi qua 3 site và không chứa thêm site nào khác bên trong nó(Hình
1.2b).

c. Bậc
Từ 3 điểm trên mặt phẳng ta xác định được một đường tròn. Nếu ta giả thiết về trường
hợp tổng quát rằng không có 4 điểm nào nằm cùng trên một đường tròn thì tất cả các đỉnh
Voronoi đều có bậc là ba.

d. Bao lồi
Một ô của biểu đồ Voronoi là không khép kín nếu và chỉ nếu site tương ứng nằm trên
bao lồi (khi đó site này là điểm gần nhất so với các điểm ở vô cực) của P. Vì vậy, ta dễ
dàng trích xuất được bao lồi trong thời gian tuyến tính.

e. Kích thước
Nếu gọi n là số site thì biểu đồ Voronoi là một đồ thị phẳng với đúng n mặt. Theo công
thức Euler thì số đỉnh voronoi gần bằng 2n và số cạnh không ít hơn 3n + 1.


3. Định lý quan trọng của biểu đồ Voronoi
Định lý được phát biểu như sau:
Định lý 1.1 Cho P là tập điểm trong mặt phẳng và Vor(P) là biểu đồ Voronoi của P, ta
có:
a. Một điểm q là đỉnh của Vor(P) nếu và chỉ nếu đường tròn rỗng lớn nhất của nó
chứa không ít hơn 3 site trên biên của nó.
b. Đường trung trực d của đoạn (site ) chứa cạnh của Vor(P) nếu và chỉ nếu có
một điểm q d sao cho chỉ đi qua , và không chứa site nào khác bên trong.
Trên đây là một số tính chất chung nhất của biểu đồ Voronoi. Ở chương sau, ta sẽ
nghiên cứu khái niệm tam giác phân của một tập điểm trên mặt phẳng và cấu trúc đối ngẫu
của biểu đồ Voronoi là tam giác phân Delaunay.

4


Chương 2
Tam giác phân của một tập điểm trên
mặt phẳng và Tam giác phân Delaunay
1. Tam giác phân của một tập điểm trên mặt phẳng
Cho là tập các điểm trong mặt phẳng. Ta định nghĩa phép chia mặt phẳng cực đại là
phép chia sao cho không thể thêm vào một cạnh nào nối hai đỉnh mà không phá vỡ tính
phẳng. Nói cách khác, bất cứ cạnh nào không thuộc vào cắt một trong số các cạnh đã tồn
tại. Một phép tam giác phân của P được định nghĩa là một phép chia mặt phẳng cực đại
với tập đỉnh là P.
Với định nghĩa trên, rõ ràng một tam giác phân là tồn tại. Do mọi mặt bị giới hạn đều là
đa giác và mọi đa giác đều có thể thực hiện tam giác phân nên mỗi mặt ngoại trừ mặt
không bị giới hạn đều là tam giác. Còn với các mặt không bị giới hạn, không khó để chỉ ra
rằng bất kì đoạn thẳng nào nối hai điểm liên tiếp nhau trên biên của bao lồi của P đều là
cạnh của một tam giác phân nào đó. Điều này ngụ ý rằng hợp của các mặt không giới hạn
thường là phần bù của bao lồi. Số tam giác (và số cạnh) trong các phép tam giác phân P là

như nhau. Số lượng chính xác phụ thuộc vào số điểm của P nằm trên biên của bao lồi của
P theo định lý sau:
Định lý 2.1 Cho P là một tập n điểm không thẳng hàng trong mặt phẳng. k là số điểm
của P nằm trên biên của bao lồi của P. Khi đó, bất kì phép tam giác phân nào của P cũng
đều có 2n – 2 – k tam giác và 3n – 3 – k cạnh.
Chứng minh: Gọi là một tam giác phân của P, m là số lượng tam giác của , là số mặt
của phép tam giác phân và bằng . Mọi tam giác đều có 3 cạnh và các mặt không bao có k
cạnh. Ngoài ra, mỗi cạnh đều thuộc về 2 mặt. Do đó, tổng số cạnh của là: . Theo công thức
Euler:
Thay giá trị theo n và k, theo m vào công thức ta có: và .
Gọi là một tam giác phân của P và giả thiết nó có m tam giác. Xét 3m góc của các
tam giác của , sắp xếp chúng theo thứ tự tăng dần. Gọi là dãy các góc kết quả với giá trị
tăng dần, với . Gọi là véctơ góc của . Gọi là một phép tam giác phân khác của tập điểm P
và là véctơ góc tương ứng. Ta nói rằng véctơ góc của lớn hơn véctơ góc của nếu theo
thứ tự từ điển lớn hơn . Nói cách khác, nếu tồn tại chỉ số i, với 1 i 3m sao cho :
Kí hiệu: .

5


Một tam giác phân được gọi là tối ưu góc nếu với mọi tam giác phân của P. Dưới
đây, ta sẽ tìm hiểu khi nào một tam giác phân là tối ưu góc. Trước tiên, ta nhắc lại định lý
Thales quen thuộc. Gọi góc nhỏ hơn tạo bởi 3 điểm p, q, r là .
Định lý 2.2 Cho C là một đường tròn, là đường thẳng cắt C ở 2 điểm a và b. Có 4
điểm p, q, r và s nằm về cùng một nửa mặt phẳng bờ . Giả sử p và q nằm trên đường tròn
C, r nằm bên trong C và s nằm bên ngoài C. Khi đó:

Hình 2.1: Minh họa định lý 2.2
Xét cạnh của tam giác phân của P. Nếu e không phải cạnh nằm trên bao lồi của P, nó
là cạnh của 2 tam giác và . Nếu 2 tam giác trên tạo thành một tứ giác lồi, chúng ta có thể

tạo ra một tam giác phân mới bằng cách loại bỏ cạnh khỏi và chèn cạnh vào thay thế.
Chúng ta gọi thao tác này là flip cạnh. Điểm khác biệt duy nhất giữa véctơ góc của và là
sáu góc trong được thay thế bởi sáu góc trong . Hình bên dưới minh hoạ điều này.

Hình 2.3: Flip một cạnh
Chúng ta gọi cạnh là cạnh không hợp lệ nếu:
Nói cách khác, một cạnh là không hợp lệ nếu chúng ta có thể tăng góc nhỏ nhất một
cách cục bộ bằng cách flip cạnh. Nhận xét sau đây rút ra được từ định nghĩa cạnh không
hợp lệ.
Nhận xét 2.3 Cho là một tam giác phân có một cạnh không hợp lệ e. Cho là tam giác
phân thu được từ bằng cách flip cạnh e. Khi đó, ) > A(.

6


Có thể thấy rằng không cần thiết phải tính toán các góc , để kiểm tra cạnh đã cho có
hợp lệ hay không. Thay vào đó, chúng ta có thể sử dụng tiêu chuẩn đơn giản trong bổ đề
bên dưới đây. Sự đúng đắn của bổ đề được chứng minh bằng định lý Thales.
Bổ đề 2.4 Cho cạnh là cạnh chung của 2 tam giác và . Gọi C là đường tròn ngoại
tiếp tam giác . Cạnh là không hợp lệ nếu và chỉ nếu điểm nằm ở bên trong đường tròn C.
Ngoài ra, nếu các điểm và tạo ra một tứ giác lồi và không cùng nằm trên một đường tròn
thì chắc chắn có một cạnh hoặc là cạnh không hợp lệ.
Chú ý rằng tiêu chuẩn này là đối xứng đối với và : nằm trong đường tròn ngoại tiếp
tam giác nếu và chỉ nếu nằm trong đường tròn ngoại tiếp tam giác . Khi tất cả 4 điểm
cùng nằm trên một đường tròn, cả và đều hợp lệ. Chú ý rằng 2 tam giác chung nhau 1
cạnh không hợp lệ phải ghép thành một tứ giác lồi. Điều kiện này đảm bảo luôn thực hiện
flip được cạnh không hợp lệ.
Chúng ta định nghĩa một tam giác phân hợp lệ là một tam giác phân không chứa bất kì
cạnh không hợp lệ nào. Từ nhận xét ở trên, có thể thấy rằng bất kì tam giác phân tối ưu góc
nào cũng là hợp lệ. Tìm ra một tam giác phân hợp lệ khá đơn giản nếu chúng ta có một tam

giác phân khởi đầu. Chúng ta đơn giản flip các cạnh không hợp lệ cho đến khi tất cả các
cạnh đều hợp lệ. Thuật toán tìm tam giác phân hợp lệ được miêu tả như sau:
Algorithm LEGALTRIANGULATION()
Input. Một tam giác phân bất kì của tập điểm P.
Output. Một tam giác phân hợp lệ của P.
while chứa cạnh không hợp lệ
do (* Flip cạnh *)
Cho và là 2 tam giác có chung cạnh .
Xoá cạnh khỏi và thêm cạnh thay thế vào.
return
Thuật toán này có tính dừng vì theo Nhận xét 1.3, véctơ góc của tăng lên sau mỗi
bước lặp của thuật toán. Bởi vì chỉ có một số hữu hạn các tam giác phân khác nhau của P
nên thuật toán tính dừng. Một khi thuật toán kết thúc, kết quả sẽ là một tam giác phân hợp
lệ. Mặc dù thuật toán nói trên có tính dừng, tuy nhiên, nó quá chậm để áp dụng trên thực
tế. Chúng ta sẽ để thuật toán này qua một bên. Sau cùng, ta sẽ cần đến một thủ tục tương
tự. Nhưng đầu tiên, ta sẽ tìm một cách tiếp cận hoàn toàn khác, hoặc có vẻ như khác biệt.2.

2. Bài toán mô hình hóa một phần bề mặt Trái Đất
Ta mô hình một phần bề mặt Trái Đất bằng địa hình (terrain). Địa hình là một bề mặt 2
chiều trong không gian 3 chiều với một thuộc tính đặc biệt: Mỗi đường thẳng đứng sẽ cắt
địa hình tại một điểm nếu như đường thẳng đứng cắt không gian 3 chiều trên thực tế. Nói
cách khác, địa hình là đồ thị của hàm
sao cho là chiều cao ứng với mọi điểm trong miền A của địa hình.

7


Hình 2.4: Khung nhìn phối cảnh của địa hình
Dĩ nhiên, ta không biết hết độ cao của mọi điểm trên Trái Đất mà chỉ có được độ cao
đó nơi ta đo đạc. Nghĩa là, khi nói về địa hình, ta chỉ biết giá trị hàm f của một tập hữu hạn

các điểm mẫu . Từ độ cao của những điểm mẫu này, bằng cách nào đó ta phải lấy xấp xỉ độ
cao của các điểm khác trong miền. Một cách đơn giản là gán cho mọi điểm độ cao của
điểm mẫu gần nhất. Tuy nhiên, cách này làm cho địa hình bị rời rạc, trông thiếu tự nhiên.
Do đó, ta cần có một phương pháp xấp xỉ tốt hơn.

Hình 2.5: Gióng các điểm mẫu lên độ cao tương ứng
Đầu tiên, ta xác định một phép tam giác phân tập là một phép chia mặt phẳng thành
các mặt có biên hình tam giác với các đỉnh là các điểm của P (giả thiết các điểm mẫu này
đủ để tạo ra các tam giác phủ kín toàn bộ địa hình). Sau đó, ta gióng các điểm mẫu lên độ
cao của chúng, bằng cách này, ta có thể ánh xạ mọi tam giác trong tam giác phân thành
tam giác trong không gian 3 chiều (Hình 2.5). Cái ta thu được là một địa hình đa diện, một
đồ thị của một hàm liên tục tuyến tính từng khúc. Ta có thể sử dụng địa hình đa diện như là
một xấp xỉ của địa hình gốc.
Một câu hỏi cần được đặt ra: Ta sẽ thực hiện phép tam giác phân các điểm mẫu như thế
nào? Nhìn chung, có nhiều cách khác nhau. Nhưng cách nào là cách phù hợp nhất với mục
đích của chúng ta, xấp xỉ một địa hình? Không có một câu trả lời rõ ràng. Ta không biết địa
hình gốc, ta chỉ biết độ cao của các điểm mẫu. Vì không có thêm thông tin gì, và độ cao ở

8


các điểm mẫu là độ cao đúng cho bất kỳ phép tam giác phân nào, tất cả các phép tam giác
phân dường như đều tốt như nhau. Tuy nhiên, một số phép tam giác phân nhìn vẫn tự
nhiên hơn. Ví dụ như hình 3 dưới đây cho thấy 2 phép tam giác phân của cùng một tập
điểm mẫu:

Hình 2.6: Hai cách flip một cạnh khác nhau có thể dẫn đến thay đổi rất lớn
Nhìn vào độ cao của các điểm mẫu thì có thể hình dung ra các điểm này biểu thị một
đỉnh núi. Phép tam giác phân (a) biểu thị đúng trực giác này. Tuy nhiên phép tam giác
phân b, thay vì nối cạnh giữa 2 điểm có độ cao 980 và 990 nó lại nối cạnh giữa 2 điểm có

độ cao 10 và 36 khiến ta có cảm giác có một thung lũng cắt ngang đỉnh núi. Bằng trực
giác, ta có thể thấy nó sai. Ta có thể biến trực giác này thành tiêu chuẩn đánh giá phép tam
giác phân (a) tốt hơn phép tam giác phân (b) hay không?
Vấn đề của phép tam giác phân (b) đó là độ cao của điểm q được xác định bới 2 điểm
tương đối xa nhau. Điều này xảy ra khi q nằm ở giữa cạnh của một tam giác dài và nhọn.
Độ mỏng của tam giác là nguyên nhân của vấn đề. Vì vậy, có vẻ như một phép tam giác
phân mà có những góc quá nhỏ là không tốt. Do đó, ta sẽ xếp hạng các phép tam giác phân
theo góc nhỏ nhất của các tam giác có trong chúng. Nếu 2 phép tam giác phân có góc nhỏ
nhất là bằng nhau thì sẽ xét đến góc nhỏ thứ 2 và lặp lại với các góc nhỏ thứ n khác. Vì chỉ
có một số hữu hạn các phép tam giác phân với một tập điểm P cho trước nên với phương
pháp này, chúng ta sẽ thu được một tam giác phân tốt nhất với góc nhỏ nhất là lớn nhất
trong tất cả. Đây chính là tam giác phân chúng ta cần tìm.

9


3. Tam giác phân Delaunay

Hình 2.7: Đồ thị đối ngẫu của Vor(P)
Cho P là một tập n điểm (site). Ở chương 1 ta đã nhắc đến biểu đồ Voronoi của P là
một cách chia mặt phẳng thành n vùng, mỗi vùng tương ứng với 1 site của P sao cho vùng
của site chứa tất cả các điểm trong mặt phẳng gần với site p hơn so với các site khác. Kí
hiệu biểu đồ Voronoi của P là Vor(P). Vùng của site p được gọi là ô Voronoi của p, kí
hiệu là . Trong phần này, chúng ta sẽ tìm hiểu về đồ thị đối ngẫu của biểu đồ Voronoi. Đồ
thị G này có một nút ở mỗi ô Voronoi, tương ứng với một site, và có một cung giữa hai nút
nếu các ô tương ứng có chung một cạnh. Điều này có nghĩa là tương ứng với mỗi cạnh của
Vor(P) là một cung của G . Ở trong hình bên trên, ta có thể thấy có một tương ứng một –
một giữa các cung của G và các cạnh của Vor(P).

Hình 2.8: Đồ thị Delaunay của DG(P)


10


Ở hình này, các cung được chuyển thành các đoạn thẳng. Nút tương ứng với ô Voronoi
Ѵ(p) là điểm p, và cung nối các nút thuộc Ѵ(p) và Ѵ(q) là đoạn . Chúng ta gọi đồ thị đối
ngẫu này là đồ thị Delaunay của P và kí hiệu là DG(P). (Mặc dù tên nghe như tiếng Pháp,
đồ thị Delaunay không liên quan gì với họa sĩ người Pháp. Nó được đặt tên theo tên nhà
toán học Nga Бориис Николаиевич Делонеи (chuyển ngữ sang tiếng Anh là Boris
Nikolaevich Delone) - người tìm ra nó. Dịch ra tiếng Anh là vậy nhưng, nhưng do cuốn
sách của ông xuất bản bằng tiếng Pháp- mà thời điểm đó, ngôn ngữ của khoa học là tiếng
Pháp và tiếng Đức, nên tên của ông được chuyển ngữ sang tiếng Pháp). Đồ thị Delaunay
của một tập điểm có một số tính chất đặc biệt. Tính chất đặc biệt đầu tiên đó là nó luôn là
đồ thị phẳng: Không có 2 cạnh nào của đồ thị cắt nhau.
Định lý 2.5 Đồ thị Delaunay của một tập điểm trên mặt phẳng là một đồ thị phẳng.
Chứng minh. Để chứng minh điều này, chúng ta cần xét đến tính chất của các cạnh
trong biểu đồ Voronoi trong Định lý 1.1b theo thuật ngữ của đồ thị Delaunay:
Cạnh thuộc đồ thị Delaunay DG(P) nếu và chỉ nếu có một đường tròn đi qua và và
không có một site nào khác của P nằm trong nó. (Tâm của một đường tròn như thế nằm
trên cạnh chung của và .)

Hình 2.6: Đường tròn có tâm nằm trên cạnh chung của và
Gọi là tam giác với các đỉnh , và tâm của . Cạnh nối và tâm của trong tam giác nằm
trong ; tương tự, cạnh nối và tâm của nằm trong . Gọi là một cạnh khác của DG(P) và
định nghĩa đường tròn và tam giác tương tự như và .
Giả sử, và cắt nhau. Vì và nằm ngoài nên chúng cũng nằm ngoài . Tương tự, phải
cắt cạnh đi qua tâm của tam giác . Điều đó chứng tỏ, một trong hai cạnh chứa tâm đường
tròn của tam giác (giả dụ là a) phải cắt . Tương tự, một trong hai cạnh chứa tâm đường
tròn của tam giác (giả dụ là b) cũng phải cắt . Suy ra, hai cạnh a và b phải cắt nhau. Điểm
cắt nhau sẽ thuộc về 2 ô Voronoi Ѵ phân biệt. Điều này trái với lập luận các cạnh a, b

thuộc về một ô Voronoi duy nhất.
Đồ thị Delaunay của tập điểm P là một trong 2 đồ thị của đồ thị đối ngẫu của biểu đồ
Voronoi. Như đã chỉ ra ở trên, mỗi đỉnh của Vor(P) đều nằm trong một mặt. Các cạnh bao

11


quanh mặt tương ứng với các cạnh của biểu đồ Voronoi vốn gắn liền với đỉnh Voronoi mà
chúng đồng quy tại đó. Cụ thể, nếu một đỉnh v của Vor(P) là đỉnh được tạo bởi các ô
Voronoi của các site thì khi đó, mặt f của DG(P) nhận làm đỉnh. Theo định lý của biểu
đồ Voronoi phía trên, trong trường hợp này, các điểm nằm trên cùng một đường tròn tâm
v. Vì vậy, f không chỉ có k cạnh mà nó còn là một đa giác lồi.

Hình 2.7 Các site tạo nên một đa giác lồi
Nếu các điểm của P phân bố một cách ngẫu nhiên thì xác suất để 4 điểm nằm trên cùng
một đường tròn là rất nhỏ. Chúng ta nói rằng một tập hợp điểm thuộc vào một trường hợp
tổng quát nếu nó không chứa 4 điểm nằm trên cùng một đường tròn. Nếu P thuộc trường
hợp tổng quát, thì tất cả các đỉnh của biểu đồ Voronoi đều có bậc là 3 và do đó, tất cả các
mặt bao đóng của DG(P) đều là tam giác. Điều này lý giải vì sao DG(P) thường được gọi
là tam giác phân Delaunay của P. Để chính xác hơn, chúng ta sẽ gọi là đồ thị Delaunay của
P. Chúng ta định nghĩa một tam giác phân Delaunay là một phép tam giác phân có được
bằng cách thêm các cạnh vào đồ thị Delaunay. Vì tất cả các mặt của DG(P) đều lồi nên để
có được một tam giác phân như thế không khó. Có thể thấy, tam giác phân Delaunay của P
là duy nhất khi và chỉ khi DG(P) là một tam giác phân với P thuộc một trường hợp tổng
quát.
Chúng ta nhắc lại định lý 1.1 về biểu đồ Voronoi theo thuật ngữ của đồ thị Delaunay.
Định lý 2.6 Cho P là một tập điểm trong mặt phẳng.
(i) Ba điểm là các đỉnh thuộc cùng một mặt của đồ thị Delaunay của P khi và chỉ
khi đường tròn ngoại tiếp 3 điểm này không chứa bất kì điểm nào khác của P bên
trong.

(ii) Hai điểm tạo nên một cạnh của đồ thị Delaunay của P khi và chỉ khi có một
hình tròn C chứa ở trên biên của nó và không chứa bất kì điểm nào khác của P ở
bên trong.
Định lý 2.6 đặc tả chính xác các đặc trưng của một tam giác phân Delaunay.

12


Định lý 2.7 Cho P là một tập hợp điểm trong mặt phẳng và là một tam giác phân của
P. Khi đó, là một tam giác phân Delaunay của P khi và chỉ khi mọi đường tròn ngoại tiếp
của các tam giác thuộc không chứa điểm nào của P ở bên trong.
Bởi vì chúng ta đã lập luận ở trên rằng một tam giác phân đáp ứng được mục đích nội
suy độ cao nếu như véctơ góc của nó là lớn nhất cho nên ở bước tiếp theo, chúng ta sẽ xem
xét đến véctơ góc của tam giác phân Delaunay. Đầu tiên, chúng ta đề cập đến phép tam
giác phân hợp lệ.
Định lý 2.8 Cho P là một tập hợp điểm trong mặt phẳng. Một tam giác phân của P là
hợp lệ nếu và chỉ nếu là một tam giác phân Delaunay của P.
Chứng minh: Dễ dàng chứng minh điều kiện cần trực tiếp từ định nghĩa: bất kì tam giác
phân Delaunay nào đều hợp lệ.
Để chứng minh điều kiện đủ, một tam giác phân hợp lệ là một tam giác phân Delaunay,
chúng ta sẽ sử dụng lập luận phản chứng. Giả sử, là một tam giác phân hợp lệ của P nhưng
không là tam giác phân Delaunay. Khi đó, theo định lý 2.6, có một tam giác mà đường
tròn ngoại tiếp của nó chứa ít nhất một điểm bên trong nó. Gọi e là cạnh của tam giác và
tam giác không chứa . Với tất cả các cặp trong , chọn cặp có là cực đại. Xét tam giác kề
với tam giác ở cạnh e. Vì là hợp lệ nên e cũng hợp lệ. Theo bổ đề 2.4, không nằm bên
trong . Đường tròn ngoại tiếp của chứa một phần đường tròn , và thuộc vào hai nửa mặt
phẳng khác nhau với bờ là e.

Hình 2.8: Đường tròn ngoại tiếp của chứa một phần đường tròn , và thuộc vào hai nửa
mặt phẳng khác nhau với bờ là e

Suy ra, . Giả sử là cạnh của tam giác sao cho không nằm trong . Khi đó, > theo
định lý Thales. Điều này mâu thuẫn với định nghĩa của cặp .
Bởi vì bất kì tam giác phân tối ưu góc nào đều hợp lệ nên theo Định lý 2.8, bất kì tam
giác phân tối ưu góc nào của P cũng là một tam giác phân Delaunay của P. Khi P là một
trường hợp tổng quát, sẽ chỉ có một tam giác phân hợp lệ duy nhất. Tam giác phân đó là
tam giác phân duy nhất tối ưu góc và được gọi là tam giác phân Delaunay duy nhất, trùng

13


với đồ thị Delaunay. Nếu P không là trường hợp tổng quát, bất kì tam giác phân nào của
đồ thị Delaunay cũng hợp lệ. Khi đó, không phải tất cả các tam giác phân Delaunay này
đều tối ưu góc. Tuy nhiên, véctơ góc của chúng không khác biệt nhau quá nhiều. Ngoài ra,
sử dụng định lý Thales có thể chứng minh rằng góc nhỏ nhất trong bất kì tam giác phân
nào đều tạo bởi một tập hợp điểm nằm trên cùng một đường tròn. Nghĩa là, góc nhỏ nhất
không phụ thuộc vào phép tam giác phân. Điều đó chứng tỏ bất kì tam giác phân nào biến
đồ thị Delaunay thành tam giác phân Delaunay sẽ có góc nhỏ nhất là như nhau. Định lý sau
đây tổng kết lại các lập luận bên trên.
Định lý 2.9 Cho P là một tập hợp điểm trong mặt phẳng. Bất kì phép tam giác phân tối
ưu góc nào của P đều là một tam giác phân Delaunay của P. Hơn thế nữa, bất kì tam giác
phân Delaunay nào của P đều là tam giác phân có góc nhỏ nhất là cực đại trong các
phép tam giác phân của P.

4. Xây dựng tam giác phân Delaunay
Chúng ta đã thấy rằng xây dựng được một tam giác phân Delaunay cho tập điểm P sẽ
giúp chúng ta có được một địa hình đa diện cho tập điểm mẫu P vì tam giác phân
Delaunay đảm bảo cực đại góc nhỏ nhất. Từ đó, xấp xỉ được địa hình thực tế được chính
xác hơn. Vậy làm thế nào để có thể xây dựng được một tam giác phân Delaunay? Ở các
phần trước, ta đã biết từ Vor(P), chúng ta có thể dễ dàng thu được đồ thị thị Delaunay
DG(P) và bằng phép tam giác phân các mặt có nhiều hơn 3 điểm, chúng ta có thể thu được

một phép tam giác phân Delaunay.
Trong phần này, chúng ta đề cập đến một phương pháp khác: xây dựng tam giác phân
Delaunay một cách trực tiếp, sử dụng phương pháp tăng ngẫu nhiên. Phương pháp này dựa
trên tư tưởng: xây dựng một tam giác đủ lớn để chứa được hết các điểm sẽ tránh được sự
xuất hiện các hình thang không kín.

Hình 2.9: Xây dựng tam giác phân đủ lớn để chứa hết các điểm
Chúng ta sẽ bắt đầu xây dựng một tam giác phân Delaunay bằng việc xây dựng một
tam giác đủ lớn để chứa được hết tập hợp P. Chúng ta thêm vào 2 điểm và để cùng với
điểm cao nhất của P tạo ra tam giác chứa tất cả các điểm còn lại của P. Điều này có nghĩa
là chúng ta sẽ tìm tam giác phân Delaunay của thay vì tìm tam giác phân Delaunay của P.
Sau đó, để có được tam giác phân Delaunay của P ta sẽ bỏ đi 2 đỉnh và các cạnh nối với
chúng. Để công việc này diễn ra suôn sẻ, chúng ta sẽ chọn đủ xa với tập hợp P để chúng

14


không thể tác động đến bất kì tam giác nào trong tam giác phân Delaunay của P. Cụ thể,
chúng ta phải đảm bảo rằng chúng không nằm trên bất kì đường tròn nào xác định bởi 3
điểm thuộc P. Chi tiết cách thực hiện sẽ được bàn sau. Đầu tiên, chúng ta sẽ xem xét thuật
toán được sử dụng.
Thuật toán sẽ thực hiện tăng điểm ngẫu nhiên, nên nó sẽ thêm điểm mới một cách ngẫu
nhiên và duy trì một tam giác phân Delaunay trong tập điểm đang xét. Xét điểm thêm mới :
Đầu tiên, chúng ta sẽ tìm tam giác trong phép tam giác phân hiện tại chứa điểm . Sau đó,
chúng ta sẽ thêm cạnh nối với các đỉnh của tam giác đó. Nếu nằm trên một cạnh e của
phép tam giác phân thì chúng ta sẽ thêm cạnh nối với hai đỉnh đối diện trong hai tam giác
nhận e làm cạnh. Hình dưới đây minh hoạ cho 2 trường hợp nói trên. Lúc này, chúng ta sẽ
có được một tam giác phân mới, nhưng không có gì đảm bảo nó là tam giác phân
Delaunay. Việc thêm điểm có thể tạo ra các cạnh không hợp lệ.


Hình 2.10: Hai trường hợp thêm điểm
Để phát hiện ra cạnh không hợp lệ, chúng ta gọi hàm LEGALIZEEDE với mỗi cạnh
thêm mới. Hàm này sẽ thay thế cạnh không hợp lệ bằng một cạnh hợp lệ bằng cách flip
cạnh. Thuật toán chính để xây dựng tam giác phân Delaunay như sau: (Có một chút mẹo ở
đây đó là chúng ta xét tập hợp P với n + 1 điểm thay vì n điểm)
Algorithm DELAUNAYTRIANGULATION(P)
Input. Tập hợp P với n + 1 điểm trong mặt phẳng.
Output. Một tam giác phân Delaunay của P.
1. Gọi là điểm cao nhất trong tập P (điểm nằm bên phải nhất trong số những điểm có
toạ độ y lớn nhất).
2. Gọi là 2 điểm trong đủ xa để các điểm trong P nằm trong tam giác .
3. Khởi tạo là tam giác phân chứa tam giác duy nhất .
4. Tạo một hoán vị ngẫu nhiên của tập .
5. for to n
6.
do (* chèn vào : *)
7.
Tìm một tam giác chứa điểm .
8.
if nằm bên trong tam giác
9.
then Thêm cạnh nối với , nhờ đó,
tam giác được tách thành 3 tam giác

15


10.
11.
12.

13.
14.
15.
16.
17.
18.
19.
20.

LEGALIZEEDGE(, , )
LEGALIZEEDGE(, , )
LEGALIZEEDGE(, , )
else (* nằm trên một cạnh của , giả sử đó là cạnh *)
Thêm cạnh và với là đỉnh còn lại trong tam giác có chung
cạnh . Hai tam giác ban đầu sẽ được tách thành 4 tam giác
LEGALIZEEDGE(, , )
LEGALIZEEDGE(, , )
LEGALIZEEDGE(, , )
LEGALIZEEDGE(, , )
Loại đỉnh và tất cả các cạnh nối với chúng khỏi .
return

Chúng ta sẽ nói chi tiết hơn về hàm LEGALIZEEDGE biến đổi tam giác phân thông
thường thành tam giác phân Delaunay. Ở Định lý 2.8 đã nói rằng một tam giác phân thông
thường là tam giác phân Delaunay nếu tất cả các cạnh của nó là hợp lệ. Trên tinh thần của
thuật toán LEGALTRIANGULATION, chúng ta sẽ flip các cạnh không hợp lệ cho đến khi
không còn cạnh nào là không hợp lệ nữa. Vấn đề đặt ra đó là các cạnh có thể là không hợp
lệ vì việc chèn thêm đỉnh . Chú ý rằng cạnh đã là hợp lệ có thể trở nên không hợp lệ nếu
như một trong số 2 tam giác nhận nó làm cạnh bị thay đổi. Bởi vậy, cạnh của các tam giác
bị thay đổi mới cần phải kiểm tra lại. Việc kiểm tra cạnh này được thực hiện bởi hàm

LEGALIZEEDGE. Nếu LEGALIZEEDGE flip một cạnh, điều đó có thể dẫn đến một cạnh
khác là không hợp lệ. Bởi vậy, LEGALIZEEDGE phải thực hiện đệ quy đối với các cạnh
có khả năng là không hợp lệ.
LEGALIZEEDGE(, , )
(* là điểm được thêm vào, là cạnh của có thể cần được flip *)
if là không hợp lệ
then Cho là tam giác có chung cạnh với tam giác
(* flip : *) Thay thế cạnh bằng
LEGALIZEEDGE(, , )
LEGALIZEEDGE(, , )
Việc kiểm tra một cạnh là hợp lệ hay không có thể được thực hiện bằng cách áp dụng
Bổ đề 2.4. Phức tạp ở đây là sự xuất hiện các điểm đặc biệt . Chúng ta sẽ đề cập đến điều
đó sau. Đầu tiên, chúng ta sẽ chứng minh rằng thuật toán là đúng đắn.
Để đảm bảo tính đúng đắn của thuật toán, chúng ta sẽ chứng minh rằng không còn một
cạnh nào là không hợp lệ sau khi tất cả các lời gọi LEGALIZEEDGE đều được thực hiện
xong. Từ hàm LEGALIZEEDGE, có thể rõ ràng thấy rằng mọi cạnh mới được tạo ra từ
việc thêm mới đều nhận là một trong hai đầu mút.

16


Hình 2.11: Tất cả các cạnh được tạo liên thuộc với
Hình 2.11 minh hoạ điều này: Các tam giác bị huỷ và các tam giác mới có màu xám.
Nhận xét quan trọng (sẽ được chứng minh bên dưới) là mọi cạnh mới đều hợp lệ. Vì vậy,
chúng ta không cần thiết kiểm tra chúng. Cùng với nhận xét bên trên rằng một cạnh chỉ có
thể không hợp lệ nếu một trong hai tam giác nhận nó làm cạnh bị thay đổi. Điều này đảm
bảo thuật toán sẽ kiểm tra bất kì cạnh nào có thể trở thành không hợp lệ. Do đó, thuật toán
là đúng đắn. Chú ý rằng, cũng như thuật toán LEGALTRIANGULATION,
LEGALIZEEDGE không rơi vào vòng lặp vô hạn vì mỗi hành động flip cạnh làm véctơ
của tam giác phân lớn lên.

Bổ đề 9.10 Mỗi cạnh mới được tạo ra trong DELAUNAYTRINGULATION hay trong
LEGALIZEEDGE trong quá trình thêm đỉnh mới là một cạnh của đồ thị Delaunay của .

Hình 2.12: Co nhỏ C ta được C’ đi qua nằm trong C
Chứng minh: Xét các cạnh đầu tiên được tạo , , (có thể là ) từ việc tách tam giác (có
thể là ). Vì là một tam giác trong phép tam giác phân Delaunay trước khi thêm đỉnh pr nên
đường tròn ngoại tiếp C của không chứa điểm nào bên trong nó. Bằng việc co nhỏ lại C
chúng ta có thể tìm ra một đường tròn C’ đi qua nằm trong C. Vì nên C’ không chứa một
điểm nào trong nó. Điều này cho thấy là một cạnh của đồ thị Delaunay sau khi thêm vào

17


điểm . Chứng minh tương tự với hai cạnh và cũng suy ra chúng là cạnh của đồ thị
Delaunay mới (và với cả nếu cạnh này tồn tại).
Xét trường hợp xảy ra flip cạnh bởi thuật toán LEGALIZEEDGE. Thí dụ, phép flip
cạnh thay thế cạnh của tam giác bằng cạnh . Vì là một tam giác Delaunay trước khi thêm
đỉnh và bởi vì đường tròn ngoại tiếp C của nó có chứa – nếu không, không phải không
hợp lệ. Chúng ta có thể co đường tròn ngoại tiếp để có được một đường tròn rỗng C’ chỉ
chứa và trên biên của nó. Do đó, là một cạnh của đồ thị Delaunay sau hành động thêm .
Chúng ta đã chứng minh tính đúng đắn của thuật toán. Phần còn lại là trình bày cách
thức thực hiện hai bước quan trọng của thuật toán: làm thế nào để tìm ra tam giác chứa
điểm trong DELAUNAYTRIANGULATION và làm thế nào để chọn được hai điểm và
hợp lý. Chúng ta bắt đầu với vấn đề đầu tiên trước.
Để tìm ra tam giác chứa điểm , chúng ta sử dụng một phương pháp sau: trong khi xây
dựng tam giác phân Delaunay, chúng ta cũng xây dựng một đồ thị có hướng không chu
trình D lưu vị trí điểm. Lá của D tương ứng với một tam giác của phép tam giác phân T
hiện tại. Các nút trong của D tương ứng với các tam giác thuộc về các tam giác phân ở các
bước trước đó đã bị huỷ bỏ. Sau khi khai báo chúng ta sẽ khai báo D là một đồ thị có
hướng không có chu trình (DAG) với một nút duy nhất tương ứng với tam giác .

Giả sử rằng ở một điểm nào đó chúng ta chia tam giác của tam giác phân hiện tại thành hai
(ba) tam giác mới. Tương ứng, ở D sẽ thêm hai (ba) lá mới và lá tương ứng với sẽ trở
thành một nút trong với con trỏ trỏ đến hai (ba) lá này. Tương tự, khi chúng ta thay thế hai
tam giác và bằng hai tam giác và bằng một phép flip cạnh, chúng ta tạo ra các lá cho hai
tam giác mới và hai nút và có con trỏ trỏ đến 2 lá mới này. Hình dưới đây minh hoạ cho
sự thay đổi trong D vì thêm vào một điểm mới. Có thể thấy rằng khi chúng ta tạo ra lá cho
một nút trong, tối đa có thể có ba con trỏ mới.
Sử dụng D chúng ta có thể xác định được vị trí điểm sắp thêm vào tam giác phân hiện
tại. Việc đó có thể thực hiện được theo cách sau: Đầu tiên, chúng ta bắt đầu ở gốc của D,
tương ứng với tam giác khởi tạo . Chúng ta sẽ kiếm tra ba con của gốc để xét xem nằm
trong tam giác nào và tiếp tục với các con tương ứng bên dưới đó. Thực hiện đệ quy như
vậy đến khi gặp một lá của D, chúng ta kết luận được lá đó tương ứng với tam giác trong
tam giác phân hiện tại chứa . Vì mỗi nút có tối đa ba con nên hành động duyệt này có chi
phí thời gian tuyến tính, phụ thuộc vào số nút trên đường đi tìm kiếm hay nói cách khác,
phụ thuộc vào số tam giác được lưu trữ bởi D mà chứa .

18


Hình 2.13: Hiệu quả của việc chèn điểm vào tam giác trên cấu trúc dữ liệu D
(phần của D không thay đổi bị bỏ qua trong hình)

19


Chỉ còn một điều băn khoăn nữa đó là làm thế nào để chọn , và làm thế nào để thực
hiện kiểm tra một cạnh có là hợp lệ hay không. Nói cách khác, chúng ta phải chọn và đủ
xa bởi vì chúng ta không muốn hai điểm đặc biệt này ảnh hưởng đến tam giác phân
Delaunay của P. Nhưng ngược lại, chúng ta cũng không muốn phải làm việc với một miền
toạ độ quá lớn so với thực tế. Vì vậy, chúng ta sẽ xem hai điểm này là tượng trưng: thực tế,

sẽ không thực sự gán toạ độ cho chúng mà thay vào đó thay đổi việc kiểm tra tuỳ thuộc
vào vị trí điểm và cạnh không hợp lệ để đảm bảo chúng vẫn đúng như là chúng ta đã chọn
hai điểm đủ xa so với yêu cầu.
Ở dưới đây, chúng ta nói rằng điểm cao hơn điểm nếu hoặc và và sử dụng cách so
sánh này để sắp xếp các điểm trong P.
Cho là một đường nằm ngang nằm bên dưới tất cả các điểm thuộc P và là đường nằm
ngang nằm trên tất cả các điểm đó. Theo quy tắc nói trên, chúng ta chọn nằm trên đường
đủ xa về phía bên phải sao cho nằm bên ngoài tất cả các đường tròn đi qua 3 điểm không
thẳng hàng của P. Do đó, cách sắp xếp các điểm trong P theo chiều kim đồng hồ cộng với
tương tự với cách sắp xếp chúng với nhau. Tiếp theo, chúng ta cũng chọn nằm trên đường
đủ xa về bên trái sao cho nằm ngoài mọi đường tròn tạo bởi 3 điểm không thẳng thẳng của
tập . Do đó, cách sắp xếp các điểm trong theo chiều ngược kim đồng hồ cộng với cũng
tương tự với cách sắp xếp chúng với nhau.
Tam giác phân Delaunay của chứa tam giác phân Delaunay của P, các cạnh nối với
mọi điểm trên bao lồi P về bên phải, các cạnh nối với mọi điểm trên bao lồi P về bên trái
và cạnh . Điểm thấp nhất của P và điểm cao nhất của P đều nối với và .
Trong bước định vị điểm, chúng ta cần xác định rõ vị trí của điểm đối với đường thẳng
nối với . Theo cách lựa chọn và , các điều kiện sau là tương đương nhau:
• nằm về bên trái đường thẳng nối từ đến ;




nằm về bên trái đường thẳng nối từ đến ;

theo thứ tự từ điển lớn hơn .
Chúng ta vẫn còn phải chỉ rõ cách thức xử lý và trong bước kiểm tra sự hợp lệ của
một cạnh. Gọi là cạnh sẽ được kiểm tra và và là hai đỉnh khác nhau của hai tam giác nhận
là cạnh (nếu chúng tồn tại). Có 3 khả năng xảy ra:
• Nếu là một cạnh của tam giác thì cạnh này luôn luôn hợp lệ.


• Nếu các chỉ số i, j, k, l đều không âm thì đây là trường hợp thông thường: Không có
điểm nào trong bốn điểm đang xét thuộc dạng điểm tượng trưng. Do đó, không
hợp lệ khi và chỉ khi nằm bên trong đường tròn đi qua , và .
• Tất cả các trường hợp khác: Trong trường hợp này là hợp lệ nếu và chỉ nếu
min(k,l) < min(i, j).
Chỉ có khả năng sau cùng là cần chứng minh. Vì trường hợp là đã được xử lý trong
khả năng đầu tiên nên tối đa chỉ có một trong hai chỉ số i và j có khả năng là số âm. Mặt
khác, hoặc là hoặc là là điểm mà chúng ta vừa thêm vào và do đó, tối đa có một trong hai
chỉ số k và l là số âm.
Nếu chỉ có một trong bốn chỉ số là âm, khi đó, điểm có chỉ số âm nằm bên ngoài đường
tròn đi qua ba điểm còn lại và phương pháp trên là đúng đắn.
Nếu không, cả min(i, j) và min(k, l) đều là số âm và vì nằm bên ngoài bất kì đường tròn
nào đi qua ba điểm thuộc nên phương pháp trên cũng đúng đắn.

20



×