| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как вычислить диаметр кгруга описанный вокруг нескольких окружностей

Как вычислить диаметр кгруга описанный вокруг нескольких окружностей

Ответ
Поиск в этой теме
Непрочитано 03.01.2011, 11:59 #1
Как вычислить диаметр кгруга описанный вокруг нескольких окружностей
Shoorup
 
Минск
Регистрация: 16.09.2006
Сообщений: 1,587

Итак имеем несколько окружностей произвольного диаметра. Например 17,24,36,17мм Необходимо разместить эти окружности вплотную так, чтобы описанная окружность вокруг них была минимального диаметра. Этот диаметр и нужно вычислить. Окружности могут располагаться на плоскости произвольно.
Задачка явно школьная но у меня чего-то на ум ничего не приходит как такое можно вычислить.
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 03.01.2011 в 15:11.
Просмотров: 30914
 
Непрочитано 03.01.2011, 12:15
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835


И где здесь программирование?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.01.2011, 13:40
#3
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


24 в 36, 17 в 24 -> d = 36
gomer вне форума  
 
Автор темы   Непрочитано 03.01.2011, 14:04
#4
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
И где здесь программирование?
Тут надо алгоритм найти. А программировать я смогу
Круг в круг помещать нельзя. Груги могут только соприкасаться. Окружностей может быть сколько угодно и разных диаметров.
Миниатюры
Нажмите на изображение для увеличения
Название: Model.jpg
Просмотров: 2584
Размер:	7.2 Кб
ID:	50990  
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 03.01.2011, 14:06
1 | #5
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


http://mathworld.wolfram.com/CirclePacking.html
zamtmn вне форума  
 
Автор темы   Непрочитано 03.01.2011, 15:02
#6
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


zamtmn, спасибо за наводку. Но всеравно не то. У меня окружности имеют разные диаметры, а на приведенной ссылке одинаковые.

Честно говоря думал задачка простая и я просто в школе плохо учился ... но тут походу простого решения не получится.
Для чего все эти расчеты: делаю трассу кабеля. Есть полиэтиленовые трубы с внутренним диаметром 97.4мм Есть кабели с наружным диаметром (разные). Ну и идет проверка на заполнение трубы. Если кабели не входят, беру запас. Думал автоматизировать каким лиспом. Например вводить только диаметры кабелей а в результате получать диаметр заполнения трубы и необходимость запаса...
В общем придется "на глазок" по старинке...
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 03.01.2011 в 16:26.
Shoorup вне форума  
 
Непрочитано 03.01.2011, 16:32
#7
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Цитата:
zamtmn, спасибо за наводку. Но всеравно не то. У меня окружности имеют разные диаметры, а на приведенной ссылке одинаковые.
Насколько знаю в общем случае задача не решается и совсем не школьная. там снизу много ссылок - есть что почитать))
zamtmn вне форума  
 
Непрочитано 03.01.2011, 16:33
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Draw a minimum circle that contain select points
The minimum circle contain set of points, Thanks for Menzi's function
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.01.2011, 18:01
#9
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Shoorup Посмотреть сообщение
Тут надо алгоритм найти. А программировать я смогу
Круг в круг помещать нельзя. Груги могут только соприкасаться. Окружностей может быть сколько угодно и разных диаметров.
Ну если сможешь, держи алгоритм
по-простому он называется "алгоритм заполнения рюкзака"
http://en.wikipedia.org/wiki/Knapsack_problem
Олег (jr.) вне форума  
 
Непрочитано 04.01.2011, 00:07
#10
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Shoorup Посмотреть сообщение
Честно говоря думал задачка простая и я просто в школе плохо учился ... но тут походу простого решения не получится.
Для чего все эти расчеты: делаю трассу кабеля. Есть полиэтиленовые трубы с внутренним диаметром 97.4мм Есть кабели с наружным диаметром (разные). Ну и идет проверка на заполнение трубы. Если кабели не входят, беру запас. Думал автоматизировать каким лиспом. Например вводить только диаметры кабелей а в результате получать диаметр заполнения трубы и необходимость запаса...
В общем придется "на глазок" по старинке...
Чтож ты сразу не сказал, что решение нужно не абсолютное и даже не важно знать, на сколько % решение отстоит от абсолютного? Если тебе нужно просто хорошее решение, то можно использовать любой алгоритм решения таких задач! Самый простой - жадный алгоритм, берем самые большие (одинаковые) диаметры и располагаем их наиболее компактно треугольником и далее приращивая по кругу треугольники. Потом берем следующий по размеру диаметр и проверяем возможность вставки внутрь получившихся треугольников, вставляем внутрь, остальные приращиваем снаружи. Потом берем следующий по размеру диаметр и все заново повторяем... В общем случае, жадный алгоритм один из самых простых в реализации и дает довольно хорошее заполнение в самых различных областях. Возможно, исходя из свойств твоих диаметров, ты сможешь улучшить алгоритм, применительно только к своей задаче.

