Circular Area into Equal Sub-Areas

Actually, this is a civil engineering question. I will simplify. I have been asking this to ChatGPT for last couple of days, but he doesn’t understand me, let’s see if actual humans will understand or not.
Imagine we have a circular surface, with radius equal r. Let’s assume it has a uniform weight.
I want to place n columns to this surface. And I want all columns to get exactly same load from the uniform weight of the surface.
Basicly, I want to split the circular surface into n equal areas and find the geometric center of these areas.

Do you have any idea how can we do that in GH?

I assume that you are after random Regions (otherwise the solution is obvious). If so there’s tons of similar algos on Internet. Like this - simple one - for instance:

Also this is interesting (spot the K-Means clustering).

BTW: Any of these require coding (average to expert) skills.

BTW: On the other hand there’s the K2 way (Daniel has posted similar indicative cases … or maybe I remember wrongly?).

BTW: On the other hand:



Found 5 minutes (with stuff already on hand like K_Means, Thiessen Polygons etc) to test the approach as exposed here: (RndPts > K_Means > centers > Thiessen > … etc etc)

Results are rather pathetic/“optimistic”. Wonder who had that idea.

On the other hand this C# works 100% (a Recursive Bouncy Solver that splits a BrepFace according a predefined List of Areas (random or not) on a per “stripe” pieces Area sum basis. That said this is written for entirely different purposes.


This paper describes an approach that I think could work for this

I did also wonder if something simpler using a modified Lloyds algorithm but weighting the Voronoi (maybe using @Dani_Abalde’s by inverse area might work.

But this is quite simple anyway. When time permits I’ll give it a spin (unless you are curious enough to do it first).

But wait a minute: since I have this on hand already …

… the only mod MIA is to define the next split direction … er , randomly. This could yield straight cuts … kinda like a Recursive BrepFace Rnd split (with no Area concerns) … but so what? (plus I hate Voronoi like my sins).

1 Like

Update :

Good news: did some mods (still WIP mind) related with rnd Split direction and the thing did the trick.

Shown a circle for clarity - last piece [the Red: double the target Area size] not done/splitted for testing some Recursive stuff under investigation [i.e. Split phases for more “homogenous” BrepFaces].

Using a classic bouncy solver as the other cases posted above.

Bad news: used Methods that are - more or less - strictly internal.


At least, it proveds that the problem is indeed very hard. Thanks a lot!

Not that hard … but certainly tricky: bounce solvers are nasty animals.

Imagine a Method that starts from some value - that is implicitly extracted on the fly - and a resolution step … targeting some value (the piece target area). Then it loops (grow while is smaller or srink while is bigger). Each time that a grow/srink switch happens the current step is half the previous. The search stops if the target is “near enough” according some areaTol reasonable value.

For the core of the matter (switch grow<>srink) a classic bounce logic is used:

1 Like