I have a series of nodes in a graph. The nodes are placed by the user in specific spots. The nodes are guaranteed to not overlap and, in fact, to have a buffer of space between them. These nodes are connected and each edge joins to a node at a specific point. I need to draw the edges between the nodes such that the edges:<ul><li>(required) do not overlap the parent nodes</li> <li>(ideally) would not overlap any node</li> </ul>
One solution could be using <a href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve" rel="nofollow"><strong>Bézier Curves</strong></a>:<blockquote>
"A Bézier curve is defined by a set of control points P0 through Pn, where n is called its order (n = 1 for linear, 2 for quadratic, etc.). <strong>The first and last control points are always the end points</strong> of the curve; however, <strong>the intermediate control points (if any) generally do not lie on the curve</strong>."</blockquote>
So the basic idea is to use parent node(s) as intermediate control points. You may also use points of the edges as intermediate control points to avoid edges overlapping.
In the wiki article you can find nice <a href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve#Constructing_B.C3.A9zier_curves" rel="nofollow">animations</a> explaining it.