Разработайте метод нахождения точки на отрезке, делящей периметр выпуклого многоугольника на две равные части, и докажите корректность метода

18 Ноя в 17:35
4 +3
0
Ответы
1
Постановка (ясность). Пусть задан выпуклый многоугольник с вершинами v1,v2,…,vnv_1,v_2,\dots,v_nv1 ,v2 ,,vn в порядке обхода (индексы по модулю nnn). Периметр обозначим PPP. Требуется найти точку на границе (то есть на некотором рёбре/отрезке) многоугольника, такая что при обходе по границе от этой точки в одном направлении длина пути равна половине периметра P/2P/2P/2.
Метод (алгоритм)
1. Вычислите длины рёбер ℓi=∣vivi+1∣\ell_i=|v_i v_{i+1}|i =vi vi+1 для i=1,…,ni=1,\dots,ni=1,,n и периметр
P=∑i=1nℓi,S=P2. P=\sum_{i=1}^n \ell_i,\qquad S=\frac{P}{2}.
P=i=1n i ,S=2P .
2. Постройте кумулятивную последовательность длин от v1v_1v1 :
L0=0,Lk=∑i=1kℓi(k=1,…,n). L_0=0,\qquad L_k=\sum_{i=1}^k \ell_i\quad (k=1,\dots,n).
L0 =0,Lk =i=1k i (k=1,,n).
3. Найдите индекс kkk такой, что Lk−1≤S<LkL_{k-1}\le S< L_kLk1 S<Lk . (Если S=LjS=L_jS=Lj для некоторого jjj, то искомая точка — вершина vj+1v_{j+1}vj+1 .)
4. Тогда искомая точка лежит на рёбре [vk,vk+1][v_k,v_{k+1}][vk ,vk+1 ]. Её расстояние от вершины vkv_kvk d=S−Lk−1, d=S-L_{k-1},
d=SLk1 ,
и координаты точки получаются линейной интерполяцией:
p=vk+dℓk (vk+1−vk). p=v_k+\frac{d}{\ell_k}\,(v_{k+1}-v_k).
p=vk +k d (vk+1 vk ).

Доказательство корректности и единственности
- Непрерывность и монотонность. Если параметризовать обход границы длиной от v1v_1v1 в прямом направлении функцией t↦q(t)t\mapsto q(t)tq(t), где t∈[0,P)t\in[0,P)t[0,P) — текущая пройденная длина, то q(t)q(t)q(t) — непрерывная функция, которая монотонно проходит по границе. Значит для любого значения длины t∈[0,P)t\in[0,P)t[0,P) существует ровно одна точка на границе с этой пройденной длиной (за исключением совпадения в вершинах, где два параметра описывают одну точку).
- По определению S∈[0,P)S\in[0,P)S[0,P). Так как LkL_kLk — кумулятивные суммы, существует единственный индекс kkk с Lk−1≤S<LkL_{k-1}\le S< L_kLk1 S<Lk . Это означает, что при обходе от v1v_1v1 точка с пройденной длиной SSS попадает именно на ребро [vk,vk+1][v_k,v_{k+1}][vk ,vk+1 ]. Дистанция от vkv_kvk до этой точки равна d=S−Lk−1d=S-L_{k-1}d=SLk1 и, раз движение по рёбру соответствует однородной скорости по длине, положение точки определяется линейной интерполяцией, указанной в шаге 4.
- Единственность. Поскольку функция длины до точки вдоль обхода строго возрастает (на рёбрах она линейна по параметру, на вершинах есть переход, но не убывание), уравнение «пройденная длина = SSS» имеет единственное решение на отрезке [0,P)[0,P)[0,P). Следовательно, точка единственна.
Замечания
- Если нужно разделить периметр на две равные части независимо от выбранной начальной вершины, алгоритм даёт точку, от которой в выбранном направлении длина пути равна P/2P/2P/2. В другом направлении получится другая (комплементарная) точка, расположенная на расстоянии P/2P/2P/2 вдоль границы от первой.
- Сложность вычисления: O(n)O(n)O(n) арифметических операций (вычисление длин и поиск нужного ребра).
Таким образом метод сводится к вычислению половины периметра и однократному поиску ребра, на котором лежит точка с соответствующей пройденной длиной; корректность обеспечивается непрерывностью и монотонностью функции пройденной длины вдоль границы.
18 Ноя в 18:42
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир