I've done some research about how to achieve this using various sources online. Mainly:
http://research.microsoft.com/en-us/um/people/yangliu/publication/tr-2008-13.pdf
Ive written a definition that achieves this, only for surfaces that have gaussian curvature != 0. For instance if a point on a surface almost hits the 0, the definition starts doing weird things. In the papers above they solve this by 'skipping' those points on the surface that have GC = 0. This would require some scripting, unfortunatley due to time i havent been able to do this. I was hoping i would write a python script some day, (really optimistic hehe) but i dont see this happening soon.
Although there is a lot of interest in the research and definition I made so i would like to share this with you guys! Maybe with some luck we could fix these bugs and have an awesome def that achieves this!
I've also tried to achieve the same thing using kangaroo see examples below:
http://www.youtube.com/watch?v=wCtnkG1LVFU
http://www.youtube.com/watch?v=WaknpgMgbI4
The first one achieves planarity, the second achieves semi-planarity. As you see in the second video it sometimes gets a little unstable. Especially if you crank up the number of hexagons.
Ill keep you guys posted.
Andrea Lu
GC = 0...it means this surface is a minimum surface?
Apr 30, 2012
Mateusz Zwierzycki
gaussian curvature = 0 is e.g. cylinder (via wikipedia), what youre thinking about is mean curvature, which with value = 0 represents minimal surface. As read on wikipedia : gc = 0 means that 3 angles of triangle on that surface will sum up to pi.
Apr 30, 2012
Daniel Piker
Interesting research, thanks for sharing.
What kind of fairing forces are you using in Kangaroo ?
Laplacian smoothing or bending stiffness on the interior angles of the hexagons work okay for positive Gaussian curvature, but they prevent the hexagons becoming concave, which as you know is necessary if you want to tile surfaces of negative Gaussian curvature.
Some sort of fairing is definitely necessary in addition to the planarizing, but I think it should be possible to find something that allows concavity. Perhaps aligning pairs of opposite edges on each hexagon - as they do seem to stay roughly parallel in the examples in Wang et al's paper. You'll also need to allow the hexagons to vary in size, so equalization of edge lengths will probably work better than just springs.
It would also be interesting to consider how to throw in the occasional pentagon or heptagon, because this will allow you to tile more topologically interesting surfaces (otherwise you are limited to variations on tubes, planes and donuts). For example, if you try and cover a sphere with just hexagons they have to get infinitely small at some point, but with twelve pentagons you can have fairly small variation in size.
The directionality of the concave hexagons does complicate things though, and it is not immediately obvious how this might fit with some pentagons or heptagons. The papers referenced seem to just avoid the issue and deal only with planes/tubes/tori.
Apr 30, 2012
fernando molas garcia
Still do not understand the logic of the definition but the result looks great!
May 1, 2012
Arie-Willem de Jongh
Thanks All,
Im using springs and bending angles/hing forces. Ive tried a lot of combos: laplacian + planarize polygon; planarize polygon + planarize hing; Bending angles; tangent incircles. At some point however if the amount of hexagons gets cranked up, the system gets somehow unstable. Yes i know to achieve the planar hexagons in a region of a surface with negatice GC, the hexagons need to be concave, see image below
I haven't quite figured out how to achieve this in kangaroo. Maybe with aligning the opposite pairs of edges like you were saying Daniel. Would be interesting to put in some hepta or pentagon, to achieve more interesting results. In the papers above they focus on only hexagons, because at some point they refer to the Y-joint of the hexagon as opposed to triangles or quads as one of the most efficient joints.
Thanks for the interest!
Arie-Willem
May 2, 2012
Andrea Graziano
Hi Arie-Willem,
it's great :-)
I did some weeks ago a similar GH def starting exactly from the same papers. :-)
You can find something more here:
http://www.geometrie.tugraz.at/events/poly/wang_strobl07.pdf
http://alturl.com/ibx8h
https://iam2.tugraz.at/fwf/freeform/ornamentation-1/
this was the video of result:
http://vimeo.com/38629229
I used your same method to define the planar points (Y technique) but starting from a honeycomb tassellation instead your isotrim one.
I'm planning to share it (still don't know if as GH def or GH component) but it still needs some cleaning work in the sorting points part.
Best
Andrea
May 2, 2012
Arie-Willem de Jongh
Hi Andrea!
Haha what a coincidence :) I checked your vimeo, like two drops indeed! The thing I'm curious about is, if you solved the transition from gaussian curvature <> 0 to GC = 0. Where the method you and me are using doesnt apply, (it hits infinity as you might know). See image below, to see what i mean. The region of the surface were the GC flips from positive to negative at has troubles computing valid P-hexes. In the paper they 'skip' those points, but that would require some scripting i think.
Im genuinely interested in this, would be great to have a component or something like that in the end! That was my goal initially also. If you need my help further or anything let me know. Also let me know how you are progressing.
Thanks!
Arie-Willem
May 3, 2012
Andrea Graziano
Hi Arie,
I haven't solve too the GC=0 issue ... but I think it's not a defect. At the end it's a good example of bottom-up strategy. In general we are always looking for a solution that fits all the case studies ... but it's not always a good thing. In this case the GH definition drives the shape solution. The shape solution became a mediation between math & form geometry ... and I really like it since I think it pushes designer to understand the deelpy relations between parametric possibilities and geometries. However it would be great as well to "fix" the issue in order to have a component to be released.
Andrea
May 6, 2012
Arie-Willem de Jongh
Interesting observation Andrea, I hadn't looked at it that way. We are always busy to find a solution for a particular problem that fits all, at least that is most of the time my goal. But like you said this is not always good. Its a nice example of a bottom up solution and forces the user to understand this relation between the initial input surface and the final output of the P-hexagons.
That said, Im still going to try to 'fix' this issue. I think with some scripting i can get it done. I'll keep you posted
May 7, 2012
Andrea Graziano
Another user attempt here - Johan Rooijackers :
http://www.grasshopper3d.com/profiles/blogs/incircle-optimization-r...
http://www.jjwh.dk/file/PLATE_SHELL.html
Jun 13, 2012
Johan Rooijackers
Hi Arie and Andrea,
Good t read some activity on the P-Hexing front!
I also found the 2nd paper Arie posted, "a note on....". Where they start with a brick-patterned surface and then find four intersecting planes for the disconnected edges. I planerised a brick pattern with Kangaroo and did an ugly test for per loose plane.
It works fine for part of a torus.
Do you have the list maniplulating abilities to make it work?
I'll have a dive into Arie's definition.
Jun 28, 2012