powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вписывание многоугольника
111 сообщений из 111, показаны все 5 страниц
Вписывание многоугольника
    #34184619
Может кто подскажет алгоритм.
Имеем многоугольник - неравносторонний, замкнутый - у на сесть только длина каждой из сторон. Ниужно его вписать в круг. Т.е. найти радиус круга и координаты вершин в декартовой системе координат.
Условие вписываемости выполняется (длина любой стороны не превышет суммарную длину всех остальных сторон).
ИМХО это что-то стандартное должно быть, но мне никогда не встречалось.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34184641
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вас обманули,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

mikhail_nВ связи с этим есть у меня чуйство что для любого набора длин сторон решение существует и единственно, под решением понимается выпуклый многоугольник.
Я же так и сказал: при соблюдении пары дополнительных условий я согласен с Вашим решением. Действительно, должно быть именно так (это следует из логики нарисованной Вами системы и того факта, что функция Sum(ai) монотонна по R.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #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
Вписывание многоугольника
    #34185496
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это Для Описывающей окружности
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34185521
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.У меня есть массив, содержащий стороны многоуольника - их длины.

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

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


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

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

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

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

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


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

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

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

golsa1 Для любых двух сторон находим уравнения перпендикуляров и решаем систему из этих 2 уравнений.
Не проясните ли следующий момент: как найти уравнения перпендикуляров, зная длины всех сторон и ничего более?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #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
Вписывание многоугольника
    #34187217
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак.

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

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

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

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

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

Поэтому любые варианты предполагающие наличие координат у сторон многоугольника не подходят. Я как раз координаты и ищу (будут углы - а координаты из них элементарно и сразу в декартовой, если произвольно задать координаты любой стороны).
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187359
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Алексей Вк.
ещё раз. вот твоя задача:
среди многоугольников с задаными сторонами найти с наибольшей площадью.
решение не знаю - копать по ключевым словам вариационная задача лагранжа.изопериметрическая задача. задача дидоны. истина где-то там :-)
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187365
Эх знал бы я так математику.....
Если не найдется аналитическое решение, придется делать численное. Никуда не денешься.
Или методом перебора с заданным шагом :-)))))
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187381
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.углы между сторонами максимальныМожет, сумма углов?
если нет, то квадрат будет более приоритетен, чем ромб при равной сумме углов?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187388
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.Эх знал бы я так математику.....
Если не найдется аналитическое решение, придется делать численное. Никуда не денешься.
Или методом перебора с заданным шагом :-)))))

Ну численный то я тебе сразу предложу..
строишь окружность радиуса R0 - откладываешь ломанную по окружности из сторон многоугольника (это всегда можно сделать).
вычисляешь из расстояния между конечными точками - на сколько необходимо уменьшить радиус (или увеличить)..
Например :
R1 = R0 - D / 2PI. ( надо подумать ещё!)

Метод должен сходится стопудов!


зы. между прочим отсюда похоже следует что для любого значения сторон существует и единственен с точностью до поворота вписаный в окружность многоугольник. и площадь его максимальна
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187408
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне все таки кажется, что можно это решить без перебора.

В итоговом многоугольнике, каждая из сторон многоугольника является хордой к описывающей окружности. Значит окружность можно разбить на кучу секторов с одинаковым радиусом и задаными длинами хорд. А дальше, зная что длина хорды относится к углу 2*R*sin(a/2) получаем систему с одним уравнением для каждого из исходных отрезков:
Код: plaintext
1.
2.
3.
4.
L1 = 2*R*sin(A1/2)
L2 = 2*R*sin(A2/2)
L3 = 2*R*sin(A3/2)
....
Ln = 2*R*sin(An/2)
Где Li это длины исходных отрезков, Ai это углы секторов а R - радиус общий для всех секторов. Получаем систему из i уравнений с i+1 неизвестными. Но если теперь вспомнить что сумма всех углов должна дать в итоге 360 градусов и добавить это уравнение в систему - получим вполне простую систему которую уже можно решить традиционными методами. Причем полностью решать необязательно, достаточно вычислить R.
Потом (для определенности) кладем один из отрезков на координатную ось и зная радиус (и возможно углы) посторить окружность и вписаный в нее многоугольник плевое дело.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187414
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну численный то я тебе сразу предложу..
строишь окружность радиуса R0 - откладываешь ломанную по окружности из сторон многоугольника (это всегда можно сделать).
вычисляешь из расстояния между конечными точками - на сколько необходимо уменьшить радиус (или увеличить)..
Например :
R1 = R0 - D / 2PI. ( надо подумать ещё!)

Метод должен сходится стопудов!

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

Эх знал бы я так математику.....
Если не найдется аналитическое решение, придется делать численное. Никуда не денешься.
Или методом перебора с заданным шагом :-)))))

В свете Ваших последних признаний, то что Вы запостили вначале не совсем эквивалентно тому, что Вы на самом деле ищите (может и эквивалентно, но это не очевидно и, вообще говоря, надо доказывать). Если хотите, я могу сбросить систему уравнений к которым приведет вариационная постановка задачи, но предупреждаю, она будет также нелинейной и будет выглядеть ещё пострашнее, чем в случае с окружностью, так что от итерационных методов решения систем нелинейных алгебраических уравнений Вам, похоже, никуда не деться. Xотя, чёрт его знает, например до открытия дифференциального/интегрального исчисления был такой оригинал (кажется Гюйгенс), так он некоторые задачи, кот. теперь решаются при помощи диффуров умудрялся решать без этих прибамбасов. Так что never say never!
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187416
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне все таки кажется, что можно это решить без перебора.

Но если теперь вспомнить что сумма всех углов должна дать в итоге 360 градусов и добавить это уравнение в систему - получим вполне простую систему которую уже можно решить традиционными методами.

Осталась мелочь - найти традиционный НЕИТЕРАЦИОННЫЙ метод решения нелинейных алгебраических уравнений.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187417
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не должен. В основе лежит неверная посылка что длина хорды зависит от радиуса окружности линейно, что справедливо для длины дуги окружности. Если бы это было бы так, то задача решалась бы аналитически в три действия.

