Если вы имеете дело с квадратной ограничивающей областью, вот хитрость, чтобы избежать необходимости писать код для решения этих особых случаев определения этих ребер Вороного и пересечения их с ограничивающей областью. Если вы отразите входные генераторы через границы домена и добавите их к набору генераторов, это гарантирует, что ограничивающий домен будет отображаться именно в ячейках Вороного.
Чтобы сделать этот бетон, предположим, что ваш домен - это квадрат от -1 до 1 в направлениях x и y. Если одна из точек, генерирующих диаграмму Вороного, имеет вид (0,4, -0,3), то вы можете добавить точки (1,6, -0,3), (-2,4, -0,3), (0,4, 2,3), (0,4, -1,7), отражающие точка на линиях x = 1, x = -1, y = 1 и y = -1 соответственно.
Это хорошо, если дорого: ваша диаграмма Вороного включает в 5 раз больше входных точек, и четыре пятых из них выбрасываются. Чтобы быть более осторожным, вы можете создать начальную диаграмму Вороного с исходными точками (но не заботясь о разрешении бесконечных ячеек), а затем отразить только точки с бесконечными ячейками или ячейками, которые go вне ограничивающей области, и построить второй Вороной. диаграмма с этим дополненным набором.
Здесь - это дополненная версия диаграммы Вороного, на которой показаны дополнительные ключевые точки фиолетового цвета.