algorithmic modeling for Rhino
I dont know if this is a post that should be made here or in the coding forum, because it is a coding question.
I have started to try and do my own spring simulation(I need it for some further studies into GA's), and I remember that at some point Daniel Piker had a website where he had some very nice graphical illustrations explaning a lot of the underlying physics behind springs, attraction and repulsion etc.. there where even minor giff animations accompanying the different physical concepts.
Anyway I cant seem to find these anymore, so the question is, does anyone have some good references about springs lying around that they wont mind sharing ? or perhaps a link to that old website?
I've attached below the old manual with the animations
Hopefully that is useful.
In terms of other references, the standard one is Baraff & Witkin
There's lots of other good sources out there too
for example this nice elementary intro from Khan academy on Hooke's law
or the chapter on Forces in Daniel Shiffman's Nature of Code
Getting the most basic springs working can be surprisingly simple and fun, and I'd certainly encourage anyone to have a go at it to gain a better understanding of the principles. I learned about Newton's laws of motion and Hooke's law in school but it wasn't until I actually wrote them into some code and had that magic moment of seeing physically plausible behaviour emerge from those few equations that I felt I really appreciated their elegance and power.
However, going further with physics simulation and dealing with issues of numerical stability, material properties, system topology etc can get much more involved and time consuming. For this reason I'm working on making Kangaroo physics a more accessible library (working along similar lines as TraerPhysics, Box2D, or ToxicLibs), because I think there are many people interested in scripting physical behaviours who have a general understanding of the ideas involved, but don't necessarily want to have to rewrite all of this stuff from scratch.
(especially if they are more interested in doing something with the physics, such as combining it with a GA)
It would be interesting to hear if you think such a library would be useful, and how you'd want to use it...
thats amazing Daniel! Thank you very much!
Those are some really great resources, thanks a bunch. Regarding this bit:
"It would be interesting to hear if you think such a library would be useful, and how you'd want to use it..."
I tend to do most of my Rhino/GH work these days using RhinoCommon and Python components (as well as several third party Python libraries). I am currently implementing Kangaroo in a project in which both the input and output geometry is all generated by, or, further processed using RhinoCommon/Python scripting components. Here is screenshot of how this is organized:
The yellow boxes are: 1) Grabbing geometry from Rhino and generating the input geometry for Kangaroo using Python (mesh, constraints, anchors etc.) 2) Defining The Kangaroo forces. 3) The Kangaroo engine. 4) Using the output geometry from Kangaroo for further processing with Python (analysis, driving a component system etc.). The sliders in the upper left corner control the input variabes for these four overall "steps".
As you can see I am currently defining the Kangaroo forces in step number 2 in a somewhat cumbersome manner. Essentially having to return the geometry from the scripting components which serve as the input for each force and then construct the force. If I could construct forces directly in the scripting components that would certainly make this workflow much more "clean" and maintainable.
I did actually try importing the Kangaroo .dll (in the same way as one would do with the Grasshopper .dll itself) to see it was possible to do this. I did manage to import it and call some of the classes but did not pursue it any further. But perhaps this could be a way forward?
hi again Daniel, I have now thought a bit about your question ".. how you'd want to use it...".
I personally think that making the kangaroo libraries more accessible would make grasshopper more open source and more like processing(not a bad thing) and I am a big fan of things being open source.
I would personally use the libraries to do various types of research, probably into some type of genetic modeling based on a physical iterative process. Which essentially means that I would use them to code material behaviors(or try).
The projects that I am doing now will look into the use of catenary vaulting as a structural system, and the ambition is to generate this with the use of a self written GA(I have done one before). And I have to write my own spring system, since I have to have full control of everything within this "closed"(one component) feedback loop. So essentially by making the libraries more accessibly would make this task easier(or less time consuming).
However I see one issue with making the libraries more accessible, and that is will people remember to cite you? I mean will they say that they have used your work to build their own? I think that would be my main concern. So is you can think up some type of licensing, which would solve the problem ?