generative modeling for Rhino
To generate a grid structure based on a surface, I wanted to determine the principal curvature lines in a UV-point. This seems more complex than it sounds. Though, there is a Principal curvature component in GH, and it outputs the two values for the principal curvature in that point, and the two orthogonal directions. But how to construct a curve based on that data?
Anyone willing to share some experience?
I've included a snapshot of the (simple) definition generating a hypar, and a UV-point on that surface.
Also you can find the ghx attached
a principal curvature line contains a very large (in a purely mathematical sense, infinite) number of points. The Principal Curvature component only gives you information for a single point. If you want to take the principal direction at that location and 'grow' a complete principal curve, you'll need some form of iteration, which means you'll need to write a VB/C# script.
I wrote something that tracks curvature lines along the strongest kappa in a single direction until it hits the surface edge.
Thanks for responding quickly. I've looked at your script and tried to dissect it, but could not follow every step. I've tried to connect your script to my previous definition, and this gave some result (see pdf).
However, I don't know how to proceed to 1) get the 'other' end of the curve, going to the opposite edge of the surface. 2) draw or construct the orthogonal principal direction, because I would want to end up with the two principal curvature lines through a certain point.
I don't know if you would see a solution to this.
Thanks for any help
I extended the script, it now finds points in both directions, and you can say whether you want to use the minimal or maximal curvature at the sample points. You can also specify a rotation angle to add to each sample, so you can get these curves at 5 degrees off the real maximum curvature.
IT WORKS...thank you!
David. your file works flawlessly. I've connected a hypar surface and a helix to your script, and after introducing some points on the surface, your definition nicely draws the two perpendicular principal curvature lines on the surface.
This opens a lot of possibilities, for sure if you check several chapters of Helmut Pottmann's book 'Architectural Geometry'. It is relevant to desiging PQ (plane quadrilateral) meshes, a design topic with a lot of potential, as you know for sure.
I am planning on using it to divide a surface as a base for designing deployable structures, my field of expertise. More results later...
see first examples attached...
Q: Could this become a grasshopper standard component for a future build? I think there will be a lot of interest.
Anyway, David, and also Chris and Evert: thank you!
If we're going to turn this into a proper component, then I'll need to ask the Seattle math-heads for a better algorithm. Currently the deviation between the sampled curve and the 'real' curve is compounded, which is a $3 way of saying it gets worse all the time and the worse it gets the faster it gets worse still.
Yes, I've noticed that indeed. (supposedly) identical lines, generated by two separate points, are deviating from one another, whereas they should coincide. It is a small error, but it is there. Good for preliminary design though...
Would those math-heads be interested in developing such a function in GH, or should I start a facebook page and get 10.000 autographs?
One way would be Modified Euler or RK4 algorithm :)
Thank you Chris,
I've connected your definition to my surface and my point definition, and it shows two curves, as an intersection of the planes you defined with the base surface. This is indeed in that specific point, the principal curvature direction (min and max).
But the difficulty remains: how to construct or calculate the Principal Curvature Lines through that point. Maybe this cannot be solved in GH, but it should be obtained by solving a differential equation, perhaps, iteratively?
I think I am stuck...
Sorry, I've been completely misunderstanding what you're looking for (and there's an osculating circle component in any case). I tried to do this once (that is create the curve of principal curvatures) but had no luck with it at all.