Исследуйте задачу о построении многоугольника по диагоналям: при каких данных о длинах и взаимных углах диагоналей можно единственным образом (с точностью до переменной симметрии) восстановить выпуклый многоугольник, и приведите алгоритм восстановления

17 Ноя в 10:09
4 +4
0
Ответы
1
Краткий ответ (утверждение и алгоритм).
Утверждение. Пусть PPP — выпуклый nnn-угольник с вершинами в порядке v1,v2,…,vnv_1,v_2,\dots,v_nv1 ,v2 ,,vn . Достаточно и (при естественных условиях на выпуклость) необходимо знать для одной фиксированной вершины v1v_1v1 :
- расстояния до остальных вершин dk=∣v1vk∣\;d_k=|v_1v_k|dk =v1 vk , k=2,…,nk=2,\dots,nk=2,,n;
- углы между соседними лучами v1vkv_1v_kv1 vk и v1vk+1v_1v_{k+1}v1 vk+1 , т.е. αk=∠(vkv1vk+1)\;\alpha_k=\angle(v_kv_1v_{k+1})αk =(vk v1 vk+1 ) для k=2,…,n−1k=2,\dots,n-1k=2,,n1,
при условии 0<αk<π\;0<\alpha_k<\pi0<αk <π и ∑k=2n−1αk<2π\sum_{k=2}^{n-1}\alpha_k<2\pik=2n1 αk <2π. Тогда PPP единственным образом (с точностью до переноса и поворота и зеркального отражения) восстанавливается из данных {dk,αk}\{d_k,\alpha_k\}{dk ,αk }.
Краткое обоснование. Если поместить v1v_1v1 в начало координат и зафиксировать направление первого луча, то направления остальных лучей однозначно задаются кумулятивными суммами
ϕ2=0,ϕk=∑j=2k−1αj(k=3,…,n). \phi_2=0,\qquad \phi_k=\sum_{j=2}^{k-1}\alpha_j\quad(k=3,\dots,n).
ϕ2 =0,ϕk =j=2k1 αj (k=3,,n).
Тогда координаты вершин получают вид
vk=dk(cos⁡ϕk, sin⁡ϕk),k=2,…,n, v_k=d_k(\cos\phi_k,\;\sin\phi_k),\qquad k=2,\dots,n,
vk =dk (cosϕk ,sinϕk ),k=2,,n,
и v1=(0,0)v_1=(0,0)v1 =(0,0). При указанных ограничениях на αk\alpha_kαk и при том, что полученный многоугольник оказывается выпуклым и вершины идут в правильном порядке, этот набор векторов задаёт единственный (до евклидовых движений и отражения) nnn-угольник.
Алгоритм восстановления (пошагово).
1. Выбрать ориентацию: поместить v1v_1v1 в (0,0)(0,0)(0,0) и положить направление луча v1v2v_1v_2v1 v2 вдоль положительной оси xxx.
2. Посчитать углы ϕk\phi_kϕk по формуле ϕ2=0, ϕk=∑j=2k−1αj\phi_2=0,\ \phi_k=\sum_{j=2}^{k-1}\alpha_jϕ2 =0, ϕk =j=2k1 αj .
3. Вычислить координаты вершин vk=dk(cos⁡ϕk,sin⁡ϕk)\;v_k=d_k(\cos\phi_k,\sin\phi_k)vk =dk (cosϕk ,sinϕk ), k=2,…,nk=2,\dots,nk=2,,n.
4. Получить многоугольник с вершинами v1,v2,…,vnv_1,v_2,\dots,v_nv1 ,v2 ,,vn . Проверить выпуклость (например, знаки ориентированных площадей соседних треугольников одинаковы). Если проверка не проходит — данные несовместимы с выпуклым nnn-угольником.
Замечания и уточнения.
- Если известны только длины всех диагоналей (без углов между ними), задача в общем не единственна (простая контрпримера — невырожденный четырёхугольник: одни и те же длинны диагоналей могут соответствовать разным углу между ними).
- Аналогичный результат: если задана какая-либо триангуляция многоугольника и для каждой треугольной ячейки заданы либо все три стороны, либо две стороны и угол между ними, то полигон восстанавливается путём поочередного «склеивания» треугольников (это стандартный метод, сложность линейная по числу вершин).
- Сложность предложенного алгоритма — O(n)O(n)O(n) арифметических операций (вычисления сумм углов и косинусов/синусов).
- Симметрия: восстановление однозначно до общего поворота/переноса и зеркального отражения (если ориентация лучей не ориентирована).
Если нужно — приведу подробный пример для конкретных числовых данных.
17 Ноя в 11:25
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир