If I fill a plastic ziploc-shaped bag with water, the cross section profile should be sort of teardrop shaped (assuming we ignore the edge effects of the bag being sealed on the sides as well as the top and bottom). The bag should "sag"/get wider until to get the center of gravity as low as possible. Initially, getting wider will let more water towards the bottom but eventually this is offset by the bottom of the bag moving up (because the sides are fixed length).

Is there a common function that describes the shape the cross-section of the bag makes?

I would guess the bottom is a parabola, since gravity likes to make parabolas. Then I would guess the top is linear because its under tension. But I have no idea what the transition region might look like and whether you could put those two together into a nice function.

  • $\begingroup$ That's a good question. Parabola is probably wrong: gravity makes catenoids from chains and those are not parabolas. Naive attempt: reducing problem to 2D, suppose the curve describing the bag is $\gamma(t)$ for some $t$ between $-T$ and $T$, say. I would start by equating the hydrostatic pressure of water to the cuvature (second derivative) of the bag. This will give you a second order differential equation for $\gamma$ which can be coupled with the boundary conditions $\gamma(T)=\gamma(-T)$ and $\dot\gamma(T)=R\dot\gamma(-T)$ where $R$ is the (linear) reflection about the vertical axis. $\endgroup$ Commented Sep 22, 2015 at 21:01
  • $\begingroup$ See rose. $\endgroup$
    – Lucian
    Commented Sep 23, 2015 at 1:50
  • $\begingroup$ Water droplets form under gravity and surface tension. There exists a formula for the pressure due to surface tension as a function of the surface's local radii of curvature. It is not impossible that this equation could be used in cylindrical coordinates to find a formula for the shape of a droplet. See also figures 2 and 3 here. $\endgroup$
    – Wouter
    Commented Mar 1, 2016 at 15:37
  • $\begingroup$ Side note: Raindrops are not teardrop-shaped; see here about "rainburgers". $\endgroup$
    – Brian Tung
    Commented Mar 1, 2016 at 18:41
  • $\begingroup$ See paulbourke.net/geometry/teardrop and mathworld.wolfram.com/TeardropCurve.html. $\endgroup$
    – lhf
    Commented Mar 1, 2016 at 18:58

3 Answers 3


I did not know the elastica differential equation of the teardrop shape before Narasimham's answer. The equation is applicable if the bag is not as tall and with little enough water that the top will actually have partial vacuum (think Superman sucking on a a straw) and will be pushed flat by the atmosphere. At the other extreme, if you add as much water in the inside as you can fit, then pressure overcomes gravity and the shape becomes a circle, which is a solution of the elastica equation. For a nice read on elastica: Raphael Linus Levien's PhD thesis From Spiral to Spline: Optimal Techniques in Interactive Curve Design.

There is a closed-form solution to the elastica equation, the syntractrix of Poleni:

$$y = \sqrt{4 - x^2} - \log\left(\frac{\sqrt{4 - x^2} + 2}{x}\right)$$

Or as a parametric curve with unit velocity $\left(\frac{dx}{ds}\right)^2+\left(\frac{dy}{ds}\right)^2=1$:

$$\begin{gather}x = \frac{2}{\cosh(s)}\\y = s - 2\tanh(s)\end{gather}$$

Syntractrix of Poleni
Figure 1. Syntractrix of Poleni.

$y = 0$ at the tip of the tail at $x = 0.57683981788998291629$ (solved numerically) and at the round end at $x = 2$. In terms of $s$ these points are at $s = \pm1.9150080481545374814$ and $s = 0$. The arc length of the teardrop part (both sides) is $2\times1.9150080481545374814$. The tip of the tail is duller than 90°: approximately 112.95°.

The teardrop can be simulated with a 2-d physics engine such as matter.js. With the right filling particle count, the droplet follows the shape of the syntractrix (Fig. 1) quite closely (Fig. 2).

