Curve array perpendicular to another curve array


(David S. Mavrov) #1

I have a number of curves arrayed along an elipse. I want to array arches between them, which have to be perpendicular to the already created curves. Any ideas how to do this? I must skip the start and end points.

def.gh (11.3 KB)


(Aris Nikolopoulos) #2

Something like this?
def.gh (18.0 KB)


(David S. Mavrov) #3

Pretty much exactly like this! Any way to control the radius?


(Aris Nikolopoulos) #4

it’s based on offseting the curves, so… no
Is it important?


(David Rutten) #5

Perpendicularity to a curve is described by an entire plane, not a single direction. So what you need is the curve perpendicular plane and a master direction which allows you to pick one of the infinite possible directions implied by the plane. If your arches are to go up as much as possible, then this master direction would be +z. If it’s along the normal direction of the implied surface through the sections, then you’re better off creating that surface using Loft and evaluating it’s normal

You can use either Perp Frames or Perp Frame (plural vs. singular). Use the plural if all your arches have to be equi-spaced. If you need to use the surface normal then you’ll just have to divide your curves into points, and then use the Surface CP component to get the (u,v) coordinate associated with each curve division point which is then used in Evaluate Surface to get the normal.

How you go from end-points + normals to an arch curve is up to you. Bi-Arc? Bezier? Full blown Nurbs curve? So many options.


(David S. Mavrov) #6

Actually this is not the way I need to do it. I need to create curves like this, but perpendicular to the originals and I have to be able to control the radious. The offset doesn’t do…


(David Rutten) #7

Are using “radius” in the correct way as it pertains to circles and circular arcs? Because then it might not be possible. My first instinct is to say you have too many constraints, however maybe not since there are so many different perpendicular directions to choose from. Maybe it is possible to create a single arc between these curves that has a specific radius and is perpendicular to both. There certainly isn’t a component that does that, so even if it is possible, it will be difficult. It may need iterative solving via Kangaroo or code.

Or there’s a clever trick to doing it I’m not seeing. How would you do it by hand if you had to do it in Rhino?


(David S. Mavrov) #8

Maybe I am not explaining this properly. What I wanted to say is that I want to control the depth. Maybe if I combine the offset method from above plus a way to orient the arches with the normal vectors you suggested this will do the trick.


(David Rutten) #9

Best way to control the ‘depth’ of a curve while retaining full say over its end-points and end-tangents is to create a Bezier curve. Just scale the tangent vectors up and down to create shallower or deeper curves.


(David S. Mavrov) #10

If I have to do it manually, this is exactly what I want to do.
Notice that the orientation is dictated by the direction of the start of the arch and the midpoint of the link connecting its two neighboring points. Once this is done I need to control the depth of each arch and then array them around. The depth could be controled by some increasing value. The outter perimeter has the biggest value and the inner has the smallest.

Arches.3dm (41.7 KB)


(David Rutten) #11

Ok, now I understand what you’re aiming for.


(David S. Mavrov) #12

I think that Frames as you have said will give me the proper orientation. But from there on I have no idea how to create the arches. And sorry for my bad explanation.


(Aris Nikolopoulos) #13

I am confused.
If the radius is fixed along the curves, then you will have openings between the lofts like this:
def.gh (23.5 KB)

is this what you want?


(David Rutten) #14

I get completely lost if the data inheritance isn’t left-to-right, so I reorganised your file. I also merged all your offsets+vertical moves into a single operation.

I think these are the droids you are looking for, but there is still a problem where the tangent plane is inverted in some places, yielding an inwards arc. You’ll have to figure out how to flip the normal vectors to always point outwards if my approach is correct.

def_clean.gh (24.2 KB)


(David S. Mavrov) #15


(David Rutten) #16

Oh yes, I fastidiously refrained from relays since I noticed you’re on 0.9, but I forgot that the Multiply component is new in 1.0 as well. You’ll have to replace it with the old-fashioned one based on my screenshot. It works the same in this case.


(David S. Mavrov) #17

I just replecaed it.


(David S. Mavrov) #18

ok, I will try and figure it out


(David S. Mavrov) #19

Thank you!


(David S. Mavrov) #20

If you play with the offshets you will notice that the normals change orientation only if the curvature is inwards.