Если нужно действительно хорошее заполнение, можно пойти по пути генетических алгоритмов. Суть генетического алгоритма - постепенное улучшение имеющегося заполнения. Т.е. применительно к твоей задаче, берем все диаметры и заполняем самым простым способом - как пример в строчку выставляем самые большие диаметры, над ними следующей строкой меньшие, дальше еще меньшие итд, получая таким образом некую пирамиду. Полученное заполнение имеет место быть, но качество изначально неудовлетворительное. Потом пишем несколько простых программ, которые перестановками кругов, могут уплотнить общее заполнение, например, если одна строка слишком длинна, то можно убрать одну окружность и переместить на другую строку или если круги стоят квадратом, то сместить их в треугольник. Уверен, недолго поразмышляв о задаче с перестановками, можно придумать целую кучу различных простых алгоритмов, которые могут немного улучшить размещение кругов. Далее, имея несколько программ по улучшению общего замощения, можно их последовательно выполнять, каждый раз проверяя, есть ли изменения в диаметре описанной окружности и какова величина изменения от перестановок. Если программа улучшает картину, мы оставляем изменения, если не улучшает или ухудшает - то отменяем. Таким образом, мы последовательно применяем все программы, постоянно проверяя результат и когда после цикла применения всех программ, результат перестанет улучшаться или шаг улучшения будет меньше выбранной нами величины, можно заканчивать вычисления.
Мне нравится такой подход тем, что действительно получается отличный результат и легкое улучшение программы (все алгоритмы довольно просты и по отдельности не занимают много места)...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 04.01.2011, 12:03
#11
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™



Не могу сообразить как найти центр и как узнать диаметр красного круга. Всю голову сломал
Миниатюры
Нажмите на изображение для увеличения
Название: Model2.gif
Просмотров: 2847
Размер:	11.8 Кб
ID:	51008  
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 04.01.2011, 13:08
#12
dyr

Мы считаем, ...таем, ...таем!
 
Регистрация: 12.08.2008
Europe
Сообщений: 763


Это милиментарно. В Corel.
__________________
The cat that walks by itself.
dyr вне форума  
 
Автор темы   Непрочитано 04.01.2011, 14:39
#13
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


А на бумаге?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 04.01.2011, 15:10
#14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Shoorup Посмотреть сообщение
Не могу сообразить как найти центр
Центр массы, средняя точка, пересечение медиан треугольника.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 04.01.2011, 15:27
#15
dyr

Мы считаем, ...таем, ...таем!
 
Регистрация: 12.08.2008
Europe
Сообщений: 763


Давай на бумаге:
1. Проводим три касательные до взаимного пересечения.
2. Вершины образовавшегося треугольника соединяем с центрами окружностей. Получим точки касания внутренних окружностей с внешней.
3. Определяем равноудаленную точку от точек касания окружностей. Это и будет центр внешней окружности.
__________________
The cat that walks by itself.
dyr вне форума  
 
Автор темы   Непрочитано 04.01.2011, 16:46
#16
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Цитата:
Сообщение от dyr Посмотреть сообщение
Давай на бумаге:
1. Проводим три касательные до взаимного пересечения.
2. Вершины образовавшегося треугольника соединяем с центрами окружностей. Получим точки касания внутренних окружностей с внешней.
3. Определяем равноудаленную точку от точек касания окружностей. Это и будет центр внешней окружности.
Если не сложно изобразите в AutoCADе. Что-то у меня не сходится
VVA, не знаю как применить к данной задаче этот lisp...
Вложения
Тип файла: dwg
DWG 2004
1.dwg (36.4 Кб, 2260 просмотров)
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 04.01.2011, 17:45
#17
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Shoorup, Я п посте #8 давал ссылки на лисп. Ты его смотрел?
На твоем примере поделил с помощью _divide круги точками и применил лисп из #8. Красный круг то, что он выдал
Вложения
Тип файла: dwg
DWG 2004
1.dwg (37.6 Кб, 2268 просмотров)
Тип файла: lsp The minimum circle contain set of points.lsp (9.5 Кб, 73 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 04.01.2011, 18:17
#18
dyr

Мы считаем, ...таем, ...таем!
 
Регистрация: 12.08.2008
Europe
Сообщений: 763


Вот на бумаге:

Рисунки по пунктам в #16. Равноудаленная точка определяется засечкой циркулем. С помощью САПР - построением одинаковых окружностей.
Вложения
Тип файла: pdf Кола.pdf (23.9 Кб, 213 просмотров)
__________________
The cat that walks by itself.
dyr вне форума  
 
Автор темы   Непрочитано 04.01.2011, 18:32
#19
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Дал с дуру 360 точек на каждый круг)) Программа начала с ума сходить
Это все конечно хорошо хоть и не удобно но пользоваться можно.

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

Цитата:
Равноудаленная точка определяется засечкой циркулем. С помощью САПР - построением одинаковых окружностей.
А центр этих окружностей где? А радиус этих окружностей? Что-то я под вечер туплю...
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 04.01.2011 в 19:17.
Shoorup вне форума  
 
Непрочитано 04.01.2011, 19:28
#20
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


склеить из кусков:
http://forum.dwg.ru/showpost.php?p=488808&postcount=135
а в следующем посте (136) описание
Vov.Ka вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как вычислить диаметр кгруга описанный вокруг нескольких окружностей

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Rotate нескольких объектов вокруг своей оси Silavsale AutoCAD 21 11.06.2013 11:59