Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вписывание многоугольника / 25 сообщений из 111, страница 1 из 5
07.12.2006, 20:53:08
    #34184619
Вписывание многоугольника
Может кто подскажет алгоритм.
Имеем многоугольник - неравносторонний, замкнутый - у на сесть только длина каждой из сторон. Ниужно его вписать в круг. Т.е. найти радиус круга и координаты вершин в декартовой системе координат.
Условие вписываемости выполняется (длина любой стороны не превышет суммарную длину всех остальных сторон).
ИМХО это что-то стандартное должно быть, но мне никогда не встречалось.
...
Рейтинг: 0 / 0
07.12.2006, 21:22:29
    #34184641
mikhail_n
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Вас обманули,

Условие вписываемости выполняется (длина любой стороны не превышет суммарную длину всех остальных сторон).

есть условие не "вписываемости", а существования замкнутого многоугольника.

Успехов.
...
Рейтинг: 0 / 0
07.12.2006, 21:55:18
    #34184690
mikhail_n
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Да, по-сути: пусть даны n сторон d1,d2,...dn, R - искомый радиус, a1,a2,...an - углы при вершинах соответствующих секторов. Имеем нелинейную систему из n + 1 уравнения:

2*R*sin(ai/2) = di, i = 1,...n
Sum(ai) = 2*pi

для n + 1 неизвестного R,ai.

Лично мне было бы не влом кракнуть эту системку численно Ньютоном, т.к. моя личная библиотека линейных солверов у меня под рукой. Ну а как Вы будете выкручиваться - дело Ваше, хотя может кто и предложит аналитическое решение...

Успехов.
...
Рейтинг: 0 / 0
07.12.2006, 22:13:24
    #34184712
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Алексей Вк.Может кто подскажет алгоритм.
Имеем многоугольник - неравносторонний, замкнутый - у на сесть только длина каждой из сторон. Ниужно его вписать в круг. Т.е. найти радиус круга и координаты вершин в декартовой системе координат.
Условие вписываемости выполняется (длина любой стороны не превышет суммарную длину всех остальных сторон).
ИМХО это что-то стандартное должно быть, но мне никогда не встречалось.

Ну.. если это - треугольник - задача тривиальна. Вспоминаем геометрию.

Во всех остальных случаях, ваша фигура имеет бесконечное количество положений веришин, а следовательно найти одно решение вписанного многоугольника мне не представляется возможным.
...
Рейтинг: 0 / 0
07.12.2006, 23:37:19
    #34184793
Ruslan.Isbarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Алексей Вк....у нас есть только длина каждой из сторон...

ок. Давайте все по порядку. У нас есть длина каждой из сторон, следовательно мы знаем сколько всего сторон у этого многоугольника. Полюбому условие вписываемости - сумма длин всех сторон должна быть меньше длины самого круга.

Алексей Вк....Т.е. найти радиус круга...

Мне приходит на ум только методом перебора делать. Вычислить начальный радиус круга (длина круга = сумме длин всех сторон, затем из длины выражаем радиус), затем последовательно откладывать каждый из отрезков, концы которых будут на границе окружности. Если конец последнего отрезка не совпадет с началом первого - уменьшать радиус. Но Вы пока это дебажить будете, рак башки схватите .

Алексей Вк....и координаты вершин в декартовой системе координат...

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

P.S.: У меня такое предположение, что задача поставлена некорректно. Не хватает исходных данных.
...
Рейтинг: 0 / 0
08.12.2006, 00:09:25
    #34184819
mikhail_n
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Задача поставлена корректно. Да, безусловно, существует бесконечное множество выпуклых замкнутых многоугольников, вокруг которых невозможно описать окружность. Это очевидно. Поэтому в общем случае задача НЕ имеет решения. Тем не менее, если для заданного набора длин сторон решение существует, то заданных условий достаточно для однозначного определения радиуса описанной окружности. Всё. Всё остальное определяется с точностью до двух аффинных преобразований: произвольного сдвига начала координат и поворота системы коопдинат на произвольный угол.

Мне приходит на ум только методом перебора делать. Вычислить начальный радиус круга (длина круга = сумме длин всех сторон, затем из длины выражаем радиус), затем последовательно откладывать каждый из отрезков, концы которых будут на границе окружности. Если конец последнего отрезка не совпадет с началом первого - уменьшать радиус. Но Вы пока это дебажить будете, рак башки схватите...

По моей методике это будет делать метод Ньютона, уверяю Вас, если решение существует, то с точностью до 0.000...01 Ньютоном оно найдется за 5 - 6 итераций.
...
Рейтинг: 0 / 0
08.12.2006, 01:47:28
    #34184862
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
mikhail_nЗадача поставлена корректно.
Не совсем. Думаю, пропущено условие "многоугольник является выпуклым/несамопересекающимся (любое из этих условий сгодится)". При этом условии, а также при условии нахождения всех вершин на окружности - согласен с Вашим решением.
...
Рейтинг: 0 / 0
08.12.2006, 02:15:26
    #34184871
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Если только предположить, что все точки лежат на окружности, тогда решение существует.

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