Блин, имел ввиду от угла сектора конечно. От радиуса то как раз линейно.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187437
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, чтобы застолбить приоритет - задача с окружностью кажется действительно решается аналитически в три действия...

Продолжение следует...
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34187443
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Э..., нет. Май бед.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34189062
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжу численную идею в таком варианте..
(см. рисунок1)

P - сторона.
Считаем углы при вершине -> P^2 = R^2 - 2R^2 COS(A)
A = arccos((R^2 - P^2)/(2 R^2))

Далее.. сумма углов для вписанного многоугольника на рисунке должна быть равна 2PI (когда начальные и конечные точки совпадут)

F(R) = SUM(arccos((R^2 - P^2)/(2 R^2)))


Решаем
F(R) = 2 * PI методом ньютона или его модификациями (в принципе даже знаем функцию производную в точке)

Найденный R и есть искомый. (Площадь элементарно из радиуса описаной окружности считается)

Проблема N1: Существует много решений. (см. рис 2) => для ньютона R0 надо попасть в локальную область вокруг искомого R.

Проблема N2:
Если центр описаной лежит вне многоугольника - надо решать уравнение
F(R) - 2 * Amax = 0 (Amax - угол напротив большей стороны)

воть. строго алгоритма разрешающего эти 2 проблемы предложить пока не могу.

(рис.1):
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34189066
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рис.2 :
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34189070
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рис.3
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34189075
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори. пропали индексы из за тега [ i ] :-)

F(R) = SUM(arccos((R^2 - P(i)^2)/(2 R^2))) - где P(i) длина i-той стороны. сумма по всем сторонам.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34189161
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати
mikhail_n Начальное приближение для R - Sum(di)/(2*pi).
Совсем не факт, что попадём в окрестность сходимости метода Ньютона к искомому решению..
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190083
У меня родилась новая формулировка задачи :-)

Т.к. действительно может быть немало случаев когда многоугольник и не впишешь, и не опишешь. То можно переформулировать. Мне нужно чтобы все стороны многоугольника описали фигуру, максимально близкую к кругу. ИМХО это условие выполняется когда каждая сторона является касательной к окружности, причем радиус окружности для каждой стороны может быть свой.
Вот рисунок:
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190108
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.У меня родилась новая формулировка задачи :-)А можно поинтересоваться практическим смыслом этой задачи? Алексей Вк.может быть немало случаев когда многоугольник и не впишешьПримерчик можно? что-то не могу такого представить...
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190111
А вот теперь вопрос - как будет выглядеть сиcтема уравнений для такого случая?
И реально ли ее решить вообще?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190144
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.У меня родилась новая формулировка задачи :-)Кстати, эта формулировка ничем не отличается от вписывания многоугольника в окружность и, соответственно, имеет то же решение.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190153
miksoft Алексей Вк.У меня родилась новая формулировка задачи :-)А можно поинтересоваться практическим смыслом этой задачи? Алексей Вк.может быть немало случаев когда многоугольник и не впишешьПримерчик можно? что-то не могу такого представить...
Поинтересоваться можно - мне нужно описать проекцию траектории движения тела в трехмерном пространстве по оси Z :-)

Попросту говоря - есть траектория движения тела по оси Z на разных участках, у нас етсь проекция этого движения на плоскости под ним. Траектория состоит из прямолинейных участков. Причем траектория движения в области x-y не представляет из себя интереса. Нужно произвести визуализацию этого процесса. Для упрощения траектория движения замыкается и сворачивается в круг - проблема именно в этом моменте. Можно было бы траекторию описывать вдоль прямой, но это не то. Ведь процесс повторяющийся. Задача в общем-то научная, так что здесь свои особенности. И поэтому у меня есть проекции - длины прямолинейных участков на плоскости x-y. Теперь требуется их расположить в требуемом порядке и по возможности наиболее близко к круговой фрме для наилучшего обзора процесса. По полученным углам я уже без проблем построю траекторию в пространстве.

А насчет примера невозможности - так я же его и нарисовал - в данном случае одна из сторон (наименьшая) не будет касаться окружности, если предположить, что радиус у нее жестко задан. Причем ни описывающей окружности (или же пострадают другие стороны), ни вписанной.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190174
Жуть получается:


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

Или

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

Зато хорошо подходит почти для любого многоугольника.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190242
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft Алексей Вк.У меня родилась новая формулировка задачи :-)Кстати, эта формулировка ничем не отличается от вписывания многоугольника в окружность и, соответственно, имеет то же решение.Это я не совсем прав. Формулировка будет идентичной, только если радиусы на рисунке делят стороны на две равные части.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190307
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.Нужно произвести визуализацию этого процесса.Так для визуализации не нужно особой точности. Все равно точнее, чем плюс-минус полпискселя не нарисуешь на экране. А приблизительно (3-4 значащих знака) можно и итерационно решить за вполне приемлемое время, имхо.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190893
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.У меня родилась новая формулировка задачи :-)

Можно поинтересоваться откуда они берутся=))
и предполагают ли они разумное обоснование
зачем каждой стороне свою окружность?
Кажется это самый неправдоподобный критерий, к тому же есть целые множества фигур, удовлетворяющих начальным условиям
например все равносторонние четырёхугольники

Первая часть задачи как раз определить правдоподобный критерий "стремления к окружности"
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34190916
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.Для упрощения траектория движения замыкается и сворачивается в круга окружность обязательно до полного замыкания доводить?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34191106
Я вот думаю - в процессе решения задачи последний отрезок можно конечно принудительно приводить к заданному значению. Но это тогда потребует тщательного подбора исходных данных для решения задачи - а это уже не совсем научный подход, во всяком случе не для целей визуализации.

