|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как вычислить диаметр кгруга описанный вокруг нескольких окружностей
Минск
Регистрация: 16.09.2006
Сообщений: 1,587
|
||
Просмотров: 32842
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
И где здесь программирование?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Тут надо алгоритм найти. А программировать я смогу
![]() Круг в круг помещать нельзя. Груги могут только соприкасаться. Окружностей может быть сколько угодно и разных диаметров.
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
|
|||
![]() |
|
||||
zamtmn, спасибо за наводку. Но всеравно не то. У меня окружности имеют разные диаметры, а на приведенной ссылке одинаковые.
Честно говоря думал задачка простая и я просто в школе плохо учился ... но тут походу простого решения не получится. Для чего все эти расчеты: делаю трассу кабеля. Есть полиэтиленовые трубы с внутренним диаметром 97.4мм Есть кабели с наружным диаметром (разные). Ну и идет проверка на заполнение трубы. Если кабели не входят, беру запас. Думал автоматизировать каким лиспом. Например вводить только диаметры кабелей а в результате получать диаметр заполнения трубы и необходимость запаса... В общем придется "на глазок" по старинке...
__________________
Поезд который устал от ржавого здравомыслия рельсов... Последний раз редактировалось Shoorup, 03.01.2011 в 16:26. |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Цитата:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Draw a minimum circle that contain select points
The minimum circle contain set of points, Thanks for Menzi's function
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
по-простому он называется "алгоритм заполнения рюкзака" http://en.wikipedia.org/wiki/Knapsack_problem |
|||
![]() |
|
||||
Цитата:
Если нужно действительно хорошее заполнение, можно пойти по пути генетических алгоритмов. Суть генетического алгоритма - постепенное улучшение имеющегося заполнения. Т.е. применительно к твоей задаче, берем все диаметры и заполняем самым простым способом - как пример в строчку выставляем самые большие диаметры, над ними следующей строкой меньшие, дальше еще меньшие итд, получая таким образом некую пирамиду. Полученное заполнение имеет место быть, но качество изначально неудовлетворительное. Потом пишем несколько простых программ, которые перестановками кругов, могут уплотнить общее заполнение, например, если одна строка слишком длинна, то можно убрать одну окружность и переместить на другую строку или если круги стоят квадратом, то сместить их в треугольник. Уверен, недолго поразмышляв о задаче с перестановками, можно придумать целую кучу различных простых алгоритмов, которые могут немного улучшить размещение кругов. Далее, имея несколько программ по улучшению общего замощения, можно их последовательно выполнять, каждый раз проверяя, есть ли изменения в диаметре описанной окружности и какова величина изменения от перестановок. Если программа улучшает картину, мы оставляем изменения, если не улучшает или ухудшает - то отменяем. Таким образом, мы последовательно применяем все программы, постоянно проверяя результат и когда после цикла применения всех программ, результат перестанет улучшаться или шаг улучшения будет меньше выбранной нами величины, можно заканчивать вычисления. Мне нравится такой подход тем, что действительно получается отличный результат и легкое улучшение программы (все алгоритмы довольно просты и по отдельности не занимают много места)...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Мы считаем, ...таем, ...таем! Регистрация: 12.08.2008
Europe
Сообщений: 763
|
Давай на бумаге:
1. Проводим три касательные до взаимного пересечения. 2. Вершины образовавшегося треугольника соединяем с центрами окружностей. Получим точки касания внутренних окружностей с внешней. 3. Определяем равноудаленную точку от точек касания окружностей. Это и будет центр внешней окружности.
__________________
The cat that walks by itself. |
|||
![]() |
|
||||
Цитата:
![]() VVA, не знаю как применить к данной задаче этот lisp...
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Shoorup, Я п посте #8 давал ссылки на лисп. Ты его смотрел?
На твоем примере поделил с помощью _divide круги точками и применил лисп из #8. Красный круг то, что он выдал
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Дал с дуру 360 точек на каждый круг
![]() ![]() Это все конечно хорошо хоть и не удобно но пользоваться можно. И все равно меня интересует геометрическое решение для данной задачки, ну или если хотите то просто формула. Цитата:
__________________
Поезд который устал от ржавого здравомыслия рельсов... Последний раз редактировалось Shoorup, 04.01.2011 в 19:17. |
||||
![]() |
|
||||
Регистрация: 21.07.2008
Луцьк
Сообщений: 179
|
склеить из кусков:
http://forum.dwg.ru/showpost.php?p=488808&postcount=135 а в следующем посте (136) описание |
|||
![]() |
|
||||
Мы считаем, ...таем, ...таем! Регистрация: 12.08.2008
Europe
Сообщений: 763
|
На рисунке засечки зеленым цветом. В САПР диаметр окружности методом научного тыка. Центр там-же. В предполагаемом месте касания окружностей.
__________________
The cat that walks by itself. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Цитата:
![]() Скажем минимизировать радиус при данном наборе окружностей или выполнить выборку из набора окружностей максимально заполнящих заданную окружность.
__________________
«Артиллерия не токмо грохот, но и наука!» Пётр I Последний раз редактировалось T-Yoke, 05.01.2011 в 08:54. |
||||
![]() |
|
||||
Цитата:
Но что самое удивительное таким способом находятся равноудаленные точки и не более. Описываемая окружность не проходит через эти точки (равноудаленные). Минимальный диаметр вообще 14мм, но пусть будет с запасом 10мм. Максимальный диаметр 44мм но может быть с перспективой до 70мм. Вообще максимальный диаметр описываемого круга не должен превышать 84,5мм. Но это для трубы которую я использую на данный момент. Вообще трубы в перспективе могут быть разные соответственно диаметр описываемого круга может тоже варьироваться... Количество кабелей в трубе нигде не регламентировано, но пусть будет не более 10. Цитата:
Лично я вчера пол вечера методом тыка пытался найти решение. Перепробовал и сечения и длины окружностей брать в зависимость и пытался найти тот злополучный центр... P.S. Позавчера эту задачку дал математику с ВО и с красным дипломом. Пол дня мучений и математик сдался.
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
1. Строит окружность заданного диаметра касательную к одной или двум другим окружностям. 2. "Прилепляет" готовую окружность к одной или двум другим окружностям. 3. Проверяет окружности на пересечение (взаимопроникновение). Все команды несложные. Первые две можно сделать на основе стандартной _CIRCLE или написать с нуля. Они могут сильно облегчить ручную компоновку внутри трубы-футляра, так что желание дальнейшей автоматизации может пропасть за ненадобностью ![]()
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
![]() |
|
||||
Регистрация: 29.10.2004
СПб
Сообщений: 16,373
|
Shoorup, а если попробовать так:
1. в пространстве модели строим окружности 2. в пространстве листа строим квадратный видовой экран. изображение вписывается в квадрат по центру.... PS Круглый видовой экран работает некорректно. слегка подрезает изображение, хотя центр тоже верно находит. (AutoCAD 2011) Последний раз редактировалось Хмурый, 05.01.2011 в 14:21. |
|||
![]() |
|
||||
Pastor, файл с "простыми действиями" в студию!
![]() Цитата:
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
Проанализируйте сами, какие ещё действия вы чаще всего совершаете расставляя окружности вручную и попробуйте их слегка автоматизировать (или хотя бы точно описать, если расчитываете на помощь программистов с форума). Будет четкое ТЗ, будет и "комплект функций, облегчающих заполнение футляра окружностями".
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
Кстати по второму варианту я где-то видел игрушку в которой нужно круги гонять внутри большой окужности... Если дополнить ее возможностью добавления кругов, то получится очень даже наглядно... ![]() |
|||
![]() |
|
||||
Цитата:
А можно провести эксперемент: связать их крепко изолентой - диаметр определится сразу. ![]()
__________________
С уважением sbi |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
решение для трех окружностей тут:
наружняя (искомая) окружность: http://mathworld.wolfram.com/OuterSoddyCircle.html внутренняя окружность: http://mathworld.wolfram.com/SoddyCircles.html dyr Описаный в #15 способ не верен Последний раз редактировалось zamtmn, 05.01.2011 в 22:13. |
|||
![]() |
|
||||
Регистрация: 29.10.2004
СПб
Сообщений: 16,373
|
Цитата:
Достаточно построить окружность по трём точкам, в качестве точек выбрать три касательных к окружностям на внешних частях. Штатный AutoCAD'овский макрос ^C^C_circle _3p _tan \_tan \_tan \ Находится в Меню->Рисовать->Окружность-> |
|||
![]() |
|
||||
Мы считаем, ...таем, ...таем! Регистрация: 12.08.2008
Europe
Сообщений: 763
|
У Outer Soddy Circle решение алгебраическое. Я решал геометрически, с помощью линейки и циркуля. Как было сказано в #13: -На бумаге.
__________________
The cat that walks by itself. |
|||
![]() |
|
||||
Регистрация: 29.10.2004
СПб
Сообщений: 16,373
|
|
|||
![]() |
|
||||
Регистрация: 29.10.2004
СПб
Сообщений: 16,373
|
Рyslan, есть две касательных друг-другу окружности диаметром 100 мм с центром в точке А и диаметром 80 мм с центром в точке Б.
Надо постороить касательную к ним окружность диаметром 50 мм. 1. Строим окружность с центром в точке А и диаметром 100+50=150 мм 2. Строим окружность с центром в точке Б и диаметром 80+50=130 мм 3. Находим точку пересечения В этих окружностей. 4. Строим окружность диаметром 50 мм с центром в точке В Offtop: надеюсь, радиусы сам сосчитаешь... |
|||
![]() |
|
||||
Это будут точки касания описанного треугольника но не круга. Я писал про это в #25 посте. Пока самое быстрое и точное решение нашел Хмурый. Но это для трех окружностей. Для большего числа окружностей еще не нашел способ...
Кстати для большего числа окружностей можно использовать макрос Хмурого но встает другая проблема - расположить кабели так чтобы они занимали минимально места. ![]()
__________________
Поезд который устал от ржавого здравомыслия рельсов... Последний раз редактировалось Shoorup, 06.01.2011 в 11:03. |
||||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Хмурый, ты гений! Все, я понял почему так складываются радиусы. я и сам вначале складывал их. только не допер что нужно окружностями центр найти. аж стыдно стало, небось это из школьного курса
Последний раз редактировалось Рyslan, 06.01.2011 в 12:30. |
|||
![]() |
|
||||
Цитата:
Повторюсь, самое простое, это определиться в количестве необходимых подпрограмм и по ним написать общую программу, решающую задачу целиком. Поиск абсолютного решения, для этой задачи, при условии размещения большого количества окружностей, может отнять слишком много машинного времени. Тебе необходимо найти алгоритм, который будет давать удовлетворительное заполнение и быстро. ps. Уже давно хотел спросить, а монтажникам ты тоже даешь карту заполнения трубы кабелями или это необходимо только для твоих внутренних расчетов? И еще, как монтажники фиксируют кабели по длине, перед укладкой в трубу? При максимальной упаковке, стоит только двум из трех кабелей перекрутиться - поменяться местами, и будет либо повреждение изоляции, либо трубы...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Цитата:
![]() Для справок. Как происходит расчет: Есть инструкция в которой прописано что Цитата:
Отсюда и весь расчет. Практически никто не будет делать раскладку кабеля и по идее расчет должен быть примерный. Просто я думал возможно автоматизировать его не выстраивая окружности. Тупо дать диаметры окружностей и на выходе получить с каким заполнением проходит или не проходит. Если труба почти битком, то закладывается труба запасная. Если места много то естественно не закладывается. Тут больше спортивного интереса чем практической пользы ![]() ![]() Вот AutoCAD умеет строить окружность по трем точкам (касательным). А как на бумаге эти сделать? ![]() ![]() ![]()
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Мы считаем, ...таем, ...таем! Регистрация: 12.08.2008
Europe
Сообщений: 763
|
Цитата:
И вот, думаю окончательный вариант:
__________________
The cat that walks by itself. Последний раз редактировалось dyr, 06.01.2011 в 17:30. |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Цитата:
http://collection.edu.yar.ru/dlrstor...0598993517.htm |
|||
![]() |
|
||||
Цитата:
![]()
__________________
«Артиллерия не токмо грохот, но и наука!» Пётр I |
||||
![]() |
|
||||
Мы считаем, ...таем, ...таем! Регистрация: 12.08.2008
Europe
Сообщений: 763
|
Паралельные в подобном случае тоже не паралельны. Препод хороший. Меня такая-же учила.
__________________
The cat that walks by itself. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Цитата:
Задача о нахождении окружности касательной к трем другим (не обязательно касательных между собой) решается при помощи построений и без всякой алгебры. Автор геометрического решения - Апполоний Пергский, знакомьтесь. |
|||
![]() |
|
||||
Мы считаем, ...таем, ...таем! Регистрация: 12.08.2008
Europe
Сообщений: 763
|
Цитата:
__________________
The cat that walks by itself. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Вот хоть плохенькое, но тем не менее решение на Лиспе (в духе сообщения Хмурого).
Вариант построения окружности (а их может быть до 8-ми) зависит от положения прицела при выборе объектов: Код:
Последний раз редактировалось Li6-D, 12.02.2011 в 21:51. Причина: от нечего делать |
|||
![]() |
|
||||
новая версия, обрабатывает все случаи построения минимальной описанной окружности вокруг трех, взаимно-касающихся и не вложенных окружностей.
Код:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ Последний раз редактировалось Елпанов Евгений, 12.01.2011 в 14:43. Причина: add new cod... |
||||
![]() |
|
||||
Регистрация: 27.01.2011
Сообщений: 1
|
Нашлась формула для оценки диаметра описывающего круга
D=(1.2...1.3)*sqrt(n)*d. n - общее количество кругов (жил, проводников, труб); d - среднее арифметическое значение всех диаметров. Смотрите ГОСТ 23586-96 http://www.rgost.ru/index.php?option...2069&Itemid=39 или http://www.**************/text/%D0%93...A2%2023586-96/ раздел - Б.3 Расчет диаметра жгута по формуле Последний раз редактировалось ucf, 27.01.2011 в 21:22. Причина: дополнение |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Эта оценочная формула иногда может привести к парадоксальным результатам.
Например, есть одна окружность диаметром 1601 и 399 окружностей диаметром 1. Среднее арифметическое значений диаметров: (1*1601+399*1)/400=5. Диаметр описывающего круга по формуле: 1.3*sqrt(400)*5=130. А на самом деле должен быть в диапазоне между 1602 и 1603. Ошибка больше чем на порядок. Последний раз редактировалось Li6-D, 27.01.2011 в 22:52. |
|||
![]() |
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,193
|
Посмотрите прогу "Канал 2007"
http://www.cleper.ru/programs/download/Channel.zip Там и алгоритм хорошо описан. Li6-D> все такого рода прикидочные формулы имеют границы применимости, задаваемые здравым смыслом и практикой Последний раз редактировалось kp+, 29.01.2011 в 14:36. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Цитата:
А здравомыслящие и опытные люди посчитали и добавили свой лапоть. Последний раз редактировалось Li6-D, 28.01.2011 в 22:40. |
|||
![]() |
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,193
|
Li6-D, ты за смайлик обиделся? Ну извини, я его уже убрал.
Цитата:
Но оно неприменимо к прокладке кабелей, которые надо еще протащить в канале, далеко не всегда прямолинейном. Цитата:
В соответствии с тем, что написал автор темы в посте 6, здесь надо на другой документ ссылаться, "Инструкция по монтажу электропроводок в трубах" А то! ![]() http://alexeyspivak.narod.ru/ Последний раз редактировалось kp+, 29.01.2011 в 15:00. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
kp+, спасибо за информацию, эта программа многим пригодится.
А формулой можно пользоваться лишь в случае, если среднее арифметическое заменить средним квадратичным (если кабели разных диаметров, охватывающий диаметр увеличится со сравнению с формулой из ГОСТ). Тогда коэффициент заполненности канала будет в диапазоне от 0.59 (1.3^-2) до 0.69 (1.2^-2). Это довольно плотная укладка, для жгута пойдет, а для кабельного канала - нет. Не просто с ограничениями по применимости формулы: верхний предел заполненности не достижим для случаев укладки от 2 до 6 одинаковых кабелей, а нижний - для двух одинаковых кабелей. Вывод Не пользуйтесь этой формулой из ГОСТ. В данном случае простота хуже воровства. И помните о горькой судьбе блока космических аппаратов "Глонасс-М" №43, там виновата неправильная формула. Последний раз редактировалось Li6-D, 30.01.2011 в 15:04. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Еще одно решение от Lee Mac'a: минимальная окружность, описанная вокруг облака точек.
Minimum Enclosing Circle ![]() http://en.wikipedia.org/wiki/Smallest_circle_problem
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 19.10.2011 в 14:23. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Для интересующихся выложил описание алгоритма Li6-D:MinC выше для нахождения радиуса и центра минимального круга, покрывающего несколько точек плоскости. Для сомневающихся - доказательство корректности (без формул!)
[IMG]http://s009.***********/i308/1201/9f/2cb9b45a207e.jpg[/IMG] Последний раз редактировалось Li6-D, 06.01.2012 в 22:15. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Небольшая прога для решения задачи Аполлония:
Код:
Не хотел усложнять код, поэтому остались нештатные ситуации когда: 1) два исходных круга касаются друг друга внутренним (внешним) образом, причем их радиусы одного (разного) знаков; 2) один искомый круг имеет нулевую кривизну, то есть вырождается в прямую. В эти случаях, как правило, будет ошибка связанная с делением на нуль. Пробничек: Код:
Последний раз редактировалось Li6-D, 14.05.2013 в 22:20. Причина: теория здесь: http://mathhelpplanet.com/viewtopic.php?f=28&t=21960 |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Rotate нескольких объектов вокруг своей оси | Silavsale | AutoCAD | 21 | 11.06.2013 11:59 |