|
|
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Может кто подскажет алгоритм. Имеем многоугольник - неравносторонний, замкнутый - у на сесть только длина каждой из сторон. Ниужно его вписать в круг. Т.е. найти радиус круга и координаты вершин в декартовой системе координат. Условие вписываемости выполняется (длина любой стороны не превышет суммарную длину всех остальных сторон). ИМХО это что-то стандартное должно быть, но мне никогда не встречалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 20:53:08 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Вас обманули, Условие вписываемости выполняется (длина любой стороны не превышет суммарную длину всех остальных сторон). есть условие не "вписываемости", а существования замкнутого многоугольника. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 21:22:29 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Да, по-сути: пусть даны 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. Лично мне было бы не влом кракнуть эту системку численно Ньютоном, т.к. моя личная библиотека линейных солверов у меня под рукой. Ну а как Вы будете выкручиваться - дело Ваше, хотя может кто и предложит аналитическое решение... Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 21:55:18 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.Может кто подскажет алгоритм. Имеем многоугольник - неравносторонний, замкнутый - у на сесть только длина каждой из сторон. Ниужно его вписать в круг. Т.е. найти радиус круга и координаты вершин в декартовой системе координат. Условие вписываемости выполняется (длина любой стороны не превышет суммарную длину всех остальных сторон). ИМХО это что-то стандартное должно быть, но мне никогда не встречалось. Ну.. если это - треугольник - задача тривиальна. Вспоминаем геометрию. Во всех остальных случаях, ваша фигура имеет бесконечное количество положений веришин, а следовательно найти одно решение вписанного многоугольника мне не представляется возможным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 22:13:24 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк....у нас есть только длина каждой из сторон... ок. Давайте все по порядку. У нас есть длина каждой из сторон, следовательно мы знаем сколько всего сторон у этого многоугольника. Полюбому условие вписываемости - сумма длин всех сторон должна быть меньше длины самого круга. Алексей Вк....Т.е. найти радиус круга... Мне приходит на ум только методом перебора делать. Вычислить начальный радиус круга (длина круга = сумме длин всех сторон, затем из длины выражаем радиус), затем последовательно откладывать каждый из отрезков, концы которых будут на границе окружности. Если конец последнего отрезка не совпадет с началом первого - уменьшать радиус. Но Вы пока это дебажить будете, рак башки схватите . Алексей Вк....и координаты вершин в декартовой системе координат... А тут уж извините, я могу вращать как угодно вписанный многоугольник и при этом координаты будут изменяться, а многоугольник при этом останется вписанным. P.S.: У меня такое предположение, что задача поставлена некорректно. Не хватает исходных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 23:37:19 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Задача поставлена корректно. Да, безусловно, существует бесконечное множество выпуклых замкнутых многоугольников, вокруг которых невозможно описать окружность. Это очевидно. Поэтому в общем случае задача НЕ имеет решения. Тем не менее, если для заданного набора длин сторон решение существует, то заданных условий достаточно для однозначного определения радиуса описанной окружности. Всё. Всё остальное определяется с точностью до двух аффинных преобразований: произвольного сдвига начала координат и поворота системы коопдинат на произвольный угол. Мне приходит на ум только методом перебора делать. Вычислить начальный радиус круга (длина круга = сумме длин всех сторон, затем из длины выражаем радиус), затем последовательно откладывать каждый из отрезков, концы которых будут на границе окружности. Если конец последнего отрезка не совпадет с началом первого - уменьшать радиус. Но Вы пока это дебажить будете, рак башки схватите... По моей методике это будет делать метод Ньютона, уверяю Вас, если решение существует, то с точностью до 0.000...01 Ньютоном оно найдется за 5 - 6 итераций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 00:09:25 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
mikhail_nЗадача поставлена корректно. Не совсем. Думаю, пропущено условие "многоугольник является выпуклым/несамопересекающимся (любое из этих условий сгодится)". При этом условии, а также при условии нахождения всех вершин на окружности - согласен с Вашим решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 01:47:28 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Если только предположить, что все точки лежат на окружности, тогда решение существует. Честно говоря, уже поздно и голова у меня щас не варит, но рискну предположить, что необходима система уравнений, связывающая площади круга, треугольников лежащих на радиусах, секторов и сегментов. (слабеющей рукой рисую общий случай для 4 точек, и пошел спать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 02:15:26 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
softwarerНе совсем. Думаю, пропущено условие "многоугольник является выпуклым/несамопересекающимся (любое из этих условий сгодится)" Нет, любое не сгодится, только выпуклый, вокруг невыпуклого описать окружность невозможно. Несамопересекающийся может быть невыпуклым. Вообще то ловить меня надо было на этом пассаже: Да, безусловно, существует бесконечное множество выпуклых замкнутых многоугольников, вокруг которых невозможно описать окружность. Это очевидно. Поэтому в общем случае задача НЕ имеет решения. Из одного другого не следует: e.g. квадрат vs ромб. В связи с этим есть у меня чуйство что для любого набора длин сторон решение существует и единственно, под решением понимается выпуклый многоугольник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 03:52:46 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Так - похоже я неправильно сформулировал задачу. В общем - многоугольник выпуклый, непересекающийся. Требуется ..... а я теперь и не знаю что требуется :-)) Давайте сначала. У меня есть массив, содержащий стороны многоуольника - их длины. Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу. Самый простой метод, кторый мне пришел в голову - вписать многоугольник в круг. Конечно часть вершин на стороны круга не попадет, но мне это не критично. Кажется есть другой вариант - не вписать многоугольник в круг - а круг в многоугольник. Это точно возможно для любого выпуклого непересекающегося многоугольника. Причем обеспечить максимум радиуса круга. Это наверное будет проще. Итерационные численные методы в моем случае использовать нежелательно. Ищу аналитическое решение. Хотя я вот сейчас думаю..... А может есть более простой вариант - через углы между сторонами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 10:37:43 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
mikhail_nНет, любое не сгодится, только выпуклый, вокруг невыпуклого описать окружность невозможно. Да ладно Вам :) См. ниже. mikhail_nВ связи с этим есть у меня чуйство что для любого набора длин сторон решение существует и единственно, под решением понимается выпуклый многоугольник. Я же так и сказал: при соблюдении пары дополнительных условий я согласен с Вашим решением. Действительно, должно быть именно так (это следует из логики нарисованной Вами системы и того факта, что функция Sum(ai) монотонна по R. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 10:37:44 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Пусть такая окружность существует. Тогда верно: Центр окружности = точка пересечения прямых проведеных через середины сторон перпендикулярно оным. Это вытекает из того факта что все стороны описываемого многоугольника - хорды. Следовательно треугольник <центр окружности> - <концы хорды> равнобедренный, а значит биссектриса и высота совпадает. Уравнение прямой 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 Проверяем расстояние до всех вершин. Расстояние от центра до всех вершин должно быть одинаковое = радиусу. Если расстояние разное - такой окружности не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 10:57:45 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Это Для Описывающей окружности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 11:11:37 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.У меня есть массив, содержащий стороны многоуольника - их длины. Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу. ... Ищу аналитическое решение. Философский вопрос: что такое "стремящийся к кругу"? :) Как глядя на два варианта многоугольников определить кто из них больше стремится? Решение будет зависить от "функции" задающей степень "стремления". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 11:17:11 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Интересно. Надо будет попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 11:20:14 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Алексей Вк.У меня есть массив, содержащий стороны многоуольника - их длины. Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу. ... Ищу аналитическое решение. Философский вопрос: что такое "стремящийся к кругу"? :) Как глядя на два варианта многоугольников определить кто из них больше стремится? Решение будет зависить от "функции" задающей степень "стремления". Тот - в который можно вписать круг большего радиуса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 11:21:17 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
golsaПусть такая окружность существует. Тогда верно:...... То, что Вы написали, само по себе верно, но решать эту задачу таким способом Вы немного замучаетесь. golsa1 Для любых двух сторон находим уравнения перпендикуляров и решаем систему из этих 2 уравнений. Не проясните ли следующий момент: как найти уравнения перпендикуляров, зная длины всех сторон и ничего более? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 12:19:14 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Я вот тут подумал над самым первым вариантом: sin(ai/2)=(li/2)/r ... sum(ai)=2*pi Попробуем так: sum( arcsin(li/(2*r)) )=2*pi Если отсюда вынести r - то все элементарно решается. Но я не могу найти ни одну подходящую формулу - как вынести из arcsin любой аргумент: arcsin(a*b)=??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 12:40:59 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Никак. Поздравляю, Вы свели мою систему к одному нелинейному уравнению. Теперь вычислительная сложность реализации метода Ньютона вообще децкая (хотя я бы так делать не стал если требуется алгоритм для произвольного числа сторон). Начальное приближение для R - Sum(di)/(2*pi). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 18:50:22 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Ну не совсем никак, вот здесь есть формула для суммы: http://www.emis.de/journals/SMZ/2004/05/1022.pdf Но мне нужно умножение. Где бы его взять??? Или действительно взять уравнение Ньютоном? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 19:11:06 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.Так - похоже я неправильно сформулировал задачу. В общем - многоугольник выпуклый, непересекающийся. Требуется ..... а я теперь и не знаю что требуется :-)) Давайте сначала. У меня есть массив, содержащий стороны многоуольника - их длины. Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу. Самый простой метод, кторый мне пришел в голову - вписать многоугольник в круг. Конечно часть вершин на стороны круга не попадет, но мне это не критично. Кажется есть другой вариант - не вписать многоугольник в круг - а круг в многоугольник. Это точно возможно для любого выпуклого непересекающегося многоугольника. Причем обеспечить максимум радиуса круга. Это наверное будет проще. Итерационные численные методы в моем случае использовать нежелательно. Ищу аналитическое решение. Хотя я вот сейчас думаю..... А может есть более простой вариант - через углы между сторонами? 1) Как вписать многоугольник в круг - Перебираем все тройки вершин. строим окружность по 3 точкам (описаную вокруг треугольника) Выбираем окружность максимального радиуса - она является минимальной покрывающей окружностью. 2)Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу. Так. Переформулирую: Для всех многоугольников с данными сторонами найти тот наибольшее количество вершин которого расположены на одной окружности(?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 19:44:13 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Тот - в который можно вписать круг большего радиуса. Эквивалентно - среди многоугольников с задаными сторонами выбрать с наибольшей площадью. Опять же мне кажется - может быть бесконечно неконгруэнтных вариантов ответа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 19:48:25 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу.Т.е. многоугольник не жесткий, а "шарнирный"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 19:50:47 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft Алексей Вк.Мне надо найти их координаты, при условии что результат получится в виде выпуклого многоугольника, стремящегося по своей форме к кругу.Т.е. многоугольник не жесткий, а "шарнирный"? Именно шарнирный - у меня не заданы углы между сторонами. Поэтому и нет их координат. Т.е. если еще раз переформулировать - найти такое расположение сторон, при котором углы между сторонами максимальны, такой многоугольник будет стремиться к кругу (если конечно соблюдать равномерность, а не делать один угол максимальным, а все остальные как получится). Или по-другому - надо найти эти самые углы (собственно их я и ищу - т.к. использовтаь буду именно их, радиус постольку поскольку - он легко находится и нужен скорее для определения сколько площади займет вся эта конструкция :-) и то грубо, точное значение радиуса не требуется). Поэтому любые варианты предполагающие наличие координат у сторон многоугольника не подходят. Я как раз координаты и ищу (будут углы - а координаты из них элементарно и сразу в декартовой, если произвольно задать координаты любой стороны). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 19:59:52 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
2Алексей Вк. ещё раз. вот твоя задача: среди многоугольников с задаными сторонами найти с наибольшей площадью. решение не знаю - копать по ключевым словам вариационная задача лагранжа.изопериметрическая задача. задача дидоны. истина где-то там :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 20:13:29 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Эх знал бы я так математику..... Если не найдется аналитическое решение, придется делать численное. Никуда не денешься. Или методом перебора с заданным шагом :-))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 20:16:48 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.углы между сторонами максимальныМожет, сумма углов? если нет, то квадрат будет более приоритетен, чем ромб при равной сумме углов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 20:30:43 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.Эх знал бы я так математику..... Если не найдется аналитическое решение, придется делать численное. Никуда не денешься. Или методом перебора с заданным шагом :-))))) Ну численный то я тебе сразу предложу.. строишь окружность радиуса R0 - откладываешь ломанную по окружности из сторон многоугольника (это всегда можно сделать). вычисляешь из расстояния между конечными точками - на сколько необходимо уменьшить радиус (или увеличить).. Например : R1 = R0 - D / 2PI. ( надо подумать ещё!) Метод должен сходится стопудов! зы. между прочим отсюда похоже следует что для любого значения сторон существует и единственен с точностью до поворота вписаный в окружность многоугольник. и площадь его максимальна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 20:38:32 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Мне все таки кажется, что можно это решить без перебора. В итоговом многоугольнике, каждая из сторон многоугольника является хордой к описывающей окружности. Значит окружность можно разбить на кучу секторов с одинаковым радиусом и задаными длинами хорд. А дальше, зная что длина хорды относится к углу 2*R*sin(a/2) получаем систему с одним уравнением для каждого из исходных отрезков: Код: plaintext 1. 2. 3. 4. Потом (для определенности) кладем один из отрезков на координатную ось и зная радиус (и возможно углы) посторить окружность и вписаный в нее многоугольник плевое дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 21:01:07 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Ну численный то я тебе сразу предложу.. строишь окружность радиуса R0 - откладываешь ломанную по окружности из сторон многоугольника (это всегда можно сделать). вычисляешь из расстояния между конечными точками - на сколько необходимо уменьшить радиус (или увеличить).. Например : R1 = R0 - D / 2PI. ( надо подумать ещё!) Метод должен сходится стопудов! Не должен. В основе лежит неверная посылка что длина хорды зависит от радиуса окружности линейно, что справедливо для длины дуги окружности. Если бы это было бы так, то задача решалась бы аналитически в три действия. Эх знал бы я так математику..... Если не найдется аналитическое решение, придется делать численное. Никуда не денешься. Или методом перебора с заданным шагом :-))))) В свете Ваших последних признаний, то что Вы запостили вначале не совсем эквивалентно тому, что Вы на самом деле ищите (может и эквивалентно, но это не очевидно и, вообще говоря, надо доказывать). Если хотите, я могу сбросить систему уравнений к которым приведет вариационная постановка задачи, но предупреждаю, она будет также нелинейной и будет выглядеть ещё пострашнее, чем в случае с окружностью, так что от итерационных методов решения систем нелинейных алгебраических уравнений Вам, похоже, никуда не деться. Xотя, чёрт его знает, например до открытия дифференциального/интегрального исчисления был такой оригинал (кажется Гюйгенс), так он некоторые задачи, кот. теперь решаются при помощи диффуров умудрялся решать без этих прибамбасов. Так что never say never! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 21:14:40 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Мне все таки кажется, что можно это решить без перебора. Но если теперь вспомнить что сумма всех углов должна дать в итоге 360 градусов и добавить это уравнение в систему - получим вполне простую систему которую уже можно решить традиционными методами. Осталась мелочь - найти традиционный НЕИТЕРАЦИОННЫЙ метод решения нелинейных алгебраических уравнений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 21:20:30 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Не должен. В основе лежит неверная посылка что длина хорды зависит от радиуса окружности линейно, что справедливо для длины дуги окружности. Если бы это было бы так, то задача решалась бы аналитически в три действия. Блин, имел ввиду от угла сектора конечно. От радиуса то как раз линейно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 21:23:49 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Так, чтобы застолбить приоритет - задача с окружностью кажется действительно решается аналитически в три действия... Продолжение следует... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 21:47:17 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Э..., нет. Май бед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 21:51:40 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Продолжу численную идею в таком варианте.. (см. рисунок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): ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 09:20:08 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
рис.2 : ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 09:21:10 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
рис.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 09:21:53 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
сори. пропали индексы из за тега [ i ] :-) F(R) = SUM(arccos((R^2 - P(i)^2)/(2 R^2))) - где P(i) длина i-той стороны. сумма по всем сторонам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 09:23:41 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Кстати mikhail_n Начальное приближение для R - Sum(di)/(2*pi). Совсем не факт, что попадём в окрестность сходимости метода Ньютона к искомому решению.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 09:57:22 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
У меня родилась новая формулировка задачи :-) Т.к. действительно может быть немало случаев когда многоугольник и не впишешь, и не опишешь. То можно переформулировать. Мне нужно чтобы все стороны многоугольника описали фигуру, максимально близкую к кругу. ИМХО это условие выполняется когда каждая сторона является касательной к окружности, причем радиус окружности для каждой стороны может быть свой. Вот рисунок: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 13:32:49 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.У меня родилась новая формулировка задачи :-)А можно поинтересоваться практическим смыслом этой задачи? Алексей Вк.может быть немало случаев когда многоугольник и не впишешьПримерчик можно? что-то не могу такого представить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 13:37:55 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
А вот теперь вопрос - как будет выглядеть сиcтема уравнений для такого случая? И реально ли ее решить вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 13:38:05 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.У меня родилась новая формулировка задачи :-)Кстати, эта формулировка ничем не отличается от вписывания многоугольника в окружность и, соответственно, имеет то же решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 13:46:00 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft Алексей Вк.У меня родилась новая формулировка задачи :-)А можно поинтересоваться практическим смыслом этой задачи? Алексей Вк.может быть немало случаев когда многоугольник и не впишешьПримерчик можно? что-то не могу такого представить... Поинтересоваться можно - мне нужно описать проекцию траектории движения тела в трехмерном пространстве по оси Z :-) Попросту говоря - есть траектория движения тела по оси Z на разных участках, у нас етсь проекция этого движения на плоскости под ним. Траектория состоит из прямолинейных участков. Причем траектория движения в области x-y не представляет из себя интереса. Нужно произвести визуализацию этого процесса. Для упрощения траектория движения замыкается и сворачивается в круг - проблема именно в этом моменте. Можно было бы траекторию описывать вдоль прямой, но это не то. Ведь процесс повторяющийся. Задача в общем-то научная, так что здесь свои особенности. И поэтому у меня есть проекции - длины прямолинейных участков на плоскости x-y. Теперь требуется их расположить в требуемом порядке и по возможности наиболее близко к круговой фрме для наилучшего обзора процесса. По полученным углам я уже без проблем построю траекторию в пространстве. А насчет примера невозможности - так я же его и нарисовал - в данном случае одна из сторон (наименьшая) не будет касаться окружности, если предположить, что радиус у нее жестко задан. Причем ни описывающей окружности (или же пострадают другие стороны), ни вписанной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 13:47:17 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Жуть получается: sin(ai/2)=(li/2)/ri ... sum(ai)=2*pi Или sum( arcsin(li/(2*ri)) )=2*pi Зато хорошо подходит почти для любого многоугольника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 13:51:47 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft Алексей Вк.У меня родилась новая формулировка задачи :-)Кстати, эта формулировка ничем не отличается от вписывания многоугольника в окружность и, соответственно, имеет то же решение.Это я не совсем прав. Формулировка будет идентичной, только если радиусы на рисунке делят стороны на две равные части. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 14:09:24 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.Нужно произвести визуализацию этого процесса.Так для визуализации не нужно особой точности. Все равно точнее, чем плюс-минус полпискселя не нарисуешь на экране. А приблизительно (3-4 значащих знака) можно и итерационно решить за вполне приемлемое время, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 14:23:33 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.У меня родилась новая формулировка задачи :-) Можно поинтересоваться откуда они берутся=)) и предполагают ли они разумное обоснование зачем каждой стороне свою окружность? Кажется это самый неправдоподобный критерий, к тому же есть целые множества фигур, удовлетворяющих начальным условиям например все равносторонние четырёхугольники Первая часть задачи как раз определить правдоподобный критерий "стремления к окружности" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 16:37:08 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.Для упрощения траектория движения замыкается и сворачивается в круга окружность обязательно до полного замыкания доводить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 16:41:43 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Я вот думаю - в процессе решения задачи последний отрезок можно конечно принудительно приводить к заданному значению. Но это тогда потребует тщательного подбора исходных данных для решения задачи - а это уже не совсем научный подход, во всяком случе не для целей визуализации. Насчет каждой стороны - а ИМХО будут проблемы со сторонами, котореы ну никак не захотят вписываться. Поэтому данный подход наверное наиболее корректный. Но - n+1 уравнений и 2n неизвестных. Где-то еще должны быть уравнения описывающие последний вариант. Вот только не могу понять что именно они должны связывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 17:24:34 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft Алексей Вк.Нужно произвести визуализацию этого процесса.Так для визуализации не нужно особой точности. Все равно точнее, чем плюс-минус полпискселя не нарисуешь на экране. А приблизительно (3-4 значащих знака) можно и итерационно решить за вполне приемлемое время, имхо. Да - наверное это проще всего, я это понимаю, просто ну совсем не хочется решать итерационным методом систему уравнений для такой второстепенной задачи, но явно придется :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 17:26:50 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.А насчет примера невозможности - так я же его и нарисовал - в данном случае одна из сторон (наименьшая) не будет касаться окружности, если предположить, что радиус у нее жестко задан. Причем ни описывающей окружности (или же пострадают другие стороны), ни вписанной. Вроде любой выпуклый 'шарнирный' n-угольник можно представить треугольником(пусть даже плоским), устанавливая углы в 180 градусов На примере палестинца: Палестинецрис.3 (лень рисовать), но если угол при вершине, не лежащей на окружности будет 180, то получится треугольник(визуально), вокруг которого описать окружность можно, как и вписать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 18:48:23 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.ИМХО это условие выполняется когда каждая сторона является касательной к окружности, причем радиус окружности для каждой стороны может быть свой. ИМО окружности в таком описании лишние. Я правильно понимаю? Вы говорите о существовании точки, из которой можно провести перпендикуляры ко всем сторонам. В таком случае даже самый плоский ромб будет удовлетворять этому условию А требуется как я понял минимизировать расстояния от каждой точки многоугольника до окружности. Как её найти не понятно:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 19:05:59 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
LINUXER Алексей Вк.ИМХО это условие выполняется когда каждая сторона является касательной к окружности, причем радиус окружности для каждой стороны может быть свой. ИМО окружности в таком описании лишние. Я правильно понимаю? Вы говорите о существовании точки, из которой можно провести перпендикуляры ко всем сторонам. В таком случае даже самый плоский ромб будет удовлетворять этому условию А требуется как я понял минимизировать расстояния от каждой точки многоугольника до окружности. Как её найти не понятно:( А это мысль! Я кстати понял что не хватает в предыдущей системе - там не хватает свзи между стронами - это добавит кол-во уравнений до необходимого кол-ва. Но вот минимизировать расстояние - это можно сделать многими методами. Только надо описать связи между сторонами. Выглядит это так: (li^2/4+ri^2)=(li-1^2/4+ri-1^2) или через углы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 19:15:58 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Пришла идея, раз методы численные, значит попробуем уменьшить трудоемкость до нуля :-) Физическая сущность - аналог металлической плоской пружины, которую пытаемся скрутить в круг. Если так подумать - то можно представить все сектора кругов расположенными в линию, потом мы начинаем скручивать ее в круг и подгонять друг к другу, чтобы обеспечить сходимость. Сложно. Тогда попробуем то же, но по уравнениям, ничего н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. Сейчас попробую этот метод. Главное его преимущество - он способен работать с любыми длинами сторон многоугольника, если только выполняется условие существование самого многоугольника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 11:36:46 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Не вышло, реализовал, получил, начал выяснять - да углы сошлись, а вот построение нет. Причина в исходном положении - неправильное предположение - что перпендикуляр будет разбивать сторону пополам, самый простой случай - треугольник, если он не равносторонний, то перпендикуляры к его сторонам не будут разбивать его стороны пополам (ну есть еще пару частных случаев, но это не меняет суть дела). В общем надо переписать уравнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 15:26:55 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Пилите Лёша, пилите... (извините, шутка). В общем надо переписать уравнения Вот это в точку. В общем, если хотите получить надёжно работающий алгоритм для любого соотношения сторон придётся Вам действовать по классике - либо искать максимум площади при заданных длинах сторон, либо, если Вы уж такой поклонник физических аналогий, могу предложить такую - имеем "бусы", где каждая "бусинка" еденичный положительный заряд; "бусинки" закреплены на нитке на расстояниях равных длинам Вашего отрезка. Ищется состояние в котором потенциальная энергия такой системы минимальна. В любом случае налетаем на систему нелинейных алгебраических уров - далее Ньютон. Почему рекомендую такой подход - эти две задачи имеют прозрачный физический смысл в отличие от всего остального что здесь до сих пор предлагалось Вами и Вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 19:37:50 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Да - к сожалению тут с первого раза не пробъешь. Кажется я знаю один способ : пусть углы задаю те, кто задает траекторию и пусть это будут их проблемы :-))) А если серьезно то уравнения вырисовываются следующие(поменял немного обозначения в соответствии со своим чертежом, его приводить не буду, кажется и так все понятно): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Где li - длина отрезка (сторона прямоугольника), li1 и li2 - отрезки от перпендикуляра (до и после перпендикуляра - радиуса окружности ri в порядке обхода сторон прямоугольника). fi1 и fi2 - соответственно углы при вершине прямоугльника между ri и cix. ci1 и ci2 - гипотенуза этих прямоугольников. Проблема в кол-ве неизвестных. Т.е. сущность вот в чем - соседние сектора связаны между собой только через общие стороны и сумму углов при вершине. Этого мало. Если взять предыдущий метод, то нельзя однозначно определить требуемое положение следующего сектора относительно предыдущего. Чувствую - точно чувствую что еще должно быть какое-то соотношение для выпуклого непересекающегося многоугольника, хотя бы для данной задачи. Молжно пытаться перебирать все подряд - но смысла нет, не даст результат. Т.е. результат будет и он сойдется но оне будет оптимальным. Нужен критерий оптимальности - например минимальность суммы раасстояний до центра - т.е. sum(ri )->min. Это уже ближе к задаче с бусами и потенциальной энергией. Только наверное надо каждой бусине приписать энергию в зависимости от ее размера. Кстати родился еще один вариант: изначально разбить на одинаковые сектора по кол-ву. Каждоиу сектору по стороне - она будет располагаться на определенном расстоянии от центра. Наша задача - регулируя углы в центре добиться сходимости всех сторон - чтобы они соприкоснулись друг с другом. Вроде просто, задача должна сходиться для любого существующего незамкнутого многоугольника, но опять же какие уравнения здесь использовать из тех что есть? И чем минимизировать? Но опять же угол - этого мало, есть еще деление этого угла ri, это усложняет задачу. Значит надо использовать все соотношения..... А времени мало, нет - наверное точно надо на первое время пока что забить ручной ввод углов между сторонами хотя бы (fi можно не трогать - его вручную намного сложнее определить). И думать... сходить что-ли на кафедру к математикам..... Если что откопаю - напишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 20:08:32 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей! Ну как у вас дела? Получилось чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2006, 22:30:37 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
По-видимому, среди препов, работающих на кафедре математики в том вузе, где обучается Алексей нет ни одного по фамилии Гюйгенс... Алексей, если не сикрет, что за контора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2006, 23:45:11 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Да ничего толком не получилось, покрутился с окончательным выоажением и решил что пока не найду проф. математика - велосипед изобретать не буду, времени нет :-(. БГУИР у нас (БГУ Информатики и радиоэлектроники, по-старому - РТИ, его по этому имени по всему союзу знали), проблема в том что не могу дойти до кафедры математики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2006, 12:54:44 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Привет народ, у меня схожая задачка. Есть многоугольник (возможно и не выпуклый). Знаю только координаты точек и длины сторон многоугольника. Надо этот многоугольник тупо вписать в окружность. Не обязательно чтобы точки лежали на окружности. Главное чтобы многоугольник весь помещался в окружности. Ну и желательно, чтобы радиус этой окружности стремился к минимальному. Кто что подскажет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 11:29:37 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
LexMinskГлавное чтобы многоугольник весь помещался в окружности.Это-то просто. Например, вычисляете среднее арифметическое координат всех вершин, получаете некую среднюю точку. Вокруг этой точки рисуете окружность радиусом, равным расстоянию до самой дальней вершины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 11:36:10 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Можно построить выпуклую оболочку вокруг вашего многоугольника. Это легко. Далее попробовать применить к этой выпуклой оболочке стандартные алгоритмы описанной окружности вокруг треугольника (или четырёхугольника если получится). Возможно придётся из множества окружностей выбрать ту, котрая включает в себя все-все вершины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 11:39:05 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftНапример, вычисляете среднее арифметическое координат всех вершин, получаете некую среднюю точку. Вокруг этой точки рисуете окружность радиусом, равным расстоянию до самой дальней вершины. Я тоже об этом думал. Но мне кажется я могу нарисовать частный случай, когда средняя точка не будет сопадать с самым идеальным центром окружности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 11:41:21 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Я пока нашел такое решение: 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)} - выбираем максимальный радиус. Типо того короче :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 11:52:11 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
LexMinskТипо того короче :). А точность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 12:07:00 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
maytonmiksoftНапример, вычисляете среднее арифметическое координат всех вершин, получаете некую среднюю точку. Вокруг этой точки рисуете окружность радиусом, равным расстоянию до самой дальней вершины. Я тоже об этом думал. Но мне кажется я могу нарисовать частный случай, когда средняя точка не будет сопадать с самым идеальным центром окружности.А это и не является идеальным решением. Оно решает только то, что мной было процитировано. Ес-сно, количество таких решений бесконечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 12:40:08 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Перебрать все тройки вершин, рассчитать радиус описаной окружности, выбрать максимальный (любой из них) и нарисовать. Тупо, но верно. Вариантов оптимизации перебора - много, если будет необходимость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 14:38:46 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Алексей Вк.Может кто подскажет алгоритм. Имеем многоугольник - неравносторонний, замкнутый - у на сесть только длина каждой из сторон. Ниужно его вписать в круг. Т.е. найти радиус круга и координаты вершин в декартовой системе координат. Условие вписываемости выполняется (длина любой стороны не превышет суммарную длину всех остальных сторон). ИМХО это что-то стандартное должно быть, но мне никогда не встречалось. Задача поставлена некорректно, решения быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 15:22:44 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Что такое "мноугольник"? Да это просто набор его вершин. Т.е. просто набор точек Короче, задача называется "минимальная описывающая окружеость" Тупо возьми решение с сайта прографикса http://prografix.narod.ru/rus_geom.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2010, 15:43:50 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Переборная задача, надо брать 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) по трем точкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2010, 09:03:50 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
День добрый. Подниму такую старую тему, т.к. тоже нужно решить поставленную задачу. Собственно есть маасив точек на плоскости - нужно найти минимально описывающую окружность. Нашел такие материалы 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 18:36:11 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
NezarСобственно есть маасив точек на плоскости - нужно найти минимально описывающую окружность. ... Может кто поможет с полным алгоритмом?Из всего вышестоящего обсуждения вполне вырисовывается алгоритм - перебрать все тройки точек (треугольники) и найти среди них такую, которая дает максимальный радиус описанной окружности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 18:46:50 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
да - но при наличии 20000 точек перебирать все возможные комбинации из трех, будет происходить долго. Тем более, мне кажется, возможен вариант когда единственно возможная минимальная окружность может быть постоена только по двум точкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 19:21:17 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
NezarТем более, мне кажется, возможен вариант когда единственно возможная минимальная окружность может быть постоена только по двум точкам.Хм. Да, вы правы, посыпаю свою голову пеплом. :) Хотя есть мысль как это исправить: 1) перебором найти две самые далеко отстоящие друг от друга точки. Это даст нам окружность с центром посередине между этими точками. 2) перебором искать третью точку, которая дает минимальный радиус описанной окружности треугольника. 3) если третья точка получилась в пределах окружности из пункта 1, то результатом будет окружность из пункта 1. Иначе - окружность из пункта 2. Можно попытаться оптимизировать - в пункте 2 учитывать сразу только точки, лежащие вне окружности из пункта 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 19:58:43 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft1) перебором найти две самые далеко отстоящие друг от друга точки.Тоже можно оптимизировать - проверять только те точки, которые находятся в пределах внешнего квадрата, но не находятся в пределах внутреннего квадрата. Внешний квадрат образова координатами самых крайних точек по каждой из осей. Внутренний меньше внешнего в (корень из 2) раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 20:30:09 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftmiksoft1) перебором найти две самые далеко отстоящие друг от друга точки.Тоже можно оптимизировать - проверять только те точки, которые находятся в пределах внешнего квадрата, но не находятся в пределах внутреннего квадрата. Внешний квадрат образова координатами самых крайних точек по каждой из осей. Внутренний меньше внешнего в (корень из 2) раз. интерестно. нужно попробовать теперь это все в кучу собрать. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 20:55:21 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftNezarТем более, мне кажется, возможен вариант когда единственно возможная минимальная окружность может быть постоена только по двум точкам.Хм. Да, вы правы, посыпаю свою голову пеплом. :) Хотя есть мысль как это исправить: 1) перебором найти две самые далеко отстоящие друг от друга точки. Это даст нам окружность с центром посередине между этими точками. 2) перебором искать третью точку, которая дает минимальный радиус описанной окружности треугольника. 3) если третья точка получилась в пределах окружности из пункта 1, то результатом будет окружность из пункта 1. Иначе - окружность из пункта 2. Можно попытаться оптимизировать - в пункте 2 учитывать сразу только точки, лежащие вне окружности из пункта 1. По ходу вопрос - описанная окружность всегда будет проходить через две самые удаленные друг от друга точки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 22:04:42 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
NezarПо ходу вопрос - описанная окружность всегда будет проходить через две самые удаленные друг от друга точки?Я полагал, что да. Но теперь, после вашего вопроса, задумался о контрпримере, и, кажется, нашел его :( И кстати, и насчет перебора троек точек рецепт тоже был неверным :( Тройки точек надо перебирать таким образом, чтобы радиус окружности был минимальным, но не было остальных точек за ее пределами. Но это дает очень большой объем вычислений. Если устроит приблизительное решение, то можно подумать над итеративным способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 22:58:06 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
авторПроверим решение для (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 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 23:07:29 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
мне нужно решить эту задачу с одной целью - автоматизировать вписывание картинок в круг ) приблизительное решение может и подойдет - вопрос только в том - на сколько оно приблизительное. И еще вопрос - может получится разобрать алгоритм, который приведен на предыдущей странице. В принципе я в нем только пару строк не понимаю, напрмер dot(u,v) ((u).x * (v).x + (u).y * (v).y) - что здесь находится? тем более что сюда посылается один параметр для u и v... я уже вторые сутки не сплю практически - перелазил весь нет исписал тетрадь, но блин - пока ничего не выходид... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 23:25:40 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, не всегда задачу нужно решать абсолютно точно. На практике зачастую точного решения никто не ищет (транспортная задча). Хватает приближённого. Тебе надо вписывать картинку в круг? Отлично. Как задана картинка? Выпуклый многоугольник? Матрица пикселов? Или еще хр.зн. какое аналитическое описание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 23:47:34 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
исходник - некая картинка (думаю не больше 120x120 пикселей) в формате png, которая имеет прозрачные участки. одной программкой я записываю в текстовый файл параметры каждого пикселя Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. когда получаю чентр описанного круга (эх...) расширяю холст, сдвигаю картинку и вуаля (это уже работает) ..... посему чем меньше будет охватывающий круг - тем крупнее будет картинка - что есть - главное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:06:38 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezarкрупнее будет картинка - что есть - главное.Что-то я не пойму, а зачем тут вообще круг? В результате же картинка получится прямоугольная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:12:48 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft, естественно. в зависимости от радиуса описанного груга - изменится размер холста, а в зависимости от разницы центров первоначальной картинки и описанного круга - задается смещение для первоначальной картинки на новом холсте относительно его центра. такой способ уже проверил (написал код)- и он работает - если конечно можно описать окружность по двум точкам, а так можно - далеко не всегда сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:19:45 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, Так я и не пойму, зачем вам тут круг... Насколько я понял задачу, достаточно взять минимальные и максимальные координаты непрозрачных точек и это даст обрамляющий прямоугольник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:27:38 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoft, ключевое слово - "пряоугольник", а мне нужно вписать в круг. картинка после тримминга (обрезка до первых непрозрачных пикселей со всех сторон) не идеально вписывается по углам. - по сути это тоже самое что прямоугольник в круг вписывать. Но у меня многоугольник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:42:17 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, можете показать пример исходной и конечной картинки? Вы то соглашаетесь со мной, что конечным результатом будет прямоугольная картинка, то опять хотите круг. Совсем меня запутали... Если так уж нужен именно круг, то переборный вариант тут, возможно, будет не так уж и плох. Ведь в каждой вертикали и каждой горизонтали можно взять только крайние точки, промежуточные не нужны. А еще можно по каждой стороне поискать пики и выкинуть все точки между ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 00:49:16 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
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 итераций до точного решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 01:01:10 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftNezar, можете показать пример исходной и конечной картинки? Вы то соглашаетесь со мной, что конечным результатом будет прямоугольная картинка, то опять хотите круг. Совсем меня запутали... Если так уж нужен именно круг, то переборный вариант тут, возможно, будет не так уж и плох. Ведь в каждой вертикали и каждой горизонтали можно взять только крайние точки, промежуточные не нужны. А еще можно по каждой стороне поискать пики и выкинуть все точки между ними. про пики согласен - но это уже оптимизация, а оптимизировать пока нечего (( пример не знаю как выкладывать картинки - поэтому самый простой вариант. у меня есть рисунок в виде кольца, внутренний диаметр которого я знаю есть вторая картинка - колесо ("идеальный" вариант) на выходе я должен получить кольцо внутри которого (точнее - в пределах внутреннего известного радиуса) расположена картинка колеса. А так как колесо круглое - то оно замостит всю внутреннюю часть кольца... собственно задача - вписать некий многоугольник в круг (или описать круг вокруг многоугольника). гдето так ) ----------------- прикрепил 1.png пример исходной картинки ex.png - картинка которая получилось в результате работы уже работающей программы вот такое нужно проделать с большим количеством разнообразных картинок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 01:03:11 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, к сожалению я не матиматик, а... вообщето водитель ), поэтому все эти выпуклости никогда не пойму) из того что я за 2 дня начитал я понял что мне нужно уйти от фигур и просто описать набор точек - это проще всего (наверное) а самое обидное что я нашел три алгоритма как это делается но все они на С++ что для меня темный лес и кучу непонятных теоретических описаний. я уже думал и про минимуму и максимумы рисунка и про всякого такого рода вещи - кучу всего изрисовал - но если и находил решение - то оно было рабочим дтолько для нескольких случаев... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 01:07:37 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar, картинку с треугольником видел. и как оказалось, - проблемно было найти вменяемую формулу для описания круга по трем точкам... щас остановился на проверке наборов троеточий - но пока, чтото не очень... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 01:09:36 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Подумал, порисовал различные частные случаи и пришёл к следующему: Поиск описанной окружности вокруг n-вершинного многоугольника M(n) путём комбинирования треугольников из n по 3 заведёт в тупик. Мы найдем неверное решение которое не будет оптимальным. Представьте себе достаточно вытянутый многоугольник M1 (эдакий плоский блин из множества точек). Не решая численно я априори вижу, что диаметр описанной окружности O1 совпадает с поперечником M1. Поперечник визуально легко найти, если взять две самые отдалённые друг от друга точки. Другие точки можно смело игнорировать. Они не влияют на положение и радиус O1. Если решать это комбинируя треугольники то мы найдем заведомо окружность O2 гораздо большего радиуса. Наша ошибка в рассуждениях - слишком суровое требование "касания". Наша искомая окружность вовсе не обязана (хотя и может) касаться многоугольника тремя точками. Достаточно двух для моего пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 10:44:05 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
mayton, Хорошо. Давайте впишем "сердце" в окружность. Две самые удаленные точки ничего не дадут. Искать круг только по двум точкам - тоже не верно т.к. есть вариант когда такого круга просто не существует - пример - равносторонний треугольник (да вообще треугольник) щас попробую совместить поиск путем одновременного перебора окружностей по двум и трем точкам - но сложность алгоритма будет N в 4 степени что оочень долго, но.... вобщем пока пробую это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:05:45 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Я-ж говорю - вовсе не обязана касаться трех. Вот пример (картинка), когда математическое определение описанной окружности не подходит под практику данной задачи. На ней окружность неоптимальна. Почему поперечник искать проще? Ответ прост - меньше вычислений т.к. комбинируем 2 из N. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:47:54 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
mayton, Видимо я чтото не понял. Что такое - "поперечник" для рисунка в виде сердца он где будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 12:00:57 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Я не помню определение. Для окружности поперечник - это и есть диаметр. Для любой другой фигуры - это наиболее протяжённое расстояние от двух дальних точек. Пускай математики меня поправят если что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 12:02:38 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezarmayton, Хорошо. Давайте впишем "сердце" в окружность. Две самые удаленные точки ничего не дадут.Не совсем "ничего". Если остальные точки не выпадают из этой окружности, то она и будет рузультирующей окружностью. NezarИскать круг только по двум точкам - тоже не верно т.к. есть вариант когда такого круга просто не существует - пример - равносторонний треугольник (да вообще треугольник) щас попробую совместить поиск путем одновременного перебора окружностей по двум и трем точкам - но сложность алгоритма будет N в 4 степени что оочень долго, но.... вобщем пока пробую это.Во-первых, не так уж и долго, точек у вас немного. Если подумать над оптимизацией, то даже без глубоких математических изысканий можно свести их количество до 10-20 или даже меньше. Во-вторых, предварительная проверка пар точек уменьшит среднее время решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:02:39 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftNezarmayton, Хорошо. Давайте впишем "сердце" в окружность. Две самые удаленные точки ничего не дадут.Не совсем "ничего". Если остальные точки не выпадают из этой окружности, то она и будет рузультирующей окружностью. NezarИскать круг только по двум точкам - тоже не верно т.к. есть вариант когда такого круга просто не существует - пример - равносторонний треугольник (да вообще треугольник) щас попробую совместить поиск путем одновременного перебора окружностей по двум и трем точкам - но сложность алгоритма будет N в 4 степени что оочень долго, но.... вобщем пока пробую это.Во-первых, не так уж и долго, точек у вас немного. Если подумать над оптимизацией, то даже без глубоких математических изысканий можно свести их количество до 10-20 или даже меньше. Во-вторых, предварительная проверка пар точек уменьшит среднее время решения. естественно точки выпадают - такая окружность не есть ограничивающей. щас немного оптимизировал процесс - количество точек сводится только к количеству точек расположенных по периметру картинки. Хотя мне кажется что достаточно точек, которые лежат на сторонах ограничивающего картинку, прямоугольника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:12:46 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Еще вопрос предположим что единственным решением задачи будет окружность построенная по двум точкам. Всегда эти точки буду самые удаленные друг от друга? Если нет - то можно пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:14:30 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezarщас немного оптимизировал процесс - количество точек сводится только к количеству точек расположенных по периметру картинки.я об этом уже давно вам толкую. NezarХотя мне кажется что достаточно точек, которые лежат на сторонах ограничивающего картинку, прямоугольника.Нет. Контрпример - восьмиконечная звезда, вертикальные и горизонтальные лучи которой равны между собой, а диагональные - чуть-чуть длиннее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:21:33 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
NezarЕще вопрос предположим что единственным решением задачи будет окружность построенная по двум точкам. Всегда эти точки буду самые удаленные друг от друга?Да. Самый длинный отрезок, который целиком помещается в окружность - это ее диаметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:24:09 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftNezarщас немного оптимизировал процесс - количество точек сводится только к количеству точек расположенных по периметру картинки.я об этом уже давно вам толкую. NezarХотя мне кажется что достаточно точек, которые лежат на сторонах ограничивающего картинку, прямоугольника.Нет. Контрпример - восьмиконечная звезда, вертикальные и горизонтальные лучи которой равны между собой, а диагональные - чуть-чуть длиннее. хотелось сначало хоть както заставить работать алгоритм со звездой - да... не подумал.. щас алгоритм выглядит так (как вы говорили) ищутся две самые дальние точки перебором ищется третья точка, которая с первыми двумя составляет круг если в этот круг входят точки - хорошо - выбираем минимальный если такие три точки не нашлись - то наш круг описан возле первых двух самых удаленных точек ... пока тестирую результаты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 14:40:49 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
В вашем, весьма дискретном случае можно попробовать следующий вариант: 0) Считается, что вы уже имеет ограничивающий прямоугольник. 1) Двойным циклом перебираете все координаты в пределах ограничивающего прямоугольника (если сможете, то начиная с его центра), это будет центр очередной пробной окружности. Среди всех пробных окружностей выбираете ту, у которой расстояние до самой дальней точки будет минимальным. Это расстояние будет радиусом искомой окружности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 15:01:34 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftВ вашем, весьма дискретном случае можно попробовать следующий вариант: 0) Считается, что вы уже имеет ограничивающий прямоугольник. 1) Двойным циклом перебираете все координаты в пределах ограничивающего прямоугольника (если сможете, то начиная с его центра), это будет центр очередной пробной окружности. Среди всех пробных окружностей выбираете ту, у которой расстояние до самой дальней точки будет минимальным. Это расстояние будет радиусом искомой окружности. работает - но долговато ((.... но работает )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 16:48:46 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
Nezar со звездой - да... не подумал.. Звезды быть не должно! Алгоритм выпуклой оболчки отбрасывает нафиг все вогнутые рёбра (на мой прикид это около 70% всех вершин. И чем их больше в многоугольнике тем эффективнее этот фильтр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 16:53:22 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
maytonNezarсо звездой - да... не подумал..Звезды быть не должно! Алгоритм выпуклой оболчки отбрасывает нафиг все вогнутые рёбра (на мой прикид это около 70% всех вершин. И чем их больше в многоугольнике тем эффективнее этот фильтр.Не заморачивайтесь вы с этой звездой. Это был лишь конкретный контрпример на конкретный вопрос, но не более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 17:00:51 |
|
||
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#18+
miksoftВ вашем, весьма дискретном случае можно попробовать следующий вариант: 0) Считается, что вы уже имеет ограничивающий прямоугольник. 1) Двойным циклом перебираете все координаты в пределах ограничивающего прямоугольника (если сможете, то начиная с его центра), это будет центр очередной пробной окружности. Среди всех пробных окружностей выбираете ту, у которой расстояние до самой дальней точки будет минимальным. Это расстояние будет радиусом искомой окружности. в общем - протестировал этот вариант на разных рисунка - вроде с задачей справляется. ОГРОМНОЕ СПАСИБО ВСЕМ за ПОМОЩЬ! правда есть одно но - алгоритм долгий - приходится делать большой перебор точек (и как мне кажется - лишних) в пределах ограничивающего прямоугольника. Может можно как то сузить поиск? Например - всегда ли центр описанной окружности будет в круге с центром в центре описывающего квадрата (или средней координате всех точек) и радиусом от него до ближайшей точки в наборе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2010, 15:12:10 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1343600]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
128ms |
get tp. blocked users: |
2ms |
| others: | 197ms |
| total: | 403ms |

| 0 / 0 |