Насчет каждой стороны - а ИМХО будут проблемы со сторонами, котореы ну никак не захотят вписываться. Поэтому данный подход наверное наиболее корректный. Но - n+1 уравнений и 2n неизвестных. Где-то еще должны быть уравнения описывающие последний вариант. Вот только не могу понять что именно они должны связывать?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34191114
miksoft Алексей Вк.Нужно произвести визуализацию этого процесса.Так для визуализации не нужно особой точности. Все равно точнее, чем плюс-минус полпискселя не нарисуешь на экране. А приблизительно (3-4 значащих знака) можно и итерационно решить за вполне приемлемое время, имхо.
Да - наверное это проще всего, я это понимаю, просто ну совсем не хочется решать итерационным методом систему уравнений для такой второстепенной задачи, но явно придется :-(
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34191414
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.А насчет примера невозможности - так я же его и нарисовал - в данном случае одна из сторон (наименьшая) не будет касаться окружности, если предположить, что радиус у нее жестко задан. Причем ни описывающей окружности (или же пострадают другие стороны), ни вписанной.
Вроде любой выпуклый 'шарнирный' n-угольник можно представить треугольником(пусть даже плоским), устанавливая углы в 180 градусов
На примере палестинца:
Палестинецрис.3
(лень рисовать), но если угол при вершине, не лежащей на окружности будет 180, то получится треугольник(визуально), вокруг которого описать окружность можно, как и вписать
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34191457
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.ИМХО это условие выполняется когда каждая сторона является касательной к окружности, причем радиус окружности для каждой стороны может быть свой.
ИМО окружности в таком описании лишние. Я правильно понимаю? Вы говорите о существовании точки, из которой можно провести перпендикуляры ко всем сторонам.
В таком случае даже самый плоский ромб будет удовлетворять этому условию

А требуется как я понял минимизировать расстояния от каждой точки многоугольника до окружности.
Как её найти не понятно:(
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34191479
LINUXER Алексей Вк.ИМХО это условие выполняется когда каждая сторона является касательной к окружности, причем радиус окружности для каждой стороны может быть свой.
ИМО окружности в таком описании лишние. Я правильно понимаю? Вы говорите о существовании точки, из которой можно провести перпендикуляры ко всем сторонам.
В таком случае даже самый плоский ромб будет удовлетворять этому условию

А требуется как я понял минимизировать расстояния от каждой точки многоугольника до окружности.
Как её найти не понятно:(
А это мысль!
Я кстати понял что не хватает в предыдущей системе - там не хватает свзи между стронами - это добавит кол-во уравнений до необходимого кол-ва.

Но вот минимизировать расстояние - это можно сделать многими методами.
Только надо описать связи между сторонами.
Выглядит это так:

(li^2/4+ri^2)=(li-1^2/4+ri-1^2)

или через углы.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34192615
Пришла идея, раз методы численные, значит попробуем уменьшить трудоемкость до нуля :-)

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

есть система

sin(ai/2)=(li/2)/ri
ri+1^2+li+1^2/4=ri^2+li^2/4
...

sum(ai)=2*pi

Получаем итерационную процедуру.
Задаемся начальным значением r0.
Вычисляем

ai=2*arcsin(li/2ri)

гипотенуза

ci^2=ri^2+li^2/4

Для следующего сектора

ri+1=sqrt(ci^2-li^2/4)

Вычисляем ai+1 и т.д.
Суммируем ai. Далее изменяем значение r0 с каким-то шагом и методом деления отрезка пополам идем к цели - sum(ai)=2*pi.
Сейчас попробую этот метод.

Главное его преимущество - он способен работать с любыми длинами сторон многоугольника, если только выполняется условие существование самого многоугольника.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34193666
Не вышло, реализовал, получил, начал выяснять - да углы сошлись, а вот построение нет.
Причина в исходном положении - неправильное предположение - что перпендикуляр будет разбивать сторону пополам, самый простой случай - треугольник, если он не равносторонний, то перпендикуляры к его сторонам не будут разбивать его стороны пополам (ну есть еще пару частных случаев, но это не меняет суть дела). В общем надо переписать уравнения.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34194575
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пилите Лёша, пилите... (извините, шутка).

В общем надо переписать уравнения

Вот это в точку. В общем, если хотите получить надёжно работающий алгоритм для любого соотношения сторон придётся Вам действовать по классике - либо искать максимум площади при заданных длинах сторон, либо, если Вы уж такой поклонник физических аналогий, могу предложить такую - имеем "бусы", где каждая "бусинка" еденичный положительный заряд; "бусинки" закреплены на нитке на расстояниях равных длинам Вашего отрезка. Ищется состояние в котором потенциальная энергия такой системы минимальна. В любом случае налетаем на систему нелинейных алгебраических уров - далее Ньютон. Почему рекомендую такой подход - эти две задачи имеют прозрачный физический смысл в отличие от всего остального что здесь до сих пор предлагалось Вами и Вам.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34194625
Да - к сожалению тут с первого раза не пробъешь.
Кажется я знаю один способ : пусть углы задаю те, кто задает траекторию и пусть это будут их проблемы :-)))

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
sin(fi1)=li1/ri
sin(fi2)=li2/ri

ci1^ 2 =ri^ 2 +li1^ 2 
ci2^ 2 =ri^ 2 +li2^ 2 

fi1+fi2=fi
li1+li2=li


ci2=c(i+ 1 ) 1 
...

sum(fi1+fi2)= 2 *pi

Где li - длина отрезка (сторона прямоугольника), li1 и li2 - отрезки от перпендикуляра (до и после перпендикуляра - радиуса окружности ri в порядке обхода сторон прямоугольника).
fi1 и fi2 - соответственно углы при вершине прямоугльника между ri и cix.
ci1 и ci2 - гипотенуза этих прямоугольников.

Проблема в кол-ве неизвестных.
Т.е. сущность вот в чем - соседние сектора связаны между собой только через общие стороны и сумму углов при вершине. Этого мало. Если взять предыдущий метод, то нельзя однозначно определить требуемое положение следующего сектора относительно предыдущего.
Чувствую - точно чувствую что еще должно быть какое-то соотношение для выпуклого непересекающегося многоугольника, хотя бы для данной задачи.
Молжно пытаться перебирать все подряд - но смысла нет, не даст результат. Т.е. результат будет и он сойдется но оне будет оптимальным. Нужен критерий оптимальности - например минимальность суммы раасстояний до центра - т.е. sum(ri )->min. Это уже ближе к задаче с бусами и потенциальной энергией. Только наверное надо каждой бусине приписать энергию в зависимости от ее размера.
Кстати родился еще один вариант: изначально разбить на одинаковые сектора по кол-ву. Каждоиу сектору по стороне - она будет располагаться на определенном расстоянии от центра. Наша задача - регулируя углы в центре добиться сходимости всех сторон - чтобы они соприкоснулись друг с другом. Вроде просто, задача должна сходиться для любого существующего незамкнутого многоугольника, но опять же какие уравнения здесь использовать из тех что есть? И чем минимизировать? Но опять же угол - этого мало, есть еще деление этого угла ri, это усложняет задачу. Значит надо использовать все соотношения.....

А времени мало, нет - наверное точно надо на первое время пока что забить ручной ввод углов между сторонами хотя бы (fi можно не трогать - его вручную намного сложнее определить). И думать... сходить что-ли на кафедру к математикам.....
Если что откопаю - напишу.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34211664
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей!

Ну как у вас дела? Получилось чего?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34211722
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-видимому, среди препов, работающих на кафедре математики в том вузе, где обучается Алексей нет ни одного по фамилии Гюйгенс...

Алексей, если не сикрет, что за контора?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #34212863
Да ничего толком не получилось, покрутился с окончательным выоажением и решил что пока не найду проф. математика - велосипед изобретать не буду, времени нет :-(.
БГУИР у нас (БГУ Информатики и радиоэлектроники, по-старому - РТИ, его по этому имени по всему союзу знали), проблема в том что не могу дойти до кафедры математики.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вписывание многоугольника
    #36504549
LexMinsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет народ, у меня схожая задачка.
Есть многоугольник (возможно и не выпуклый). Знаю только координаты точек и длины сторон многоугольника.
Надо этот многоугольник тупо вписать в окружность. Не обязательно чтобы точки лежали на окружности. Главное чтобы многоугольник весь помещался в окружности. Ну и желательно, чтобы радиус этой окружности стремился к минимальному.
Кто что подскажет?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36504569
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexMinskГлавное чтобы многоугольник весь помещался в окружности.Это-то просто. Например, вычисляете среднее арифметическое координат всех вершин, получаете некую среднюю точку. Вокруг этой точки рисуете окружность радиусом, равным расстоянию до самой дальней вершины.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36504584
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно построить выпуклую оболочку вокруг вашего многоугольника. Это легко. Далее попробовать применить к этой выпуклой оболочке стандартные алгоритмы описанной окружности вокруг треугольника (или четырёхугольника если получится). Возможно придётся из множества окружностей выбрать ту, котрая включает в себя все-все вершины.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36504590
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftНапример, вычисляете среднее арифметическое координат всех вершин, получаете некую среднюю точку. Вокруг этой точки рисуете окружность радиусом, равным расстоянию до самой дальней вершины.
Я тоже об этом думал. Но мне кажется я могу нарисовать частный случай, когда средняя точка не будет сопадать с самым идеальным центром окружности.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36504626
LexMinsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пока нашел такое решение:
1. Вычисляем корень квадратный из дисперсии, т.е. X = ((X1^2 + ... X^n)/n)^(1/5), Y = ((Y1^2 + ... Y^n)/n)^(1/5).
2. R = max{R(X1,Y1,X,Y), ...R(Xn, Yn, X, Y)} - выбираем максимальный радиус.

Типо того короче :).
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36504660
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexMinskТипо того короче :).
А точность?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36504751
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonmiksoftНапример, вычисляете среднее арифметическое координат всех вершин, получаете некую среднюю точку. Вокруг этой точки рисуете окружность радиусом, равным расстоянию до самой дальней вершины.
Я тоже об этом думал. Но мне кажется я могу нарисовать частный случай, когда средняя точка не будет сопадать с самым идеальным центром окружности.А это и не является идеальным решением. Оно решает только то, что мной было процитировано. Ес-сно, количество таких решений бесконечно.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36505116
pirovindos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перебрать все тройки вершин, рассчитать радиус описаной окружности, выбрать максимальный (любой из них) и нарисовать. Тупо, но верно. Вариантов оптимизации перебора - много, если будет необходимость.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36505198
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Вк.Может кто подскажет алгоритм.
Имеем многоугольник - неравносторонний, замкнутый - у на сесть только длина каждой из сторон. Ниужно его вписать в круг. Т.е. найти радиус круга и координаты вершин в декартовой системе координат.
Условие вписываемости выполняется (длина любой стороны не превышет суммарную длину всех остальных сторон).
ИМХО это что-то стандартное должно быть, но мне никогда не встречалось.
Задача поставлена некорректно, решения быть не может.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36505253
RT183.5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое "мноугольник"? Да это просто набор его вершин.
Т.е. просто набор точек
Короче, задача называется "минимальная описывающая окружеость"
Тупо возьми решение с сайта прографикса http://prografix.narod.ru/rus_geom.html
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36506051
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переборная задача, надо брать 3 из N вершин по-очереди, выводить уравнение окружности и условие принадлежности остальных N-3 точек кругу, т.е. расстояние их от центра (x0, y0) должно быть не больше R. Как только это условие произойдет - цикл завершаем. Дополнительно должна быть проверка на принадлежность 3-х точек одной линии. Если такое имеет место - прекращаем поиск решения и предлагаем подумать.
Остается вывести формулу центра (x0, y0) и радиуса R от координат трех точек, не лежащих на одной прямой.
Пусть (x1, y1), (x2,y2), (x3, y3) - координаты точек.
Тогда (x1-x0)^2 + (y1-y0)^2 = (x2 - x0)^2 + (y2 - y0)^2
(x1-x0)^2 + (y1-y0)^2 = (x3 - x0)^2 + (y3 - y0)^2
Два уравнения - два неизвестных.
Делаем очевидные преобразования
x1^2 - 2x1*x0 + x0^2 + y1^2 - 2y1*y0 + y0^2 = x2^2 - 2x2*x0 + x0^2 + y2^2 - 2y2*y0 + y0^2
x1^2 - 2x1*x0 + x0^2 + y1^2 - 2y1*y0 + y0^2 = x3^2 - 2x3*x0 + x0^2 + y3^2 - 2y3*y0 + y0^2
или
x1^2 - 2x1*x0 + y1^2 - 2y1*y0 = x2^2 - 2x2*x0 + y2^2 - 2y2*y0
x1^2 - 2x1*x0 + y1^2 - 2y1*y0 = x3^2 - 2x3*x0 + y3^2 - 2y3*y0
или
2x2*x0 - 2x1*x0 + 2y2*y0 - 2y1*y0 = x2^2 + y2^2 - x1^2 - y1^2
2x3*x0 - 2x1*x0 + 2y3*y0 - 2y1*y0 = x3^2 + y3^2 - x1^2 - y1^2
или
2(x2 - x1)x0 + 2(y2 - y1)y0 = x2^2 + y2^2 - x1^2 - y1^2
2(x3 - x1)x0 + 2(y3 - y1)y0 = x3^2 + y3^2 - x1^2 - y1^2
или
(x2 - x1)x0 + (y2 - y1)y0 = (x2^2 + y2^2 - x1^2 - y1^2)/2
(x3 - x1)x0 + (y3 - y1)y0 = (x3^2 + y3^2 - x1^2 - y1^2)/2
или
D = (x2 - x1)(y3 - y1) - (x3 - x1)(y2 - y1)
2Dx0 = (x2^2 + y2^2 - x1^2 - y1^2)(y3-y1) - (x3^2 + y3^2 - x1^2 - y1^2)(y2-y1) =
x2^2*y3 + y2^2*y3 - x1^2*y3 - y1^2*y3 - x2^2*y1 - y2^2*y1 + x1^2*y1 + y1^3 -
-(x3^2*y2 + y3^2*y2 - x1^2*y2 - y1^2*y2 - x3^2*y1 - y3^2*y1 + x1^2*y1 + y1^3) =
x2^2*y3 + y2^2*y3 - x1^2*y3 - y1^2*y3 - x2^2*y1 - y2^2*y1 -
-(x3^2*y2 + y3^2*y2 - x1^2*y2 - y1^2*y2 - x3^2*y1 - y3^2*y1) =
x2^2(y3-y1) + y2^2(y3 - y1) - (x1^2 + y1^2)y3 -
-[x3^2(y2-y1) + y3^2(y2 - y1) - (x1^2 + y1^2)y2] =
(x2^2 + y2^2)(y3-y1) - (x3^2 + y3^2)(y2 - y1) - (x1^2 + y1^2)(y3-y2)
Аналогично
2Dy0 = - (x2^2 + y2^2)(x3-x1) + (x3^2 + y3^2)(x2 - x1) + (x1^2 + y1^2)(x3-x2)
Проверим решение для (1,0) (0,1) и (2,1) - тогда центр должен иметь координаты (1,1)
x1 = 1, x2 = 0, x3 = 2, y1 = 0 , y2 = 1, y3 = 1
D = (0-1)(1-0) - (2-1)(1-0) = -1 - 1 = -2
x2^2 + y2^2 = 1, x1^2 + y1^2 = 1, x3^2+y3^2 = 5
2Dx0 = (1-0) - 5 = -4
2Dy0 = -1 + 5(0-1) + 2 = -4
x0 = 1, y0 =1
Таким образом имеем формулы для определения (x0,y0) по трем точкам.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36704168
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый. Подниму такую старую тему, т.к. тоже нужно решить поставленную задачу.
Собственно есть маасив точек на плоскости - нужно найти минимально описывающую окружность.
Нашел такие материалы
http://www.inf.ethz.ch/personal/gaertner/miniball.html - собственно полное решение задачи
http://softsurfer.com/Archive/algorithm_0107/algorithm_0107.htm#fastBall()
http://prografix.narod.ru/min_circle.html

