You can use splines for that. Bezier splines to be more exact.
As input you need to have the start and end points with normals. Where you get these points from is the part where you have to be creative. I will show you here how to create splines from the mentioned input data as well as two methods how you can use this concept in practice.
Here is a basic setup that creates a spline from the 4 input values (note that I hid one socket in each Append Point to Spline node):
Next step is to create a subprogram (a group in this case) to simplify the following steps:
When you put this in a loop you can already do a lot of stuff. The main question is how much control you want to have over the result.
First Use Case
The goal is to connect the vertices of a given mesh.
I start with such a problem by breaking it down into smaller pieces.
How to select 2 random vertices from a list of vertices?
How should the basic loop look like?
Bringing it all together:
More control over the 'height' of the splines by multiplying the normal with something:
You may also want to implement a filter that eg only points will be used that have a specific distance to each other:
This method works quite well, but you don't have very much control over the individual splines.
Second Use Case
My second idea is to use two planes to control each spline. If this method is suitable for you highly depends on the amount of splines you want to have in the end.
Create multiple objects which consist of two planes and put them into a group.
Now I want to take each spline individually and create a spline between their centers (with the normal as direction). I again hid some sockets in the Polygon Info and Object Mesh Data node in the right toolbar.
Based on that you can easily create more splines and control them with the planes. Maybe you also want to control the length of the normal with the area of the polygon by using it as scale factor. Another idea is to use the shrinkwrap modifier to position the planes directly on a target object.