2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2, 3, 4, 5
 
 Re: Сжатые шары
Сообщение19.08.2014, 06:34 

(Оффтоп)

Ньютон одним яблоком обошёлся.


-- 19.08.2014, 06:44 --

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

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 09:28 
Аватара пользователя
Минимум периметра - это если считать, что задача про пену. Если она про пластилиновые шары (правда, здесь непонятки с формализацией) - тогда не так.

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 09:48 
По-моему, из объяснений ТС следует, что это задача про резиновые шарики, наполненные водой и прижатые прессом.

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 11:25 
А какой толщины резина? Если это воздушные шарики , то их упругость почти не влияет.

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 11:42 
Думаю, самое лучшее представление задачи для двумерного случая дает следующая картина. Берем один слой одинаковых капель жидкости и помещаем их между двумя жесткими параллельными неподвижными плоскостями, затем сжимаем это множество равномерно по периметру. Каждая капля становится правильной шестиугольной призмой (скругления углов не учитываем). В середине множества несколько капель сливается вместе, становясь многоугольной призмой. Рассекаем всю эту конструкцию посередине плоскостью и получаем двумерную картину. Площади сохраняются, периметры стремятся к минимуму, но при условии, что пустот между каплями нет.

Аналогия капель жидкости с резиновыми шариками, наполненными водой, не совсем точна.
"Пленка" поверхностного натяжения отличается от резиновой оболочки тем, что ее напряжение постоянно и не зависит от изменения площади поверхности.

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 14:21 
С каплями возможен только мысленный эксперимент - при соприкосновении они будут сливаться. Если резиновые кольца для кого-то старомодны, то их можно осовременить, заменив их на силиконовые кольца или шарики.

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 14:37 
Аватара пользователя
А в таком "шестиугольном" виде пожалуй что и можно попытаться порешать. Для дополнительной простоты оставим рёбра прямыми, лопнем парочку из них и будем варьировать вершинами, имея в виду минимизировать периметр. Думаю папа-карло какой-нибудь вполне подойдёт.

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 14:54 
Попробовал воспользоваться Surface evolver-ом для моделирования пены с фиксированными площадями ячеек в плоском случае. Вот что получается:


У вас нет доступа для просмотра вложений в этом сообщении.

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 16:07 
Аватара пользователя
Вы просто увеличиваете площадь центральной ячейки, оставляя её форму правильного шестиугольника. А нужно удалить стенку между двумя ячейками. Образуется одна восьмиугольная, площадь которой равна удвоенной площади исходной шестиугольной. Ну и дальше смотрим, как деформируются остальные. Surface Evolver такое может?
(Скачал его, сейчас установлю и попробую что-нибудь наваять).

-- 19.08.2014, 16:16 --

Sender, не могли бы вы выложить исходник?

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 16:37 
Да пожалуйста.
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <cstdlib>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    fstream out;
    if (argc==1)
    {
        printf("Parameter missing!\n");
         return EXIT_FAILURE;
    }
    int u=atoi(argv[1]);
   int m=u+1;
   int n=2*u;
    out.open ("bubbles.fe", std::fstream::in | std::fstream::out | std::fstream::app);
    int nv=1;
    out<<"string\nspace_dimension 2\n\n";
    out<<"parameter rad = 1.0\n\n";
    out<<"Vertices\n\n";
    int s=0;
    for (int i=0;i<m+1;i++,s+=(1+i%2))
    {
        for (int j=0;j<n+1;j++,nv++)
        {
            out<<nv<<" "<<j<<"*rad*cos(pi/6) ";
            double y=s;
            if (!(j%2))
            {
                if (i%2)
                     y-=0.5;
                else
                     y+=0.5;          
            }
            out<<y<<"*rad\n";
        }
    }
    out<<"\nEdges\n\n";    
    int ne=1;
    nv=1;
     for (int i=0;i<m+1;i++)
    {
        for (int j=0;j<n;j++,nv++,ne++)
            out<<ne<<" "<<nv<<" "<<nv+1<<"\n";
        nv-=n;
        for (int j=0;j<n+1;j++,nv++)
        {
            if ((i<m)&&((j%2)^(i%2)^1))
            {            
                out<<ne<<" "<<nv<<" "<<nv+n+1<<"\n";
                ne++;
            }
        }  
    }
   
    out<<"\nFaces\n\n";
    int nf=1;
    ne=1;
    int r=n/2;
     for (int i=0;i<m;i++)
     {
        if (!(i%2))
         for (int j=0;j<n;j+=2,nf++,ne+=2)
         {
                out<<nf<<" "<<ne<<" "<<ne+1<<" "<<ne+(n-j/2+1)<<" "<<-(ne+(n+r+2))<<" "<<-(ne+n+r+1)<<" "<<-(ne+(n-j/2))<<"\n";
        }
        else
                 for (int j=0;j<r-1;j++,nf++,ne+=2)
         {
                out<<nf<<" "<<ne<<" "<<ne+1<<" "<<ne+(n-j)<<" "<<-(ne+(n+r+1))<<" "<<-(ne+n+r)<<" "<<-(ne+n-j-1)<<"\n";
        }
         ne+=r+2-(i%2);
     }  
      out<<"\nBodies\n\n";
       for (int i=1;i<=nf-1;i++)
       {
            out<<i<<" "<<i<<" volume 3*sqrt(3)/2\n";
        }
    out.close();
    return EXIT_SUCCESS;
}
 

 
 
 
 Re: Сжатые шары
Сообщение19.08.2014, 16:55 
Аватара пользователя
Спасибо. Это какая-то отдельная программа, которую нужно отдельно компилировать? Просто я думал, что всё делается непосредственно в Surface Evolver.
Да и сам Surface Evolver у меня что-то не хочет работать. Почти на каждый .fe-файл из поставляемых в комплекте примеров ругается и аварийно завершает работу.

 
 
 
 Re: Сжатые шары
Сообщение20.08.2014, 07:00 
Осталось сравнить координаты ячеек после слияния, и задача решена. На первый взгляд, изменения затрагивают только несколько рядов ячеек, не распространяясь на всю структуру.

 
 
 
 Re: Сжатые шары
Сообщение20.08.2014, 08:01 
Aritaborian в сообщении #897415 писал(а):
Это какая-то отдельная программа, которую нужно отдельно компилировать?

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

 
 
 
 Re: Сжатые шары
Сообщение20.08.2014, 14:48 
Аватара пользователя
Спасибо. Мне будет проще сгенерировать в Mathematica ;-) Только нужно разобраться с форматом .fe. А ваш код мне в этом тоже поможет. Если бы с самого начала читал его внимательнее, сразу бы понял, что он делает, и не задавал бы глупых вопросов ;-)

 
 
 [ Сообщений: 74 ]  На страницу Пред.  1, 2, 3, 4, 5


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group