(слабеющей рукой рисую общий случай для 4 точек, и пошел спать)
...
Рейтинг: 0 / 0
08.12.2006, 03:52:46
    #34184901
mikhail_n
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
softwarerНе совсем. Думаю, пропущено условие "многоугольник является выпуклым/несамопересекающимся (любое из этих условий сгодится)"

Нет, любое не сгодится, только выпуклый, вокруг невыпуклого описать окружность невозможно. Несамопересекающийся может быть невыпуклым. Вообще то ловить меня надо было на этом пассаже:

Да, безусловно, существует бесконечное множество выпуклых замкнутых многоугольников, вокруг которых невозможно описать окружность. Это очевидно. Поэтому в общем случае задача НЕ имеет решения.

Из одного другого не следует: e.g. квадрат vs ромб. В связи с этим есть у меня чуйство что для любого набора длин сторон решение существует и единственно, под решением понимается выпуклый многоугольник.
...
Рейтинг: 0 / 0
08.12.2006, 10:37:43
    #34185348
Вписывание многоугольника
Так - похоже я неправильно сформулировал задачу.
В общем - многоугольник выпуклый, непересекающийся.
Требуется ..... а я теперь и не знаю что требуется :-))
Давайте сначала.
У меня есть массив, содержащий стороны многоуольника - их длины.
Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу.
Самый простой метод, кторый мне пришел в голову - вписать многоугольник в круг.
Конечно часть вершин на стороны круга не попадет, но мне это не критично.

Кажется есть другой вариант - не вписать многоугольник в круг - а круг в многоугольник. Это
точно возможно для любого выпуклого непересекающегося многоугольника. Причем обеспечить максимум радиуса круга. Это наверное будет проще.
Итерационные численные методы в моем случае использовать нежелательно. Ищу аналитическое решение.

Хотя я вот сейчас думаю.....
А может есть более простой вариант - через углы между сторонами?
...
Рейтинг: 0 / 0
08.12.2006, 10:37:44
    #34185349
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
mikhail_nНет, любое не сгодится, только выпуклый, вокруг невыпуклого описать окружность невозможно.
Да ладно Вам :) См. ниже.

mikhail_nВ связи с этим есть у меня чуйство что для любого набора длин сторон решение существует и единственно, под решением понимается выпуклый многоугольник.
Я же так и сказал: при соблюдении пары дополнительных условий я согласен с Вашим решением. Действительно, должно быть именно так (это следует из логики нарисованной Вами системы и того факта, что функция Sum(ai) монотонна по R.
...
Рейтинг: 0 / 0
08.12.2006, 10:57:45
    #34185430
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Пусть такая окружность существует.
Тогда верно:
Центр окружности = точка пересечения прямых проведеных через середины сторон перпендикулярно оным. Это вытекает из того факта что все стороны описываемого многоугольника - хорды. Следовательно треугольник <центр окружности> - <концы хорды> равнобедренный, а значит биссектриса и высота совпадает.

Уравнение прямой
y=Ax + B0 (А и В0 определяются по координатам вершин многоугольника)
перпендикулярная к ней:
y=-(1/A)x + B1 (А берется из предыдущего уравнения, В1 - из условия прохождения через середину)

Для примера, есть отрезок X1,Y1 - X2,Y2
Tогда A = (Y2-Y1)/(X2-X1)
B0 определяется из условия что при x=X1 -> y=Y1
Середина отрезка точка: x=(X2+X1)/2, y=(Y1+Y2)/2
---------------------
1 Для любых двух сторон находим уравнения перпендикуляров и решаем систему из этих 2 уравнений. Решение = предполагаемый центр окружности.
2 Проверяем расстояние до всех вершин.
Расстояние от центра до всех вершин должно быть одинаковое = радиусу.
Если расстояние разное - такой окружности не существует.
...
Рейтинг: 0 / 0
08.12.2006, 11:11:37
    #34185496
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Это Для Описывающей окружности
...
Рейтинг: 0 / 0
08.12.2006, 11:17:11
    #34185521
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Алексей Вк.У меня есть массив, содержащий стороны многоуольника - их длины.

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

Ищу аналитическое решение.


Философский вопрос: что такое "стремящийся к кругу"? :)

Как глядя на два варианта многоугольников определить кто из них больше стремится?

Решение будет зависить от "функции" задающей степень "стремления".
...
Рейтинг: 0 / 0
08.12.2006, 11:20:14
    #34185537
Вписывание многоугольника
Интересно.
Надо будет попробовать.
...
Рейтинг: 0 / 0
08.12.2006, 11:21:17
    #34185545
Вписывание многоугольника
NotGonnaGetUs Алексей Вк.У меня есть массив, содержащий стороны многоуольника - их длины.

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

Ищу аналитическое решение.


Философский вопрос: что такое "стремящийся к кругу"? :)

Как глядя на два варианта многоугольников определить кто из них больше стремится?

