Разбирая старые архивы, я обнаружил несколько задачек, которые я когда-то ставил сам себе и пытался их решить. Про две из них я уже рассказал в статьях на Хабре — это задача о колебании свободно висящей цепочки и задача о форме поверхности вращающейся жидкости. Сегодня я хочу рассказать о еще одной задачке. Не знаю, задумывался ли кто-нибудь ранее о форме капли, которая висит на потолке в душе, но меня этот вопрос заинтересовал и я нашел ответ на него, который приведен под катом.
Для того, что бы определить форму капли, необходимо выбрать подходящую систему координат. Благодаря осевой симметрии возьмем цилиндрическую систему координат с осью y, проходящей через ось симметрии капли, причем нулевая координата будет совпадать с уровнем потолка, как показано на рисунке в виде разреза капли.
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/89856/89856_900.png)
Очевидно, что капля висит ниже потолка и, стало быть, все координаты должны быть меньше или по крайней мере равны нулю. Для того, чтобы определить форму поверхности, заметим, что в этой задаче необходимо рассматривать две силы — силу тяжести и силу поверхностного натяжения. Равновесие этих двух сил и определяет форму капли.
Найдем уравнение для этих сил, приравняем их и из этого уравнения определим искомую поверхность. Начнем с сил поверхностного натяжения. Мысленно вырежем из капли цилиндр на расстоянии r и малой толщиной delta r. Жидкость, находящаяся в этом цилиндре удерживается силой поверхностного натяжения. Сила поверхностного натяжения T является касательной к поверхности, однако, нам необходимо знать силу по оси y, которая равна T умноженной на синус угла наклона поверхности к потолку т.е. оси r. Как известно, производная y по r равна тангенсу этого угла
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/90338/90338_900.png)
Чтобы найти синус угла, выразим тангенс следующим образом
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/90383/90383_900.png)
Откуда
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/90637/90637_900.png)
Таким образом, интересующая нас сила равна
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/91115/91115_900.png)
Как известно, сила поверхностного натяжения равна коэффициенту поверхностного натяжения альфа умноженного на длину края поверхности
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/91211/91211_900.png)
В нашем случае для цилиндра имеем два края — один внутренний и один внешний. Причем сила поверхностного натяжения для внутреннего края будет тянуть вниз, а для внешнего края вверх. Разница между ними и будет удерживать жидкость в этом цилиндре. Напишем формулу разницы сил для внешнего и внутреннего краев
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/91465/91465_900.png)
Вынесем общую часть за скобки и разложим функцию по малому параметру
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/91649/91649_900.png)
В знаменателе раскроем квадрат суммы и удалим слагаемое второго порядка малости
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/92096/92096_900.png)
Преобразуем знаменатель
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/92316/92316_900.png)
Сделаем два корня в знаменателе
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/92529/92529_900.png)
За счет малости параметра, избавимся от корня во втором множителе в знаменателе
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/92923/92923_900.png)
Также за счет малости параметра перетащим второй множитель из знаменателя в числитель
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93080/93080_900.png)
Раскроем скобки, приведем подобные и избавимся от слагаемых второго порядка малости
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93388/93388_900.png)
Приведем к общему знаменателю
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93545/93545_900.png)
Еще раскроем скобки, убрав слагаемые второго порядка малости
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93881/93881_900.png)
Окончательно получим
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93981/93981_900.png)
Полученная сила поверхностного натяжения должна уравновешивать вес жидкости в цилиндре, с силой тяжести равной
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/94386/94386_900.png)
где ро — плотность жидкости, а g — ускорение свободного падения.
Здесь необходимо поставить знак минус, поскольку функция y отрицательна.
Введем параметр
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/94642/94642_900.png)
Приравняв силу поверхностного натяжения к силе тяжести и сократив общие множители, получим
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/94829/94829_900.png)
Выразим явно вторую производную
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/95011/95011_900.png)
решить это уравнение в явном виде не представляется возможным, однако, можно решить задачу Коши для этого уравнения численными методами. Заметим, что для дифференциального уравнения второго порядка необходимо знать два начальных условия. В нашем случае можно задать начальный размер капли (то есть расстояние от потолка до ее нижней части, а также учесть, что при r равном нулю, первая производная тоже равна нулю). Для численного решения данного уравнения я написал следующую программу.
При задании различных начальных условий (расстояния от потолка до нижней части капли) в миллиметрах, были построены следующие профили поверхности.
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/95326/95326_900.png)
Эта программа кроме функции y выдает еще линии уровня по которым можно построить 3D модель капли. Эту задачку я оставляю читателям.
Еще один вопрос, который заинтересовал меня в связи с этой задачей — как меняется объем капли в зависимости от вышеназванного расстояния до нижней ее части. Численное интегрирование дает следующий результат.
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/95600/95600_900.png)
Интересно, что оказывается существует некоторый максимум объема в районе высоты в 5 мм, который поверхностное натяжение может удерживать. На этом мое исследование этой задачи заканчивается, пишите свои соображения в комментариях.
Для того, что бы определить форму капли, необходимо выбрать подходящую систему координат. Благодаря осевой симметрии возьмем цилиндрическую систему координат с осью y, проходящей через ось симметрии капли, причем нулевая координата будет совпадать с уровнем потолка, как показано на рисунке в виде разреза капли.
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/89856/89856_900.png)
Очевидно, что капля висит ниже потолка и, стало быть, все координаты должны быть меньше или по крайней мере равны нулю. Для того, чтобы определить форму поверхности, заметим, что в этой задаче необходимо рассматривать две силы — силу тяжести и силу поверхностного натяжения. Равновесие этих двух сил и определяет форму капли.
Найдем уравнение для этих сил, приравняем их и из этого уравнения определим искомую поверхность. Начнем с сил поверхностного натяжения. Мысленно вырежем из капли цилиндр на расстоянии r и малой толщиной delta r. Жидкость, находящаяся в этом цилиндре удерживается силой поверхностного натяжения. Сила поверхностного натяжения T является касательной к поверхности, однако, нам необходимо знать силу по оси y, которая равна T умноженной на синус угла наклона поверхности к потолку т.е. оси r. Как известно, производная y по r равна тангенсу этого угла
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/90338/90338_900.png)
Чтобы найти синус угла, выразим тангенс следующим образом
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/90383/90383_900.png)
Откуда
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/90637/90637_900.png)
Таким образом, интересующая нас сила равна
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/91115/91115_900.png)
Как известно, сила поверхностного натяжения равна коэффициенту поверхностного натяжения альфа умноженного на длину края поверхности
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/91211/91211_900.png)
В нашем случае для цилиндра имеем два края — один внутренний и один внешний. Причем сила поверхностного натяжения для внутреннего края будет тянуть вниз, а для внешнего края вверх. Разница между ними и будет удерживать жидкость в этом цилиндре. Напишем формулу разницы сил для внешнего и внутреннего краев
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/91465/91465_900.png)
Вынесем общую часть за скобки и разложим функцию по малому параметру
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/91649/91649_900.png)
В знаменателе раскроем квадрат суммы и удалим слагаемое второго порядка малости
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/92096/92096_900.png)
Преобразуем знаменатель
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/92316/92316_900.png)
Сделаем два корня в знаменателе
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/92529/92529_900.png)
За счет малости параметра, избавимся от корня во втором множителе в знаменателе
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/92923/92923_900.png)
Также за счет малости параметра перетащим второй множитель из знаменателя в числитель
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93080/93080_900.png)
Раскроем скобки, приведем подобные и избавимся от слагаемых второго порядка малости
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93388/93388_900.png)
Приведем к общему знаменателю
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93545/93545_900.png)
Еще раскроем скобки, убрав слагаемые второго порядка малости
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93881/93881_900.png)
Окончательно получим
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/93981/93981_900.png)
Полученная сила поверхностного натяжения должна уравновешивать вес жидкости в цилиндре, с силой тяжести равной
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/94386/94386_900.png)
где ро — плотность жидкости, а g — ускорение свободного падения.
Здесь необходимо поставить знак минус, поскольку функция y отрицательна.
Введем параметр
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/94642/94642_900.png)
Приравняв силу поверхностного натяжения к силе тяжести и сократив общие множители, получим
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/94829/94829_900.png)
Выразим явно вторую производную
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/95011/95011_900.png)
решить это уравнение в явном виде не представляется возможным, однако, можно решить задачу Коши для этого уравнения численными методами. Заметим, что для дифференциального уравнения второго порядка необходимо знать два начальных условия. В нашем случае можно задать начальный размер капли (то есть расстояние от потолка до ее нижней части, а также учесть, что при r равном нулю, первая производная тоже равна нулю). Для численного решения данного уравнения я написал следующую программу.
#include "stdio.h"
#include "math.h"
double old_t;
double old_y, old_dy;
double t;
double y, dy;
double delta;
const double A = 1000.0 * 9.8 / 0.073;
/*const double h = -0.0065;*/
const double h = -0.0045;
double funcY( double t, double yn, double dyn );
void run( void );
int main( void )
{
int i;
int j;
FILE * OutputF;
int RetCode;
RetCode = 0;
OutputF = fopen( "result.txt", "wt" );
if( OutputF != NULL ) {
for( i = 0; i < 1; i++ ) {
old_t = 0.0;
t = 0.0;
old_y = h + 0.001 * i;
old_dy = 0.0;
delta = 0.0001;
while( old_y <= 0.0 ) {
for( j = 0; j < 101; j++ ) {
fprintf( OutputF, "%f %f %f\n", old_t * 1000.0 * cos( 0.0628 * j ),
old_t * 1000.0 * sin( 0.0628 * j ),
old_y * 1000.0 );
}
fprintf( OutputF, "\n");
run();
}
}
fclose( OutputF );
}
else {
RetCode = 1;
}
return( RetCode );
}
void run( void )
{
double tmp_tn,tmp_yn,tmp_dyn;
double tk0y,tm0y,tk1y,tm1y,tk2y,tm2y,tk3y,tm3y;
tk0y = delta * old_dy;
tmp_tn = old_t;
tmp_yn = old_y;
tmp_dyn = old_dy;
tm0y = delta * funcY(tmp_tn,tmp_yn,tmp_dyn);
tmp_tn = old_t + (delta/2.0);
tmp_yn = old_y + (tk0y/2.0);
tmp_dyn = old_dy + (tm0y/2.0);
tk1y = delta * (old_dy + (tm0y/2.0));
tm1y = delta * funcY(tmp_tn,tmp_yn,tmp_dyn);
tmp_yn = old_y + (tk1y/2.0);
tmp_dyn = old_dy + (tm1y/2.0);
tk2y = delta * (old_dy + (tm1y/2.0));
tm2y = delta * funcY(tmp_tn,tmp_yn,tmp_dyn);
tmp_tn = old_t + delta;
tmp_yn = old_y + tk2y;
tmp_dyn = old_dy + tm2y;
tk3y = delta * (old_dy + tm2y);
tm3y = delta * funcY(tmp_tn,tmp_yn,tmp_dyn);
y = old_y + (tk0y + 2.0 * tk1y + 2.0 * tk2y + tk3y)/6.0;
dy = old_dy + (tm0y+ 2.0 * tm1y + 2.0 * tm2y + tm3y)/6.0;
t = t + delta;
old_t = t;
old_y = y;
old_dy = dy;
}
double funcY( double t, double yn, double dyn )
{
double tmp;
tmp = 1 + dyn * dyn;
if( t == 0.0 ) {
return( -A * yn * tmp * sqrt( tmp ) );
}
else {
return( -A * yn * tmp * sqrt( tmp ) - dyn * tmp / t );
}
}
При задании различных начальных условий (расстояния от потолка до нижней части капли) в миллиметрах, были построены следующие профили поверхности.
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/95326/95326_900.png)
Эта программа кроме функции y выдает еще линии уровня по которым можно построить 3D модель капли. Эту задачку я оставляю читателям.
Еще один вопрос, который заинтересовал меня в связи с этой задачей — как меняется объем капли в зависимости от вышеназванного расстояния до нижней ее части. Численное интегрирование дает следующий результат.
![image](https://ic.pics.livejournal.com/andyplekhanov/66030250/95600/95600_900.png)
Интересно, что оказывается существует некоторый максимум объема в районе высоты в 5 мм, который поверхностное натяжение может удерживать. На этом мое исследование этой задачи заканчивается, пишите свои соображения в комментариях.
VPryadchenko
Спасибо, очень интересно!
Правильно ли я предполагаю, что условием отрыва капли будет равенстно нулю обратной производной в точке перегиба кривой профиля капли?
andy_p Автор
Да, там решение расходится.