Help in optimising structural members of an Inclined Ellipsoid Shell

I have an inclined ellipsoid shell which is cut at some height from the bottom (see image below).

The goal is to optimize the edges of this mesh such that the members of equal sizes or within some domain where unique sizes can be organized into a few different types. Currently I have setup an optimization script using kangaroo but it does not gives the desired result. The desired mesh should also have minimal deviation from the original shape.

I am attaching the script for reference. you may need Human Plugin.

Shell_0.2.gh (31.6 KB)

Any kind of help or guidance is appreciated, kindly let me know if I any info is required to help with optimization. Also, has anyone tried to optimize shell structures using kiwi3d or karamba?

I’ve added some goals to your kangaroo which did bring it down from 28 to about 21 unique members - it got a little better when I made it more responsive to the curvature of the object, down to 17.

Because you have a semi-regular shape, I’m left wondering whether this is overcomplicated and too many goals pulling in different directions - you might benefit from just making your ellipsoid a fairly regular collection of panels and instead of trying to minimise the number of elements for the whole thing, you focus on the connection to the ground and make that unique and responsive - especially if you’re fabricating the thing, it will be much easier following a regular construction technique than playing with individual members.

Shell_0.2.gh (169.2 KB)

Hope this helps a bit

I agree with Artstep. Because your base is a mathematically driven shape, there must be some geometry based mathematical solution for the most optimal way to break it down into triangles with as few different lengths as possible. Not being a mathematician, I don’t know how complicated it is, but I guess the solution would be the elliptical equivalent of a geodesic dome.
A triangular grid with 0 variation in edges lengths would result in a surface that can only curve in one dimension, so at least 2 lengths will be needed :thinking:

Actually come to think of it.. the most optimal solution might be to take a geodesic dome and scale 1D it lol (Edit: Never mind I don’t think this works)

I imagine you want to at least start with a more regular mesh before running the solver. I.e. geometry that is radially symmetrical around the ellipsoid’s poles, similar to how the mercator projection deals with a sphere.

Thanks for having a crack at this! I completely agree with you that so many goals lead to a lot of different forces on the points and the edges. That is why I thought of keeping the goals minimal. Yea your solution is also correct I guess, although there is still warping at the base. I had segregated the bottom points and had made them an anchor but not much difference still.

Yes, I believe there must be a mathematical solution for this. I have been trying to understand geodesics, bu the given examples are mostly for regular polygons and not an ellipsoid. @DanielPiker would you know of any resources you could guide me towards or help me with this T_T

Issue is yea I could start with a regular geometry but this is an already going on project so yea cant change the shape much. Have to start from here.

I realized that the fact that the shell is being trimmed would disrupt any perfect geometric tessellation as well. Even if we had the perfect geodesic dome equivalent for ellipsoids, the cut would produce loads of random sized offcuts.

Ah most probably that could be a reason why the edges are not able to relax in a stable state. This just got more complicated T_T

yeah, it’s also a question of how strict you want to be to the original surface. Letting vertices move further from the shell (i.e the mesh is allowed to be bumpier) would allow for more repetition in lengths. Letting the naked vertices pull further away from the ground also helps.

What is the actual intended end result?

It makes a big difference where you allow variation. For instance, (a) you want to use a limited set of triangular face panels, and want them to fit together with small gaps, but can allow a few mm variation in the size of these gaps, vs (b) you want to use struts of a limited set of lengths, and they must meet exactly, with the only variation allowed being deviation from the original shape.

From what I’ve tried in the past (a) is often doable, though for freeform shapes usually still requires a lot of different panel shapes to get the gaps small, while (b) I’ve never got good results for with a triangulated mesh, there’s just not enough freedom.

Here’s an example of how you can set it up to snap to a set of edge lengths, but as you see - depending on how you set the strengths, either the shape becomes very crumpled, or the edge lengths can’t meet the targets.

edgelengths.gh (38.4 KB)

Thanks Daniel! I had done the snapping to the edge length, and was facing the same issue. so instead I had left the edge length’s length parameter empty for it to try to find the maximum lengths within a domain with minimum deviation.

At the end of the day the goal is to reduce the unique sizes of the strut members as much as it is possible. And we can’t use a snap length goal for that. I can care less about the glass fabrication but I know both can’t be done together.

I’m beginning to think that the issue begins with the geometry and the mesh itself. I’m looking into the repeating patterns within geodesic structures then maybe if I can subdivide my geometry into bigger repeatable quadrants and then optimize the quadrants separately. Not sure if this is the right approach. I’d appreciate anyone’s idea. And Thanks!!

Yeah, that’s the issue with snapping it to some length. The bumps would affect the overall geometry of the shell, probably some deviation can be allowed but the bumps were to big to handle.

Leaving the edge length parameter empty won’t do anything to reduce the number of unique edge lengths.

An ellipsoid is doubly curved, and the curvature is not constant in either direction, so even if we use a regular pattern based on a parametrisation, we would not expect repetition of edge lengths beyond that given by the 3 symmetry planes (i.e. each edge length occurring 8 times). Also as it is trimmed you will need lots of unique edge lengths around the boundary.

To get 8 instances of each edge length, you’d want to start from a subdivision with the appropriate symmetry - so an octahedron or cube instead of the dodecahedron/icosahedron commonly used for a geodesic sphere.

Understood. But even if I start with a cube or octahedron. I would still have to deform it to achieve the ellipsoid geometry. I am trying to see if there is any subdivision for ellipsoid, haven’t found one though. But thanks, I get your point.

You just project to a sphere and scale it

octa_ellipsoid.gh (7.1 KB)

part_optimise.gh (15.1 KB)

There’s very minimal change in the lengths. I am using the extracted part mesh.

I think you’re still not following what I’m saying.

You can use symmetry so that each edge length is repeated 8 times. Within each octant though, each edge length will be unique.

Beyond that it is unlikely that any optimisation will help get much more repetition of edge lengths without drastically changing the shape and making it crumpled. With triangles the constraints lead to a problem without a solution.

Yea there is some gap in understanding on my part. Thanks though. I’ll spend some time understanding this.

I thought if I keep the naked edges anchored and optimize the part mesh and then repeat the optimized mesh to get the whole shell.

May I suggest another approach. if we were going to make this on a lathe, we would likely rotate it around its long axis in a machine, use a profile curve, and we would have rotational symmetry around one axis. triangles (mesh) between ‘planes’ of symmetry would greatly simplify the number of unique faces needed. just my 2 cents’ worth, I tend to design using nature as my guide (it is a pretty good computer); if you need something a bit less perfect, then think about an eggshell, which if memory serves is a partial hyperboloid around an axis of symmetry. Cheers

This is a good point.
A general ellipsoid has 3 axes of different lengths and is not a surface of revolution. If 2 of the axes are the same length though you have either a prolate spheroid like a rugby ball (or a football for Americans) or an oblate spheroid like a smartie (or a skittle for Americans!). If you can use one of these you can indeed greatly reduce the number of unique edge lengths.

Ah right that is such a fair idea! The issue is the structure design was finalized quite a while ago and can’t be changed. The three axis of the geometry are all different. So now, the form can’t be changed and the size either.

I think at this point what Daniel earlier said that using symmetry each edge will be repeated 8 times, hence the edges of one octant will be unique but all repeated 8 times seems the only viable option right now. I will however try my last ditch effort and see whether I can optimize the single octant without messing with the naked edges. But thank you for the insight.