Parakeet Pattern: how do I join open curves to each other based on endpoint proximity?

Here is one of Parakeet’s example definitions, which I added a little bit (32.1 KB)

It takes cymatics (aka Chladni patterns) that look like this:

And maps them to surfaces, like this:

My additions to the example definition are shown in three groups that I colored yellow. They work together to refine the Parakeet Cymatics component’s polyline output by culling short open polylines, smoothing the polyline output, transforming it into interpolated curves, and shortening open curves. (the shortening is me preparing to get good control over the next step, which is what I’m asking for help with: joining and closing open curves)

The output often produces open curves at the edges of the boundaries of the mapped UV cells, like this:

What I would like to be able to do is join endpoints of the mapped open curves, based on their proximity to each other, and if possible based on the curves’ direction in relation to each other (or the opposite, so I don’t get self intersecting results).

Also, how would I cull the open curves that are closest to the edge of the target surface?

Basically, my goal is to be able to choose to eliminate and/or close the open curves this definition produces.

What components and or sequences of components should I consider adding here?


The problem their is your curve interpolation. This kind of tiling for that shape should be arc segments which get rotated per cell, in order to connect to neighbors correctly and in expected ways.

I’m pretty sure they weren’t joining up correctly even before I started smoothing them and interpolating them, but it they were, I still would like to proceed with the path I’m on here, because the things I’ve added provide more options to play with the resulting geometry.

Is there a way to find the closest among a flat list of open curves, and blend them together?

Ill take a closer look when I have more time if someone doesn’t help you already beforehand.

1 Like

The issue is in this part of the definition (I think the component there is not meant for what you are trying to do)

You can see it is misaligned in 2d.