Построение ломанной минимальной длины
Если необходимо уменьшить осцилляцию изолинии и сократить число используемых для ее построения узловых точек, причем гладкости линии не требуется, то в качестве наиболее подходящей можно выбрать ломаную минимальной длины с заданными начальной и конечной точками. Эта ломаная но форме подобна резиновой нити с двумя закрепленными концами, растянутой внутри коридора. Для построения ломаной минимальной длины внутри коридора предлагается следующий алгоритм. Пусть L1, L2, ... Ln – вершины левой границы, R1, R2, ...Rn,– вершины правой границы, точка М – текущая вершина минимальной ломаной. Начальная текущая точка М – это центр отрезка L1R1, а лучи ML1, и MR1, определяют начальный сектор видимости из текущей точки. При переходе к следующим нарам вершин (L2 и R2, L3 и R3, и т.д., см. рис. 20) сектор видимости может только уменьшаться, т.е. его правый луч может повернуться только влево, а левый – только вправо.
В процессе проверки нар необходимо запоминать вершины Lmr и Rml через которые проходят лучи МLmr и МRml, являющиеся границами текущего сектора видимости, так как следующей текущей точкой станет либо Lmr, либо Rml. Пусть при проверке вершин Lk и Rk, k > ml,k >mr, в результате очередного поворота луч МRk оказался левее луча МLmr (MR5 левее ML3 на рис. 20). Это означает, что левая граница закрывает весь отрезок LkRk (L5R5, на рис. 20) и необходимо перейти к новой текущей точке. В качестве нес выбирается вершина левой границы Lmr(точка L3 на рис. 20). Новый начальный сектор образуют лучи LmrLmr+1 и LmrRmr (L3L4 и L3R3 на рис. 20), при этом последующая проверка начинается с пары mr + 1. При повороте коридора вправо картина симметрична. Процесс завершается, когда из текущей вершины будет видна конечная точка ломаной (если изолиния замкнутая, то начальная точка минимальной ломаной совпадает с конечной).
Рис. 20. Построение ломаной минимальной длиныЛегко показать, что каждая текущая вершина будет принадлежать ломаной минимальной длины: замена ее на любую другую точку отрезка, соединяющего чару вершин левой и правой границ коридора, может только удлинить ломаную.
Трудоемкость алгоритма определяется числом вершин ломаной и числом проверок чар вершин коридора в каждой вершине ломаной. Эти две величины обычно зависят от ширины коридора: при ее уменьшении сужается сектор видимости, поэтому число вершин ломаной увеличивается, а число проверок пар уменьшается.
Отметим, что построение ломаной минимальной длины можно производить прямо в процессе отслеживания границ коридора.