A request for feedback from a grasshopper novice. I am trying to achieve a pattern which matches the attached pic.
Using my limited gh skills I can create the radial lines and divide the curve into equal amounts.
My next challenge is to divide the radials into increasing increments, the further they move out from the centre.
After that I would need to create circles on the radials whose diameters would follow the radials, but that’s the following challenge!
Hello
whatever your Grasshopper level is, the first work is more a math work. You must decide if you want circle, an ellipse or whatever shape. Where is its center. You can parametrize with an angle …
So you have many choices, so first thing is to choose parameters. I understand you have
Initial radius
Number of subdivision (even number)
Angle
…
Radius New = Radius Old*(1+Sin(alpha/2)/Cos(beta) - Tan(beta)*Sin(alpha/2))
Beta is 0 if center of circle is between the 2 arcs extremities. alpha = 2\pi /nSubdivisions
//Laurent Delrieu 13/01/2022
//Radius where the arc begin
double radius = initialRadius;
//Angle representing where the center of the arc is, if 0 center between the ends of arcs
double beta = betaDegree * Math.PI / 180;
//List of all radiuses
List<double> lst_radiuses = new List<double>();
//List of arcs
List<Arc> lst_arcs = new List<Arc>();
lst_radiuses.Add(radius);
//Angle
double alpha = Math.PI * 2 / (double) numberOfDivisions;
//For all rows
for (int i = 0; i < numberOfRows; i++)
{
//Position of extremities of arc
Point3d p1 = new Point3d(-radius * Math.Sin(alpha / 2), radius * Math.Cos(alpha / 2), 0);
Point3d p3 = new Point3d(radius * Math.Sin(alpha / 2), radius * Math.Cos(alpha / 2), 0);
//calculation of new radius
radius = radius * ( 1 + Math.Sin(alpha / 2) / Math.Cos(beta) - Math.Tan(beta) * Math.Sin(alpha / 2));
lst_radiuses.Add(radius);
Point3d p2 = new Point3d(0, radius, 0);
lst_arcs.Add(new Arc(p1, p2, p3));
}
radiuses = lst_radiuses;
arcs = lst_arcs;
Thank you Laurent. That is most impressive! I will have to study on it a bit further as it is beyond my current math appreciation level, but i do get the gist of it…
That does exactly what I was looking for… I’d also like to check out the possibility of using a slightly eccentric centre point and see how that reacts
@anon39580149 and @Joseph_Oster proposed you recursion using Anemone.Joseph uses geometric calculation (less Math ) and Khaled some of the Math I present without the beta coefficient.
For me it was math and recursion using code.
Use what you understand, but I insist you must try to deconstruct the problem to be able to “speak” to the machine (Grasshopper here).
Here my last version with a beta that is variable.
It’s extremely useful to get a look at your version and get a sense of the process used to construct the pattern based on your first diagram of the shapes.
I was looking at a solution from a different direction; subdividing a line on a radial and then creating ellipses using alternating points on those lines, but your last message shows the direction that would have taken - still an interesting outcome, but not exactly the result I was after!
When you want something you have to describe well what you want. The image with the floor was quite clear but your Grasshopper script didn’t have curves so your intentions where not enough clear. You must internalize curves, add some drawings … By the way the question was interesting.
As I understand what you want, the main job you’ll have is to work on datatree of points in order to take
Point(i) on Branch(j)
Point(i+1) on Branch(j+1)
Point(i) on Branch(j+2)
DataTree are not easy to handle but as you understood there are some things useful on my last script.