Решение будет зависить от "функции" задающей степень "стремления".
Тот - в который можно вписать круг большего радиуса.
...
Рейтинг: 0 / 0
08.12.2006, 12:19:14
    #34185770
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
golsaПусть такая окружность существует.
Тогда верно:......
То, что Вы написали, само по себе верно, но решать эту задачу таким способом Вы немного замучаетесь.

golsa1 Для любых двух сторон находим уравнения перпендикуляров и решаем систему из этих 2 уравнений.
Не проясните ли следующий момент: как найти уравнения перпендикуляров, зная длины всех сторон и ничего более?
...
Рейтинг: 0 / 0
08.12.2006, 12:40:59
    #34185855
Вписывание многоугольника
Я вот тут подумал над самым первым вариантом:

sin(ai/2)=(li/2)/r
...
sum(ai)=2*pi

Попробуем так:

sum( arcsin(li/(2*r)) )=2*pi

Если отсюда вынести r - то все элементарно решается. Но я не могу найти ни одну подходящую формулу - как вынести из arcsin любой аргумент:
arcsin(a*b)=???
...
Рейтинг: 0 / 0
08.12.2006, 18:50:22
    #34187217
mikhail_n
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Никак.

Поздравляю, Вы свели мою систему к одному нелинейному уравнению. Теперь вычислительная сложность реализации метода Ньютона вообще децкая (хотя я бы так делать не стал если требуется алгоритм для произвольного числа сторон). Начальное приближение для R - Sum(di)/(2*pi).
...
Рейтинг: 0 / 0
08.12.2006, 19:11:06
    #34187268
Вписывание многоугольника
Ну не совсем никак,
вот здесь есть формула для суммы:
http://www.emis.de/journals/SMZ/2004/05/1022.pdf
Но мне нужно умножение. Где бы его взять???
Или действительно взять уравнение Ньютоном?
...
Рейтинг: 0 / 0
08.12.2006, 19:44:13
    #34187318
Палестинец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Алексей Вк.Так - похоже я неправильно сформулировал задачу.
В общем - многоугольник выпуклый, непересекающийся.
Требуется ..... а я теперь и не знаю что требуется :-))
Давайте сначала.
У меня есть массив, содержащий стороны многоуольника - их длины.
Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу.
Самый простой метод, кторый мне пришел в голову - вписать многоугольник в круг.
Конечно часть вершин на стороны круга не попадет, но мне это не критично.

Кажется есть другой вариант - не вписать многоугольник в круг - а круг в многоугольник. Это
точно возможно для любого выпуклого непересекающегося многоугольника. Причем обеспечить максимум радиуса круга. Это наверное будет проще.
Итерационные численные методы в моем случае использовать нежелательно. Ищу аналитическое решение.

Хотя я вот сейчас думаю.....
А может есть более простой вариант - через углы между сторонами?

1) Как вписать многоугольник в круг -
Перебираем все тройки вершин. строим окружность по 3 точкам (описаную вокруг треугольника)
Выбираем окружность максимального радиуса - она является минимальной покрывающей окружностью.
2)Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу.
Так. Переформулирую:
Для всех многоугольников с данными сторонами найти тот наибольшее количество вершин которого расположены на одной окружности(?)
...
Рейтинг: 0 / 0
08.12.2006, 19:48:25
    #34187324
Палестинец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Тот - в который можно вписать круг большего радиуса.
Эквивалентно - среди многоугольников с задаными сторонами выбрать с наибольшей площадью.
Опять же мне кажется - может быть бесконечно неконгруэнтных вариантов ответа.
...
Рейтинг: 0 / 0
08.12.2006, 19:50:47
    #34187328
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
Алексей Вк.Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу.Т.е. многоугольник не жесткий, а "шарнирный"?
...
Рейтинг: 0 / 0
08.12.2006, 19:59:52
    #34187342
Вписывание многоугольника
miksoft Алексей Вк.Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу.Т.е. многоугольник не жесткий, а "шарнирный"?
Именно шарнирный - у меня не заданы углы между сторонами. Поэтому и нет их координат.
Т.е. если еще раз переформулировать - найти такое расположение сторон, при котором углы между сторонами максимальны, такой многоугольник будет стремиться к кругу (если конечно соблюдать равномерность, а не делать один угол максимальным, а все остальные как получится).

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

Поэтому любые варианты предполагающие наличие координат у сторон многоугольника не подходят. Я как раз координаты и ищу (будут углы - а координаты из них элементарно и сразу в декартовой, если произвольно задать координаты любой стороны).
...
Рейтинг: 0 / 0
08.12.2006, 20:13:29
    #34187359
Палестинец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вписывание многоугольника
2Алексей Вк.
ещё раз. вот твоя задача:
среди многоугольников с задаными сторонами найти с наибольшей площадью.
решение не знаю - копать по ключевым словам вариационная задача лагранжа.изопериметрическая задача. задача дидоны. истина где-то там :-)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вписывание многоугольника / 25 сообщений из 111, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]