Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Занимательная геометрия
 
 автор: DJ Paltus   (26.08.2011 в 13:08)   письмо автору
 
 

Дизайнёр озадачил.
Есть окружность определенного радиуса R и несколько окружностей поменьше радиуса R1, которые в хаотичном порядке надо в нее - в большую - вписать. Мелких может быть от 1 до, скажем, 20, и их размер предполагает, что они в окружность поместятся, не налезая друг на друга.
Пробовал делить круг на сектора по количеству мелких и случайно бить в точку сектора, но как-то не заладилось: я не умею определить, принадлежит ли координата данному сектору, и уж совсем не знаю, как запретить кружочкам пересекаться.
Наверняка это обычная задача для третьего курса техвуза, может, кто в курсе, как такое победить?

  Ответить  
 
 автор: Гость   (26.08.2011 в 13:48)   письмо автору
 
   для: DJ Paltus   (26.08.2011 в 13:08)
 

Кол-во окружностей и их радиус заранее известны? Я так понимаю тут сложность не с том чтоб просто "вписать" их все в окружность, а в том что бы их более-менее равноудалено расположить?

  Ответить  
 
 автор: DJ Paltus   (26.08.2011 в 13:52)   письмо автору
 
   для: Гость   (26.08.2011 в 13:48)
 

Да, все параметры известны заранее.
И при этом чтобы все выглядело как небрежно рассыпанное.

  Ответить  
 
 автор: cheops   (26.08.2011 в 13:57)   письмо автору
 
   для: DJ Paltus   (26.08.2011 в 13:52)
 

И радиусы заранее заданы?

  Ответить  
 
 автор: DJ Paltus   (26.08.2011 в 14:54)   письмо автору
 
   для: cheops   (26.08.2011 в 13:57)
 

И радиусы. И при этом известно, что заданные радиусы позволяют вписать все мелкие круги в большой без того, чтобы их границы пересекались

  Ответить  
 
 автор: Valick   (26.08.2011 в 15:10)   письмо автору
 
   для: DJ Paltus   (26.08.2011 в 14:54)
 

мне кажется нужно исходить из того, что расстояние между центрами трех прилегающих вписанных кругов это равносторонний треугольник стороны которого равны диаметру вписанного круга центром для внешнего круга, будет центр треугольника
для четырех вписанных кругов оптимальным на мой взгляд будет квадрат
для пяти пока хз))
для семи ромашка))
че-то я загнался)))

  Ответить  
 
 автор: cheops   (26.08.2011 в 15:52)   письмо автору
 
   для: Valick   (26.08.2011 в 15:10)
 

Я так понял нет цели добиться наиболее плотной упаковки, достаточно вписать круги любым способом, не обязательно самым плотным.

  Ответить  
 
 автор: Valick   (26.08.2011 в 16:55)   письмо автору
 
   для: cheops   (26.08.2011 в 15:52)
 

так мы не ищем легких путей :)

  Ответить  
 
 автор: DJ Paltus   (26.08.2011 в 16:58)   письмо автору
 
   для: Valick   (26.08.2011 в 16:55)
 

Это еще неизвестно, какой из них легкий. И задача вписания треугольников в принципе не очень-то отличается по сложности от задачи вписания кружочков )

  Ответить  
 
 автор: Valick   (26.08.2011 в 17:05)   письмо автору
 
   для: DJ Paltus   (26.08.2011 в 16:58)
 

это ответ на вопрос
и уж совсем не знаю, как запретить кружочкам пересекаться
___
достал циркуль... сижу рисую))
красиво вписываются пока только 3, 4, 7, 19

  Ответить  
 
 автор: cheops   (26.08.2011 в 13:55)   письмо автору
 
   для: DJ Paltus   (26.08.2011 в 13:08)
 

Да, нет... задача посерьезнее, общего решения, насколько известно не имеет... задачей "наилучшей упаковки банок пива" не брезгуют и профессора, вынося их в качестве темы на конференциях.
Дизайнеру скорее всего нужно красивое решение, в этом случае пускай сам рисует. Если вам, чисто с программистко-прогматической позиции интересно, можно методом последовательных приближений попытаться её решить, тупо перебирая расстояния между центрами и отслеживая, чтобы оно не превышало сумму радиусов окружностей. А потом дергайте радиусы и включайте оптимизационный поиск с критерием максимальной площади вписанных окружностей. Он конечно свалиться в какую-нибудь локальную яму, далекую от идеала, но решение вы получите, не лучшее, но хорошее.

  Ответить  
 
 автор: DJ Paltus   (26.08.2011 в 14:57)   письмо автору
 
   для: cheops   (26.08.2011 в 13:55)
 

Боюсь, на времени загрузки страницы это скажется очень и очень пагубно. Наверное, я пойду иначе: "нарисую" спираль с шагом большим радиуса мелких кругов и по ней случайно раскидаю их центры.
Пошел вспоминать начерталку.

  Ответить  
 
 автор: AlexSol   (26.08.2011 в 16:31)   письмо автору
 
   для: DJ Paltus   (26.08.2011 в 13:08)
 

сделайте себе ~30 массивов с координатами и радиусами и включайте случайный из них.

  Ответить  
 
 автор: DJ Paltus   (26.08.2011 в 16:59)   письмо автору
 
   для: AlexSol   (26.08.2011 в 16:31)
 

Тоже верно. Наверное, так и поступлю. Проще только послать дизайнера к лешему и сделать жесткий шаблон.

  Ответить  
 
 автор: Кузнецов М.В.   (27.08.2011 в 00:46)   письмо автору
 
   для: DJ Paltus   (26.08.2011 в 16:59)
 

>Тоже верно. Наверное, так и поступлю. Проще только послать дизайнера к лешему и сделать жесткий шаблон.

Так и сделайте :) Самое верное решение. Почти не шутка.
Если совсем серьезно. Такие задачи - серьезный НИОКР ранее были. Они решены. В числе прочего для нужд оборонки. Для дорожного строительства. Когда лещадка (лещадность щебня) должна быть не ниже установленной нормы. Для много ещё каких отраслей. Пусть Ваш дизайнер включит мозги и прочитает нужные книги. Хотя бы учебник для металлургов. А если не поймет почему для металлургов - гнать в шею.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования