# C# Fibonacci Sequence Problem

I am trying to create a Fibonacci sequence curve in Grasshopper in C#. My plan is to create the numerical sequence, then change these numbers to squares and at the end make arcs out of these squares to get the resulting Fibonacci sequence curve. However, when I was working on it, I didn’t think how I would place the rectangles in order for them to go in this pattern.

What I have now:

What I want to get:

Here is the GH file:
Fibonacci.gh (4.8 KB)

1 Like

My first though is different approach, that doesn’t even require calculation of sizes of these squares:

1. Take existing squares
2. Get Bounding Box for them together (BBox will be a rectangle then)
3. Take longer side of this Bounding Box
4. Create square with this longer side of BBox
5. Place it next to longer side of BBox
6. Go to point 1. and continue

To place it to the correct side of the BBox we should track which side is taken, as there is pattern:
Bottom, Left, Top, Right, Bottom, Left, Top, Right, Bottom, Left, Top, Right and so on and on.

Just the idea, I guess there is plenty of better existing solutions 1 Like

See attached.

GoldenSpiral_EntryLevel_V1.gh (128.5 KB)

BTW: 12 years old ??? If so feel free to ask ANY C# question (either in public or via PM).

2 Likes

Try this:

Fibonacci re.gh (4.1 KB)

The idea is something like this:
each rectangle (square for you btw) have corners; first at bottom left, second at bottom right, etc etc.

We can locate the center and orientation of the next square by looking at the first 2 corners of the last square in the list, pick the second corner and move it towards the first corner by the distance of “i” in the fibonacci series. Then put there a plane correctly aligned…

``````private void RunScript(int number, ref object R, ref object A)
{

List<int> FibonacciNumbers = FibonacciSeriesNumber(number);
List<Rectangle3d> rects = new List<Rectangle3d>();

for(int i = 0; i < number; i++){
if(i == 0){rects.Add(new Rectangle3d(Rhino.Geometry.Plane.WorldXY, FibonacciNumbers[i], FibonacciNumbers[i]));}
else{
Rhino.Geometry.Point3d BR = rects[i - 1].Corner(1);
Rhino.Geometry.Point3d BL = rects[i - 1].Corner(0);
Rhino.Geometry.Vector3d V = BR - BL;
V.Unitize();
V *= FibonacciNumbers[i];
BR -= V;
Rhino.Geometry.Plane plane = new Plane(BR, Vector3d.CrossProduct(V, Vector3d.ZAxis), V);
}
}

List<Arc> arcs = new List<Arc>();

foreach(Rectangle3d rect in rects){
arcs.Add(new Arc(rect.Corner(1), (rect.Corner(2) - rect.Corner(1)), rect.Corner(3)));
}

R = rects;
A = arcs;
}

List<int> FibonacciSeriesNumber(int number){
int firstNumber = 1;
int secondNumber = 1;
List<int> Fibonacci = new List<int>();

for(int i = 2; i < number; i++){
int indexLast = Fibonacci.Count - 1;
int indexPenultimate = Fibonacci.Count - 2;
}

return Fibonacci;
}
``````
1 Like

I can’t express enough, how much I am in awe of the support you have provided me!  