по ссылкам приведены готовые куски кода, но т.к. я не силен в тех языках - то немогу его переделать под необходимый. А полное описание алгоритма - я так и не нашел - везде отрывки обрезки.
Может кто поможет с полным алгоритмом?

Самый маленький код который я нашел для решения задачи - вот (но я даже не понял что это за язык, и может ктото сможет расшифровать его). Спасибо!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
/ Assume that classes are already given for the objects:
//    Point and Vector with
//        coordinates {float x, y;}
//        operators for:
//            Point  = Point ± Vector
//            Vector = Point - Point
//            Vector = Vector ± Vector
//            Vector = Scalar * Vector    (scalar product)
//            Vector = Vector / Scalar    (scalar division)
//    Ball with a center and radius {Point center; float radius;}
//===================================================================

// dot product which allows vector operations in arguments
#define dot(u,v)   ((u).x * (v).x + (u).y * (v).y)
#define norm2(v)   dot(v,v)        // norm2 = squared length of vector
#define norm(v)    sqrt(norm2(v))  // norm = length of vector
#define d(u,v)     norm(u-v)       // distance = norm of difference
 

// fastBall(): a fast approximation of the bounding ball for a point set
//               based on the algorithm given by [Jack Ritter,  1990 ]
//    Input:  an array V[] of n points
//    Output: a bounding ball = {Point center; float radius;}
void
fastBall( Point V[], int n, Ball* B)
{
    Point C;                           // Center of ball
    float rad, rad2;                   // radius and radius squared
    float xmin, xmax, ymin, ymax;      // bounding box extremes
    int   Pxmin, Pxmax, Pymin, Pymax;  // index of V[] at box extreme

    // find a large diameter to start with
    // first get the bounding box and V[] extreme points for it
    xmin = xmax = V[ 0 ].x;
    ymin = ymax = V[ 0 ].y;
    Pxmin = Pxmax = Pymin = Pymax =  0 ;
    for (int i= 1 ; i<n; i++) {
        if (V[i].x < xmin) {
            xmin = V[i].x;
            Pxmin = i;
        }
        else if (V[i].x > xmax) {
            xmax = V[i].x;
            Pxmax = i;
        }
        if (V[i].y < ymin) {
            ymin = V[i].y;
            Pymin = i;
        }
        else if (V[i].y > ymax) {
            ymax = V[i].y;
            Pymax = i;
        }
    }
    // select the largest extent as an initial diameter for the ball
    Vector dVx = V[Pxmax] - V[Pxmin]; // diff of Vx max and min
    Vector dVy = V[Pymax] - V[Pymin]; // diff of Vy max and min
    float dx2 = norm2(dVx); // Vx diff squared
    float dy2 = norm2(dVy); // Vy diff squared
    if (dx2 >= dy2) {                     // x direction is largest extent
        C = V[Pxmin] + (dVx /  2 . 0 );         // Center = midpoint of extremes
        rad2 = norm2(V[Pxmax] - C);         // radius squared
    }
    else {                                // y direction is largest extent
        C = V[Pymin] + (dVy /  2 . 0 );         // Center = midpoint of extremes
        rad2 = norm2(V[Pymax] - C);         // radius squared
    }
    rad = sqrt(rad2);

    // now check that all points V[i] are in the ball
    // and if not, expand the ball just enough to include them
    Vector dV;
    float dist, dist2;
    for (int i= 0 ; i<n; i++) {
        dV = V[i] - C;
        dist2 = norm2(dV);
        if (dist2 <= rad2)    // V[i] is inside the ball already
            continue;
        // V[i] not in ball, so expand ball to include it
        dist = sqrt(dist2);
        rad = (rad + dist) /  2 . 0 ;         // enlarge radius just enough
        rad2 = rad * rad;
        C = C + ((dist-rad)/dist) * dV;   // shift Center toward V[i]
    }
    B->Center = C;
    B->radius = rad;
    return;
}
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36704179
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NezarСобственно есть маасив точек на плоскости - нужно найти минимально описывающую окружность.
...
Может кто поможет с полным алгоритмом?Из всего вышестоящего обсуждения вполне вырисовывается алгоритм - перебрать все тройки точек (треугольники) и найти среди них такую, которая дает максимальный радиус описанной окружности.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36704213
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36704214
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да - но при наличии 20000 точек перебирать все возможные комбинации из трех, будет происходить долго. Тем более, мне кажется, возможен вариант когда единственно возможная минимальная окружность может быть постоена только по двум точкам.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36704251
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NezarТем более, мне кажется, возможен вариант когда единственно возможная минимальная окружность может быть постоена только по двум точкам.Хм. Да, вы правы, посыпаю свою голову пеплом. :)

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

