Hi everyone!
I have been searching for a while but couldn’t find a solid way to create differential functions in grasshopper, such as the image that I shared. Does anyone have any idea?
thanks in advance!
Hi everyone!
I have been searching for a while but couldn’t find a solid way to create differential functions in grasshopper, such as the image that I shared. Does anyone have any idea?
thanks in advance!
Hi,
Check these plugins which have the Chua attractor possibility
Some examples found here from here :
http://www.valis.io/fracturehopper.html
Cheers,
BVR
You can do this iteratively using Anemone or Hoopsnake because those equations are telling you how the position changes with respect to time, so in iteration 1 you use the initial position and in iteration 2 you use the position from iteration 1, and so you update iteratively, and the positions in each iteration form the path.
Another option is that you evaluate the function in one position and in another position infinitesimally close (as far as 0.001) and the position difference and divide it by the magnitude of the distance (pt(x) - pt(x+dx)) / dx, and this also gives you how the position changes with respect to time. So at each position you can evaluate how it should change using that equations and update it iteratively.
GH has no direct support for the funny equations, but by applying math aprox. you can do it anyway.
You can also do this kind of thing without plugins using a very short script.
Like this:
for(int i = 0;i < substeps;i++)
{
double x,y,z;
x = p.X;y = p.Y;z = p.Z;
double g = e * x + (d + e) * (Math.Abs(x + 1) - Math.Abs(x - 1));
p += t * (new Vector3d(a * (y - x - g), b * (x - y + z), -c * y));
}
Untitled
Hi @DanielPiker ,
Is it possible to do the same thing with Expression ? in GH without coding. Just curious to know about it.
Hi @ajarindia,
No I don’t think it would be possible to do this with the Expression component, because it has to be calculated iteratively.
The values at each step are calculated based on the values in the step before, and there is no way to directly calculate the nth step without also calculating all the preceding steps.
Hi @DanielPiker,
is there going to be any implementation in terms of a recursive solver in GH2?
Thank you
That’s one for @DavidRutten
Thank you,
Since I have no experience scripting in C#, I just copied and pasted your script and modified it into another attractor(halvorsen attractor) for understanding the logic but the result is not quite well.
Here is the modified version of the script:
for(int i = 0;i < substeps;i++)
{
double x,y,z;
x = p.X;y = p.Y;z = p.Z;
p += t * (new Vector3d(-a * x - (4 * y) - (4 * z) - (y * y), -a * y - (4 * z) - (4 * x) - (z * z), -a * z - (4 * x) - (4 * y) - (x * x)));
}
The halvorsen attractor.gh (5.9 KB)
Looks like you just need to change that initial position
if(reset)p = new Point3d(1, 0, 0);
else
{
for(int i = 0;i < substeps;i++)
{
It looks like your image comes from this site:
It looks like the code is in German, and it’s in some C4D script language but you should still be able to extract the math part and translate it into C#
Also - here’s a little update of the script - so instead of using the data recorder component, it stores the point list itself, and adds several at a time, which is much quicker:
halvorsen_attractor.gh (6.9 KB)
halvorsen
Oh, thanks for the correction.
Yes I have found them from the website that you have shared and I thought it is very interesting te create those mathematical expressions in gh. But I didn’t relaize that the codes have already been shared. Also thank you for that!
that looks much better, I think I need to learn the logic of scripting asap. It might be a dumb question but should I start with C# or Python?
Both are good, people just have different preferences.
I wouldn’t stress too much at the beginning about which one is better, just find some tutorials or examples you like the look of and start trying it out.
newPosition = currentPosition + HowPositionChanges(currentPosition)
Hello, @ajarindia .
Do you have Fracturehopper plugin to share? Links on Food4Rhino seem to not working any more.
fh-0.4.zip (32.5 KB)
Check this
@ajarindia Thanks a lot!
I think it’s not mentioned, but if you solve differential equation with Euler you introduce a lot of inaccuracies. It depends on what you do, but a complicated path like these shown do vary a lot from the actual curve if you use fixed steps. Usually variable/adaptive steps are better, and usually Runge-Kutta integration methods are better suited. In case it matters….