|
|
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Даны координаты центра окружности (x0, y0), радиус r, нескольких точек на окружности (x1 y1), (x2 y2),... (xn yn). Нужно добавить заранее известное и постоянное количество N точек к данной окружности, чтобы распределение было как можно более равномерным. У меня загвоздка с перебором - не могу додуматься как организовать цикл, на каждой из итераций которого вычислять "равномерность" распределения. Вычислять "равномерность" планирую по формуле - находим среднюю длину дуг окружности между соседними точками в каждой из комбинаций распределения. Далее считаем сумму абсолютных отклонений длин дуг от среднего значения. Наименьшее значение и покажет оптимальную комбинацию. Также вижу трудность при вычислении "соседства" двух точек на окружности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 11:15 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85, Преобразуйте в полярные координаты, делов-то. Дальше берем пары ("дуга", "число фрагментов, образуемых дополнительными точками"), на каждом шаге находим пару с максимальной результирующей дугой и добавляем точку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 11:23 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
AbstractionДимитрий85, Преобразуйте в полярные координаты, делов-то. Вычисление "соседства" двух точек на окружности это решит. А вот что делать дальше, я все равно не могу понять... Какой цикл и как перебрать все комбинации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 11:29 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85, Вот тянет написать свое предыдущее сообщение еще раз, ей-же-ей. Соображение номер раз: если между двумя заданными точками поставлено несколько "наших", их расстановка с равными интервалами даст результат не менее равномерный в указанном смысле. Соображение номер два: тогда у нас есть множество интервалов, по которым надо распределить N точек; если на интервал длины d i выставлено a i точек, результирующие дуги на этом интервале равны d i /a i . Соображение номер три: жадный алгоритм в нашем случае подходит достаточно хорошо. Дает ли он всегда аналитически оптимальное решение, предлагаю выяснить самостоятельно - это же Ваша задача, в конце концов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 11:43 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Abstraction, спасибо за ваши выкладки. Соображения понятны и очевидны. Однако у меня в стартовом сообщении был ключевой вопрос ,вызвавший у меня затруднения, - как пройти по циклу, как перебрать именно комбинации "каждое расположение наших точек" с "каждым расположением опорных". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 11:52 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85 Abstraction, спасибо за ваши выкладки. Соображения понятны и очевидны. Однако у меня в стартовом сообщении был ключевой вопрос ,вызвавший у меня затруднения, - как пройти по циклу, как перебрать именно комбинации "каждое расположение наших точек" с "каждым расположением опорных".Первый ответ: этого следует избегать, так как там С N+n-1 N вариантов, причем уйма заведомо неоптимальных. Второй ответ: для построения цикла достаточно проанализировать, как была получена формула в первом ответе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 11:56 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Abstraction, уточню что под всеми комбинациями я имею ввиду только те, где добавляемые точки делят существующие на равные части. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 11:59 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85, Да. Именно в этом предположении и были даны ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 11:59 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
AbstractionДимитрий85, Да. Именно в этом предположении и были даны ответы. Так перебрать-то как ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 12:03 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85AbstractionДимитрий85, Да. Именно в этом предположении и были даны ответы. Так перебрать-то как )Это Вам надо или мне? Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 12:31 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
> У меня загвоздка с перебором - *не могу додуматься как организовать цикл, на > каждой из итераций которого вычислять "равномерность" распределения. Зачем цикл ? Задача не дискретная, цикла не нужно. Нужно жадный алгоритм придумывать. > Вычислять "равномерность" планирую по формуле - находим среднюю длину дуг > окружности между соседними точками в каждой из комбинаций распределения. У тебя будет бесконечное множество комбинаций, задоблаешся пересчитывать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 12:43 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Спасибо всем ответившим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 12:51 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85Спасибо всем ответившим. просто стало интересно)) представим что в задаче дано 2 точки, которые делят нашу окружность на 2 равные полуокружности.... нам надо добавить ещё 3 точки )) какой из вариантов распределения более равномерный?(в соотношениях длин дуг между точками): 1) 1:1:1:1,5:1,5 2) 1:1:1:1:2 3) 0,1 1,4 1,5 1,5 1,5 подскажите как вы считаете :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 13:45 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
ПрограмёрДимитрий85Спасибо всем ответившим. просто стало интересно)) представим что в задаче дано 2 точки, которые делят нашу окружность на 2 равные полуокружности.... нам надо добавить ещё 3 точки )) какой из вариантов распределения более равномерный?(в соотношениях длин дуг между точками): 1) 1:1:1:1,5:1,5 2) 1:1:1:1:2 3) 0,1 1,4 1,5 1,5 1,5 подскажите как вы считаете :)По данному в первом посте описанию (и принимая окружность за 6), "неравномерность": 1) 1.2 2) 1.6 3) 2.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 14:12 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Програмёр, по идее, вот так 1/2 1/2 - одна полуокружность 1/3 1/3 1/3 - вторая полуокружность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 14:47 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85, А если изначально две точки и полуокружности не равны, то меньшую делим на две части одной точкой, а большую - на три двумя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 14:48 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Кому интересно, предметная суть задачи - формировать граф. отчет (SVG), где окружность - узел, из центра которого выходят линии и пересекают ее. Задача - оптимально добавить еще несколько линий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 14:49 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85Кому интересно, предметная суть задачи - формировать граф. отчет (SVG), где окружность - узел, из центра которого выходят линии и пересекают ее. Задача - оптимально добавить еще несколько линий. понял)) значит наличие даже 20 одинаково-оптимальных решений не помешают выполнению задачи :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 14:56 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
p.s. Хотя я брал бы не "сумму абсолютных отклонений", а "сумму квадратов абсолютных отклонений". так как варианты 1.2:1.2:0.6:1.5:1.5 и 1:1:1:1.5:1.5 по предложенной автором формуле будут одинаково-равномерны (и как тогда выбрать нужный нам вариант?), хотя явно понятно, что второй вариант более равномерен. "сумму квадратов абсолютных отклонений" это явно покажет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 15:04 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85Кому интересно, предметная суть задачи - формировать граф. отчет (SVG), где окружность - узел, из центра которого выходят линии и пересекают ее. Задача - оптимально добавить еще несколько линий.Тогда я бы предложил сменить критерий оптимизации. Вместо непонятной "равномерности" - максимизировать минимальное расстояние между точками на окружности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 15:05 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
miksoft, Интересное предложение, и, скорее всего, более быстродейственное. Визуализация алгоритма тоже может быть интересной. ) Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 15:11 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Продолжаю мысль - тогда "подвижные" точки есть смысл размещать только равномерно на каждом отрезке дуги между "неподвижными". Тогда задача сводится к решению вопроса "сколько напихать точек в тот или иной интервал". Другими словами - найти способ разделения N точек на K групп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 15:19 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
miksoftПродолжаю мысль - тогда "подвижные" точки есть смысл размещать только равномерно на каждом отрезке дуги между "неподвижными". Тогда задача сводится к решению вопроса "сколько напихать точек в тот или иной интервал". Другими словами - найти способ разделения N точек на K групп. может не оптимально, но просто.... делим окружность на k дуг опорными точками..., а далее в цикле (пока не закончатся точки) по принипу: 1. Ищем дугу, которая делится нашими (не опорными) точками на самые длинные промежутки (дуги) 2. Добавляем к числу точек на этой дуге ещё одну В итоге получим k чисел, каждое соответствует числу точек на данной дуге... распределяем их равномерно по дуге (как и было сказано ранее) и ... готово :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 15:42 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
ПрограмёрmiksoftПродолжаю мысль - тогда "подвижные" точки есть смысл размещать только равномерно на каждом отрезке дуги между "неподвижными". Тогда задача сводится к решению вопроса "сколько напихать точек в тот или иной интервал". Другими словами - найти способ разделения N точек на K групп. может не оптимально, но просто.... делим окружность на k дуг опорными точками..., а далее в цикле (пока не закончатся точки) по принипу: 1. Ищем дугу, которая делится нашими (не опорными) точками на самые длинные промежутки (дуги) 2. Добавляем к числу точек на этой дуге ещё одну В итоге получим k чисел, каждое соответствует числу точек на данной дуге... распределяем их равномерно по дуге (как и было сказано ранее) и ... готово :)И Вам пирожок с верхней полки. 12861765 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 15:50 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Програмёрможет не оптимально, но просто.... делим окружность на k дуг опорными точками..., а далее в цикле (пока не закончатся точки) по принипу: 1. Ищем дугу, которая делится нашими (не опорными) точками на самые длинные промежутки (дуги) 2. Добавляем к числу точек на этой дуге ещё одну В итоге получим k чисел, каждое соответствует числу точек на данной дуге... распределяем их равномерно по дуге (как и было сказано ранее) и ... готово :) Не получится ли, что все наши точки напихаются в один интервал между двумя опорными, а другие интервалы окажутся не заполненными подвижными точками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 16:07 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
AbstractionПрограмёрпропущено... может не оптимально, но просто.... делим окружность на k дуг опорными точками..., а далее в цикле (пока не закончатся точки) по принипу: 1. Ищем дугу, которая делится нашими (не опорными) точками на самые длинные промежутки (дуги) 2. Добавляем к числу точек на этой дуге ещё одну В итоге получим k чисел, каждое соответствует числу точек на данной дуге... распределяем их равномерно по дуге (как и было сказано ранее) и ... готово :)И Вам пирожок с верхней полки. 12861765 сорри... не заметил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 16:31 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85Програмёрможет не оптимально, но просто.... делим окружность на k дуг опорными точками..., а далее в цикле (пока не закончатся точки) по принипу: 1. Ищем дугу, которая делится нашими (не опорными) точками на самые длинные промежутки (дуги) 2. Добавляем к числу точек на этой дуге ещё одну В итоге получим k чисел, каждое соответствует числу точек на данной дуге... распределяем их равномерно по дуге (как и было сказано ранее) и ... готово :) Не получится ли, что все наши точки напихаются в один интервал между двумя опорными, а другие интервалы окажутся не заполненными подвижными точками? если один из интервалов будет в разы (десятки раз) больше других - то так и получится. НО... размещение точек в любом случае будет оптимальным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 16:33 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85, а как в Вашей задаче соотносятся число интервалов (Ni) и число точек (Nt) Nt >> Ni Nt ~ Ni Nt < Ni ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 16:43 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
ПрограмёрДимитрий85пропущено... Не получится ли, что все наши точки напихаются в один интервал между двумя опорными, а другие интервалы окажутся не заполненными подвижными точками? если один из интервалов будет в разы (десятки раз) больше других - то так и получится. НО... размещение точек в любом случае будет оптимальнымНе всегда оптимальным. Пусть есть две точки, интервалы 1 и 1.8, мы можем добавить две точки. Жадный алгоритм дает 0.5, 0.5, 0.9, 0.9 ("неидеальность" 0.8); Возможен вариант 1, 0.6, 0.6, 0.6 ("неидеальность" 0.6); Но отклонение жадного алгоритма от идеального решения легко оценивается сверху. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 16:55 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
GwaДимитрий85, а как в Вашей задаче соотносятся число интервалов (Ni) и число точек (Nt) Nt >> Ni Nt ~ Ni Nt < Ni ? Число опорных точек N>=1. Число подвижных точек n>=0. N и n, как правило, <= 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 17:01 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
И? Рассуждения-то о чём? Имеем, например, K точек (соответственно, отрезков/углов). Аппроксимируем. разностью квадратов, например. Накладываем новые N точек на полученную прямую... Случайно, причём. Чистый подсчёт в любом случае вернёт наименьшее отклонение. Проверять просто надо не на K=3 и N=3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 23:38 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Впрочем, учитывая нынешние вычислительные мощности... Можно сделать так: взять не N, а N^2 , или K*N , или min(K^2,N^2)*max(K,N) "новых" точек и отбросить затем самые близкие к "опорным", добившись оставшихся N... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 23:50 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
AbstractionПрограмёрпропущено... если один из интервалов будет в разы (десятки раз) больше других - то так и получится. НО... размещение точек в любом случае будет оптимальнымНе всегда оптимальным. Пусть есть две точки, интервалы 1 и 1.8, мы можем добавить две точки. Жадный алгоритм дает 0.5, 0.5, 0.9, 0.9 ("неидеальность" 0.8); Возможен вариант 1, 0.6, 0.6, 0.6 ("неидеальность" 0.6); Но отклонение жадного алгоритма от идеального решения легко оценивается сверху. да... согласен))) надо проверять на 1 шаг вперёд... то есть, мы стараемся добавить 1 к каждому интервалу, и там где промежутки между точками окажутся больше (при уже добавленной точке) - туда её и добавляем... и т.д. ))) при таком алгоритме и получим именно то, что надо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2012, 09:22 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Димитрий85Вычислять "равномерность" планирую по формуле - находим среднюю длину дуг окружности между соседними точками в каждой из комбинаций распределения. Далее считаем сумму абсолютных отклонений длин дуг от среднего значения. Боюсь, далеко вы с таким критерием не уедете. Простой пример: две точки брошены на окружность очень близко друг к другу, надо "равномерно" бросить ещё третью. Средняя длина, соответственно, окр/3, длина короткой дуги дана нам в ощущениях, а теперь вуаля - где бы мы ни разместили точку на большой дуге, "сумма абсолютных отклонений" будет одинакова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2012, 22:28 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
softwarerгде бы мы ни разместили точку на большой дуге, "сумма абсолютных отклонений" будет одинакова.Про что я и говорил... 12865806 Вообще, раз Димитрий85 сказал, что "n и N (как правило) <= 10" , то использование не "точных абсолютных расчетов", а именно "выборка из перекрывающего набора" будет более оптимальной. Сугубое ИМХО, конечно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2012, 23:55 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Добавление точек по одной не кажется оптимальным. Можно сразу посчитать, что "идеальный" угол между точками 2*PI/(N+n). Берем самую большую дугу между опорными точками и через равные углы ставим на нее round(N*длина_дуги1/2PI) точек. Взяли следующую по величине дугу и поместили на нее round(N_оставшееся * длина_дуги2 / оставшаяся_нераспределенной_часть_окружности) точек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 08:50 |
|
||
|
Равномерное распределение точек на окружности
|
|||
|---|---|---|---|
|
#18+
Оптимальный алгоритм зависит от критерия равномерности. Скажем, возьмём два критерия: 1. Для каждой пары соседних дуг строим отношение длин (большей к меньшей). Стремимся минимизировать сумму этих отношений. 2. Стремимся минимизировать среднеквадратичное отклонение. Думается мне, и распределение точек, и даже алгоритмы их поиска будут сильно разными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 10:32 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1342194]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
149ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 188ms |
| total: | 434ms |

| 0 / 0 |
