|
|
|
Вписывание многоугольника
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36504584&tid=1343600]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 470ms |

| 0 / 0 |