Можно попытаться оптимизировать - в пункте 2 учитывать сразу только точки, лежащие вне окружности из пункта 1.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36704311
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft1) перебором найти две самые далеко отстоящие друг от друга точки.Тоже можно оптимизировать - проверять только те точки, которые находятся в пределах внешнего квадрата, но не находятся в пределах внутреннего квадрата. Внешний квадрат образова координатами самых крайних точек по каждой из осей. Внутренний меньше внешнего в (корень из 2) раз.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36704361
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftmiksoft1) перебором найти две самые далеко отстоящие друг от друга точки.Тоже можно оптимизировать - проверять только те точки, которые находятся в пределах внешнего квадрата, но не находятся в пределах внутреннего квадрата. Внешний квадрат образова координатами самых крайних точек по каждой из осей. Внутренний меньше внешнего в (корень из 2) раз.
интерестно. нужно попробовать теперь это все в кучу собрать.
Спасибо!
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707000
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftNezarТем более, мне кажется, возможен вариант когда единственно возможная минимальная окружность может быть постоена только по двум точкам.Хм. Да, вы правы, посыпаю свою голову пеплом. :)

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

Можно попытаться оптимизировать - в пункте 2 учитывать сразу только точки, лежащие вне окружности из пункта 1.

По ходу вопрос - описанная окружность всегда будет проходить через две самые удаленные друг от друга точки?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707061
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NezarПо ходу вопрос - описанная окружность всегда будет проходить через две самые удаленные друг от друга точки?Я полагал, что да. Но теперь, после вашего вопроса, задумался о контрпримере, и, кажется, нашел его :(
И кстати, и насчет перебора троек точек рецепт тоже был неверным :(


Тройки точек надо перебирать таким образом, чтобы радиус окружности был минимальным, но не было остальных точек за ее пределами. Но это дает очень большой объем вычислений.

Если устроит приблизительное решение, то можно подумать над итеративным способом.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707077
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПроверим решение для (1,0) (0,1) и (2,1) - тогда центр должен иметь координаты (1,1)
x1 = 1, x2 = 0, x3 = 2, y1 = 0 , y2 = 1, y3 = 1
D = (0-1)(1-0) - (2-1)(1-0) = -1 - 1 = -2
x2^2 + y2^2 = 1, x1^2 + y1^2 = 1, x3^2+y3^2 = 5
2Dx0 = (1-0) - 5 = -4
2Dy0 = -1 + 5(0-1) + 2 = -4
x0 = 1, y0 =1
Таким образом имеем формулы для определения (x0,y0) по трем точкам.

Подскажите а каким "таким образом"
Как получилось что x0 = 1, y0 =1 ?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707091
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне нужно решить эту задачу с одной целью - автоматизировать вписывание картинок в круг )
приблизительное решение может и подойдет - вопрос только в том - на сколько оно приблизительное.
И еще вопрос - может получится разобрать алгоритм, который приведен на предыдущей странице. В принципе я в нем только пару строк не понимаю, напрмер
dot(u,v) ((u).x * (v).x + (u).y * (v).y) - что здесь находится? тем более что сюда посылается один параметр для u и v...

я уже вторые сутки не сплю практически - перелазил весь нет исписал тетрадь, но блин - пока ничего не выходид...
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707106
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nezar, не всегда задачу нужно решать абсолютно точно. На практике зачастую точного решения никто не ищет (транспортная задча). Хватает приближённого. Тебе надо вписывать картинку в круг? Отлично. Как задана картинка? Выпуклый многоугольник? Матрица пикселов? Или еще хр.зн. какое аналитическое описание.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707125
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
исходник - некая картинка (думаю не больше 120x120 пикселей) в формате png, которая имеет прозрачные участки.
одной программкой я записываю в текстовый файл параметры каждого пикселя
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 0 , 0 : ( 255 , 255 , 255 ,   0 )  #FFFFFF00  rgba( 255 , 255 , 255 , 0 )
 1 , 0 : ( 255 , 255 , 255 ,   0 )  #FFFFFF00  rgba( 255 , 255 , 255 , 0 )
 2 , 0 : (   0 ,   0 ,   0 , 255 )  # 000000   black
 0 , 1 : (   0 ,   0 ,   0 , 255 )  # 000000   black
 1 , 1 : (   0 ,   0 ,   0 ,   0 )  # 00000000   none
 2 , 1 : ( 255 , 255 , 255 ,   0 )  #FFFFFF00  rgba( 255 , 255 , 255 , 0 )
 0 , 2 : (   0 ,   0 ,   0 ,   0 )  # 00000000   none
 1 , 2 : (   0 ,   0 ,   0 , 255 )  # 000000   black
 2 , 2 : ( 255 , 255 , 255 ,   0 )  #FFFFFF00  rgba( 255 , 255 , 255 , 0 )
выдираю от сюда координаты непрозрачных пикселей и собственно с ними начинаю работать.

когда получаю чентр описанного круга (эх...)
расширяю холст, сдвигаю картинку и вуаля (это уже работает)
.....
посему чем меньше будет охватывающий круг - тем крупнее будет картинка - что есть - главное.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707130
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nezarкрупнее будет картинка - что есть - главное.Что-то я не пойму, а зачем тут вообще круг? В результате же картинка получится прямоугольная?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707137
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

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

такой способ уже проверил (написал код)- и он работает - если конечно можно описать окружность по двум точкам, а так можно - далеко не всегда сделать.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707144
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nezar,

Так я и не пойму, зачем вам тут круг...
Насколько я понял задачу, достаточно взять минимальные и максимальные координаты непрозрачных точек и это даст обрамляющий прямоугольник.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707156
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

ключевое слово - "пряоугольник", а мне нужно вписать в круг.
картинка после тримминга (обрезка до первых непрозрачных пикселей со всех сторон) не идеально вписывается по углам. - по сути это тоже самое что прямоугольник в круг вписывать. Но у меня многоугольник.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707164
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nezar,

можете показать пример исходной и конечной картинки?

Вы то соглашаетесь со мной, что конечным результатом будет прямоугольная картинка, то опять хотите круг. Совсем меня запутали...

Если так уж нужен именно круг, то переборный вариант тут, возможно, будет не так уж и плох. Ведь в каждой вертикали и каждой горизонтали можно взять только крайние точки, промежуточные не нужны. А еще можно по каждой стороне поискать пики и выкинуть все точки между ними.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707170
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nezer, твоя задача разбита на 2 независимых этапа

1) Построение выпуклой оболочки вокруг непрозрачных пикселов картинки.

