Изменения

Перейти к: навигация, поиск

Straight skeleton

624 байта добавлено, 15:28, 5 декабря 2014
Невыпуклый полигон
[[Файл:skeleton_b_point_coord.png|500px]]
В простейшем случае точка <tex> B </tex> появляется, когда "волновой фронт" распространения движения рёбер от невыпуклой вершины натыкается на встречный фронт противолежащего ребра. В такой момент возникает <tex> split\ event</tex>. Поэтому точка <tex> B </tex> может быть изначально охарактеризована, как точка, находящаяся на одном расстоянии от противолежащего ребра и прямых, содержащих рёбра невыпуклой вершины. Задача состоит в том, чтобы найти это самое противолежащее ребро (случай <tex> a) </tex> на рисунке выше). Но как показывает случай <tex> b) </tex>, простой тест на пересечение ребра и биссектрисы невыпуклой вершины (то есть невыпуклая вершина как бы врезается в противолежащее ребро) не может быть использован (в этом случае луч биссектрисы пересекает сразу два ребра, непонятно, с каким из них произойдёт <tex> split\ event</tex>). Поэтому необходимо ещё проверять, что точка <tex> B </tex> лежит между лучами в "бесконечном" треугольнике, ограниченном противолежащим ребром и биссектрисами <tex> b_i </tex> и <tex> b_{i+1} </tex>, идущих идущими из вершин, инцидентных противолежащему ребру <tex> e_i </tex>.
'''ЗамечаниеКоординаты возможной точки кандидата <tex> B_i </tex> вычисляются следующим образом:''' простой тест на пересечение это точка пересечения биссектрисы вершины <tex> V </tex> и целой линиибиссектрисы угла, который образуется в точке пересечения прямой, содержащей ребро, отсекает случаи тех одно из рёбер, которые лежат ''позади'' вершины инцидентных <tex> V </tex>, и прямой, содержащей противолежащее ребро <tex> e_i </tex>. Все такие точки пересечения <tex> B_i </tex> нужно поместить в приоритетную очередь.
Координаты возможной точки кандидата [[Файл:Skeleton_felkel_contr.png]] '''Замечание:''' в оригинальной статье авторы предлагают класть в приоритетную очередь ближайшую из таких точек <tex> B_i </tex> вычисляются следующим образом: это точка пересечения биссектрисы вершины , но тогда алгоритм будет работать некорректно (см. контрпример на рисунке выше). По алгоритму в очередь добавится <tex> split\ event</tex> <tex> V p_e </tex> и биссектрисы угла, который образуется в точке пересечения прямой, содержащей одно из рёбер, инцидентных для вершины <tex> V v </tex>, и прямой, содержащей противолежащее ребро ребра <tex> e_i e </tex>. Итоговая точка пересечения , но на самом деле этот <tex> B split\ event</tex> выбирается как ближайшая среди всех найденных точек произойдёт с ребром <tex> B_i e'</tex>для данной вершины.
==== Работа с LAV в момент возникновения split event'a ====

Навигация