Teardrop simulation start Teardrop simulation stopped
Figure 2. Simulation of a particle system: start (top) and after running for some time (bottom). The simulation was started with a compressed cloud of circle particles of random sizes surrounded by a circular pearl necklace (turquoise) with the centers of successive pearls (circles) constrained to a certain distance. The top pearl was fixed in place and the system was allowed to settle with gravity. For comparison, the syntractrix of Poleni (red) is shown.

You can run the simulation by obtaining matter.min.js and by putting this source code into the body of an HTML file:

<div id='simulationBox1'></div>
<div id='simulationInfo1'></div>
<div id='simulationInfo2'></div>
<script src="/matter.min.js" type="text/javascript"></script>
<script type="text/javascript">
var particleEngine = Matter.Engine.create(document.body, {render: {element:document.getElementById("simulationBox1"), options: {wireframes: true, showAngleIndicator: false}}, constraintIterations:300, positionIterations:20, timing:{timeScale: 0.1}});
var N = 100; // Number of pearls
var S = 5; // Pearl radius
var L = 10; // Link length
var M = 730; // Number of filling particles (try 730)
document.getElementById('simulationInfo1').innerHTML='<b>Simulation 1</b><br />Number of pearls: N = '+N+'<br />Pearl radius: S = '+S+'<br /> Link length: L = '+L+'<br /> Filling particle count: M = '+ M;
particleEngine.world.gravity.y = 0.04; // try 0.04
var stack = Matter.Composite.create();
for (var i = 0; i < M; i++) {
  Matter.Composite.add(stack, Matter.Bodies.circle(400+Matter.Common.random(-N*L/Math.PI/3, N*L/Math.PI/3), 15+N*L/Math.PI/2+Matter.Common.random(-N*L/Math.PI/3, N*L/Math.PI/3), Matter.Common.random(2, 8), { friction: 0, restitution: 0, density: 1, collisionFilter: {category: 1}}));
var bridge = Matter.Composite.create();
for (var i = 0; i < N; i++) {
  Matter.Composite.add(bridge, Matter.Bodies.circle(400 + N*L/(Math.PI*2)*Math.sin(2*Math.PI*i/N), 15+N*L/(Math.PI*2) - N*L/(Math.PI*2)*Math.cos(2*Math.PI*i/N), S, {friction: 0, restitution: 0, density:0.5, collisionFilter: {category: 2, mask: 1}, isStatic: i == 0}));
for (var i = 0; i < N; i++) {
  Matter.World.add(particleEngine.world, Matter.Constraint.create({bodyA: bridge.bodies[i], pointA: { x: 0, y: 0 }, bodyB: bridge.bodies[(i+1)%N], pointB: { x: 0, y: 0 }, stiffness:7, length:L,render:{strokeStyle:'#00ffff'}}));
Matter.World.add(particleEngine.world, [
  Matter.Bodies.rectangle(400, -40, 800, 10, { isStatic: true })
Matter.Events.on(particleEngine.render, "afterRender", function(a){
  var str = 'Circumference:';
  var checksum = 0;
  var len = 0;
  for (var i = 0; i < N; i++) { 
    len += Math.sqrt(Math.pow(bridge.bodies[i].position.x-bridge.bodies[(i+1)%N].position.x, 2) + Math.pow(bridge.bodies[i].position.y-bridge.bodies[(i+1)%N].position.y, 2));
  var x0 = bridge.bodies[0].position.x-bridge.bodies[1].position.x;
  var y0 = bridge.bodies[0].position.y-bridge.bodies[1].position.y;
  var x1 = bridge.bodies[0].position.x-bridge.bodies[N-1].position.x;
  var y1 = bridge.bodies[0].position.y-bridge.bodies[N-1].position.y;
  str += ' '+len.toString()+'<br /> Tail tip angle (degrees): '+(((Math.atan2(y1, x1) - Math.atan2(y0, x0))*180/Math.PI + 360)%360).toString()+'<p />';
var lemniscate = Matter.Composite.create()
var trix = Matter.Composite.create()
for (var i = 0; i < N; i++) {
  var s = 1.9150080481545374814*(2.0*i/(N)-1);
  Matter.Composite.add(trix, Matter.Bodies.circle(400 + L*N*(s - 2*Math.tanh(s))/3.8295479369488985, 15 + L*N*(2/Math.cosh(s) - 0.57683981788998291629)/3.8295479369488985, 1, {isStatic: true}));
for (var i = 0; i < N; i++) {
  Matter.World.add(particleEngine.world, Matter.Constraint.create({bodyA: trix.bodies[i], bodyB: trix.bodies[(i+1)%N],render:{strokeStyle:'#ff0000'}}));

I actually have difficulties getting a more droopy teardrop from the simulation as a void begins to form on top of the particles (Fig. 3). However I don't think Poleni's syntractrix is the right shape for the droplet filled so that there is no pressure at the tip of the tail, because the sign of the curvature of Poleni's syntractrix is the same everywhere on it and doesn't go to zero at the tip of the tail.

Figure 3. Reducing the number of filling particles (M) from 730 to 700 (left, also you can view the simulation here) and 670 (right) forms a progressively larger void at the tip. The simulation was run for several hours of real world time.

Logs surrounded by a long log boom pulled by a tug boat also organize similarly, for example: http://www.histoireforestiereoutaouais.ca/en/wp-content/uploads/2013/08/c15-11.jpg.

  • $\begingroup$ That is a really neat tool! There's no way to get an equation from in though, is there? $\endgroup$
    – ericksonla
    Commented Mar 1, 2016 at 17:02
  • $\begingroup$ Within matter.js, the best you can do is get a list of the coordinates of the bag (bridge) elements. It would be more accurate to use a solver for the differential equation. $\endgroup$ Commented Mar 1, 2016 at 17:31

This involves physics of equilibrium to form an ODE which decides its shape.

Assumptions are: Bag is full, does not stretch, too long compared to height, force per unit length $N$ a.k.a. surface tension is proportional to height of water (of density $\gamma$) gravity load column above it, the hydraulic pressure is proportional to vertical depth (y) only, $\kappa$ membrane curvature.. and the like. Equilibrium requires

$$ N \kappa = p = \gamma \, y, \; \; \; \frac {y''}{(1+y'^2)^{3/2}} = k y $$

Integration leads to $Elastica$ shape. At the support point there is no depth of water weighing down on it so it is straight as you expected. Deeper down shape is described by elliptic integrals. At the deepest symmetry point $y^{'} $ is zero, so is a parabola locally.

The ODE gives insight as to its shape. Where the water level stops there and above that the bag is straight.

In Mechanics of materials text-book Den Hartog mentions shapes of heavy mercury drops once adopted for construction of large water tanks.


To an extent, the static equilibrium balance between a helium filled lighter than air balloons floating in air is quite similar. They accordingly have an upside down shape of a teardrop.


The balloon gets meridian shape below when curvature changes along axis of symmetry per $ \kappa = 6 ( z -0.7): $


  • $\begingroup$ Thanks! This looks like just what I was looking for. What is kappa? y is the horizontal distance from the axis of symmetry? Also, do you know of a source I could cite for that equation? $\endgroup$
    – ericksonla
    Commented Mar 1, 2016 at 17:05
  • $\begingroup$ kappa is curvature, y depth from bottom of symmetric body. These are from topic "pressure loaded membrane shells" $\endgroup$
    – Narasimham
    Commented Mar 1, 2016 at 18:55

If you want something that looks like a drop but is not physically based, try the implicit equation $ax^2-(1-y)^3(1+y)=0$. The shape varies a little with $a$. Here it is for $a=4$, courtesy of WA.

enter image description here


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .