// crosscat.fe // Two catenoids joined at right angles. This film is symmetric, so // it stays in the large angle where wires meet. I do not know if // there is a symmetry-breaking solution that goes into the small angles. parameter radius = 1 // ring radius parameter height = .2 // half-distance between rings // rings boundary 1 parameters 1 //right top ring x1: radius*sin(p1) x2: sqrt(radius^2-height^2) - radius*cos(p1) x3: height boundary 2 parameters 1 //right bottom ring x1: radius*sin(p1) x2: sqrt(radius^2-height^2) - radius*cos(p1) x3: -height boundary 3 parameters 1 //left front ring x1: height x2: -(sqrt(radius^2-height^2) - radius*cos(p1)) x3: radius*sin(p1) boundary 4 parameters 1 //left back ring x1: -height x2: -(sqrt(radius^2-height^2) - radius*cos(p1)) x3: radius*sin(p1) vertices 1 asin(height/radius) boundary 1 fixed 2 pi/2 boundary 1 fixed 3 pi boundary 1 fixed 4 3*pi/2 boundary 1 fixed 5 2*pi-asin(height/radius) boundary 1 fixed 6 asin(height/radius) boundary 2 fixed 7 pi/2 boundary 2 fixed 8 pi boundary 2 fixed 9 3*pi/2 boundary 2 fixed 10 2*pi-asin(height/radius) boundary 2 fixed 11 pi/2 boundary 3 fixed 12 pi boundary 3 fixed 13 3*pi/2 boundary 3 fixed 14 pi/2 boundary 4 fixed 15 pi boundary 4 fixed 16 3*pi/2 boundary 4 fixed edges 1 1 2 boundary 1 fixed 2 2 3 boundary 1 fixed 3 3 4 boundary 1 fixed 4 4 5 boundary 1 fixed 5 6 7 boundary 2 fixed 6 7 8 boundary 2 fixed 7 8 9 boundary 2 fixed 8 9 10 boundary 2 fixed 9 1 11 boundary 3 fixed 10 11 12 boundary 3 fixed 11 12 13 boundary 3 fixed 12 13 6 boundary 3 fixed 13 5 14 boundary 4 fixed 14 14 15 boundary 4 fixed 15 15 16 boundary 4 fixed 16 16 10 boundary 4 fixed 17 5 1 18 1 6 19 6 10 20 10 5 21 2 7 22 3 8 23 4 9 24 11 14 25 12 15 26 13 16 faces 1 18 5 -21 -1 2 21 6 -22 -2 3 3 23 -7 -22 4 4 -20 -8 -23 5 -20 -19 -18 -17 6 13 -24 -9 -17 7 24 14 -25 -10 8 15 -26 -11 25 9 12 19 -16 -26 read hessian_normal // swap some edges to get more flexible surface sw := { edgeswap edge ee where sum(ee.vertex,on_boundary 1)==1 and sum(ee.vertex, on_boundary 2) == 1; edgeswap edge ee where sum(ee.vertex,on_boundary 3)==1 and sum(ee.vertex, on_boundary 4) == 1; edgeswap edge[19]; edgeswap edge[17]; } // typical evolution gogo := { sw; l .8; g 5; r; g5; r; g 5; hessian; hessian; }