http://ru.wikipedia.org/wiki/%D0%92%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B0

2) Построение описанной окружности вокруг выпуклого многоугольника.

http://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BA%D1%80%D1%83%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C

C (1) пунктом всё предельно просто, а со (2) надо подумать. Формульные решения существуют только для треугольников и выпуклых четырёхугольников. Возможно придётся комбинировать несколько методов. Кстати тот факт что сама окружность имеет дискретный радиус и положение упрощает задачу до комбинаторно-генетического метода. Достаточно её приблизить "хоть как нибудь" к описаной окрестности а потом можно добить её каким-нибудь "поиском минимума" или каким-нибудь ГА в 100-200 итераций до точного решения.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707172
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftNezar,

можете показать пример исходной и конечной картинки?

Вы то соглашаетесь со мной, что конечным результатом будет прямоугольная картинка, то опять хотите круг. Совсем меня запутали...

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

про пики согласен - но это уже оптимизация, а оптимизировать пока нечего ((

пример не знаю как выкладывать картинки - поэтому самый простой вариант.

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

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

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

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

из того что я за 2 дня начитал я понял что мне нужно уйти от фигур и просто описать набор точек - это проще всего (наверное)
а самое обидное что я нашел три алгоритма как это делается но все они на С++ что для меня темный лес и кучу непонятных теоретических описаний.

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

картинку с треугольником видел. и как оказалось, - проблемно было найти вменяемую формулу для описания круга по трем точкам...
щас остановился на проверке наборов троеточий - но пока, чтото не очень...
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707562
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумал, порисовал различные частные случаи и пришёл к следующему:

Поиск описанной окружности вокруг n-вершинного многоугольника M(n) путём комбинирования треугольников из n по 3 заведёт в тупик. Мы найдем неверное решение которое не будет оптимальным.

Представьте себе достаточно вытянутый многоугольник M1 (эдакий плоский блин из множества точек). Не решая численно я априори вижу, что диаметр описанной окружности O1 совпадает с поперечником M1. Поперечник визуально легко найти, если взять две самые отдалённые друг от друга точки. Другие точки можно смело игнорировать. Они не влияют на положение и радиус O1.

Если решать это комбинируя треугольники то мы найдем заведомо окружность O2 гораздо большего радиуса.

Наша ошибка в рассуждениях - слишком суровое требование "касания". Наша искомая окружность вовсе не обязана (хотя и может) касаться многоугольника тремя точками. Достаточно двух для моего пример.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707607
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Хорошо. Давайте впишем "сердце" в окружность. Две самые удаленные точки ничего не дадут.
Искать круг только по двум точкам - тоже не верно т.к. есть вариант когда такого круга просто не существует - пример - равносторонний треугольник (да вообще треугольник)

щас попробую совместить поиск путем одновременного перебора окружностей по двум и трем точкам - но сложность алгоритма будет N в 4 степени что оочень долго, но.... вобщем пока пробую это.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707729
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-ж говорю - вовсе не обязана касаться трех. Вот пример (картинка), когда математическое определение описанной окружности не подходит под практику данной задачи. На ней окружность неоптимальна.

Почему поперечник искать проще? Ответ прост - меньше вычислений т.к. комбинируем 2 из N.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707763
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Видимо я чтото не понял.
Что такое - "поперечник"
для рисунка в виде сердца он где будет?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707768
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не помню определение. Для окружности поперечник - это и есть диаметр. Для любой другой фигуры - это наиболее протяжённое расстояние от двух дальних точек. Пускай математики меня поправят если что не так.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707920
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nezarmayton,

Хорошо. Давайте впишем "сердце" в окружность. Две самые удаленные точки ничего не дадут.Не совсем "ничего". Если остальные точки не выпадают из этой окружности, то она и будет рузультирующей окружностью.
NezarИскать круг только по двум точкам - тоже не верно т.к. есть вариант когда такого круга просто не существует - пример - равносторонний треугольник (да вообще треугольник)

щас попробую совместить поиск путем одновременного перебора окружностей по двум и трем точкам - но сложность алгоритма будет N в 4 степени что оочень долго, но.... вобщем пока пробую это.Во-первых, не так уж и долго, точек у вас немного. Если подумать над оптимизацией, то даже без глубоких математических изысканий можно свести их количество до 10-20 или даже меньше.
Во-вторых, предварительная проверка пар точек уменьшит среднее время решения.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707949
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftNezarmayton,

Хорошо. Давайте впишем "сердце" в окружность. Две самые удаленные точки ничего не дадут.Не совсем "ничего". Если остальные точки не выпадают из этой окружности, то она и будет рузультирующей окружностью.
NezarИскать круг только по двум точкам - тоже не верно т.к. есть вариант когда такого круга просто не существует - пример - равносторонний треугольник (да вообще треугольник)

щас попробую совместить поиск путем одновременного перебора окружностей по двум и трем точкам - но сложность алгоритма будет N в 4 степени что оочень долго, но.... вобщем пока пробую это.Во-первых, не так уж и долго, точек у вас немного. Если подумать над оптимизацией, то даже без глубоких математических изысканий можно свести их количество до 10-20 или даже меньше.
Во-вторых, предварительная проверка пар точек уменьшит среднее время решения.

естественно точки выпадают - такая окружность не есть ограничивающей.

щас немного оптимизировал процесс - количество точек сводится только к количеству точек расположенных по периметру картинки. Хотя мне кажется что достаточно точек, которые лежат на сторонах ограничивающего картинку, прямоугольника.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707954
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопрос
предположим что единственным решением задачи будет окружность построенная по двум точкам.
Всегда эти точки буду самые удаленные друг от друга?
Если нет - то можно пример.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707968
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nezarщас немного оптимизировал процесс - количество точек сводится только к количеству точек расположенных по периметру картинки.я об этом уже давно вам толкую.
NezarХотя мне кажется что достаточно точек, которые лежат на сторонах ограничивающего картинку, прямоугольника.Нет. Контрпример - восьмиконечная звезда, вертикальные и горизонтальные лучи которой равны между собой, а диагональные - чуть-чуть длиннее.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36707985
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NezarЕще вопрос
предположим что единственным решением задачи будет окружность построенная по двум точкам.
Всегда эти точки буду самые удаленные друг от друга?Да. Самый длинный отрезок, который целиком помещается в окружность - это ее диаметр.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36708253
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftNezarщас немного оптимизировал процесс - количество точек сводится только к количеству точек расположенных по периметру картинки.я об этом уже давно вам толкую.
NezarХотя мне кажется что достаточно точек, которые лежат на сторонах ограничивающего картинку, прямоугольника.Нет. Контрпример - восьмиконечная звезда, вертикальные и горизонтальные лучи которой равны между собой, а диагональные - чуть-чуть длиннее.

хотелось сначало хоть както заставить работать алгоритм

со звездой - да... не подумал..

щас алгоритм выглядит так (как вы говорили)

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

... пока тестирую результаты
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36708332
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В вашем, весьма дискретном случае можно попробовать следующий вариант:
0) Считается, что вы уже имеет ограничивающий прямоугольник.
1) Двойным циклом перебираете все координаты в пределах ограничивающего прямоугольника (если сможете, то начиная с его центра), это будет центр очередной пробной окружности. Среди всех пробных окружностей выбираете ту, у которой расстояние до самой дальней точки будет минимальным. Это расстояние будет радиусом искомой окружности.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36708736
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВ вашем, весьма дискретном случае можно попробовать следующий вариант:
0) Считается, что вы уже имеет ограничивающий прямоугольник.
1) Двойным циклом перебираете все координаты в пределах ограничивающего прямоугольника (если сможете, то начиная с его центра), это будет центр очередной пробной окружности. Среди всех пробных окружностей выбираете ту, у которой расстояние до самой дальней точки будет минимальным. Это расстояние будет радиусом искомой окружности.

работает - но долговато ((.... но работает ))
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36708751
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nezar
со звездой - да... не подумал..

Звезды быть не должно! Алгоритм выпуклой оболчки отбрасывает нафиг все вогнутые рёбра (на мой прикид это около 70% всех вершин. И чем их больше в многоугольнике тем эффективнее этот фильтр.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36708773
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonNezarсо звездой - да... не подумал..Звезды быть не должно! Алгоритм выпуклой оболчки отбрасывает нафиг все вогнутые рёбра (на мой прикид это около 70% всех вершин. И чем их больше в многоугольнике тем эффективнее этот фильтр.Не заморачивайтесь вы с этой звездой. Это был лишь конкретный контрпример на конкретный вопрос, но не более.
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36709622
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВ вашем, весьма дискретном случае можно попробовать следующий вариант:
0) Считается, что вы уже имеет ограничивающий прямоугольник.
1) Двойным циклом перебираете все координаты в пределах ограничивающего прямоугольника (если сможете, то начиная с его центра), это будет центр очередной пробной окружности. Среди всех пробных окружностей выбираете ту, у которой расстояние до самой дальней точки будет минимальным. Это расстояние будет радиусом искомой окружности.

в общем - протестировал этот вариант на разных рисунка - вроде с задачей справляется.
ОГРОМНОЕ СПАСИБО ВСЕМ за ПОМОЩЬ!

правда есть одно но - алгоритм долгий - приходится делать большой перебор точек (и как мне кажется - лишних) в пределах ограничивающего прямоугольника. Может можно как то сузить поиск?
Например - всегда ли центр описанной окружности будет в круге с центром в центре описывающего квадрата (или средней координате всех точек) и радиусом от него до ближайшей точки в наборе?
...
Рейтинг: 0 / 0
Вписывание многоугольника
    #36709628
Nezar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nezar,

оли центр может лежать в груге проведеном из центра ограничивающего прямоугольника - до средней точки многоугольника
...
Рейтинг: 0 / 0
111 сообщений из 111, показаны все 5 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вписывание многоугольника
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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