Success, to a degree.
- Yellow = the circle along which the segment lies, green = the circle cutting the yellow circle at right angles.
- Results are only correct if both ends of the line segment are inside the unit circle. If both ends are outside, sometimes the algorithm picks the path that runs through the unit circle. This means that if you are drawing lines from outside to outside, your best bet is to invert the unit circle, find the line, then invert the result.
- Note that if the overall transform is fiddled with with the sliders, the “inside the unit circle” rule applies to the *untransformed* “inside”.
- “drag the transform” is completely buggy.
- Haven’t handled the case where the circle or its cutter is a straight line.
if(segment.isLine()) if(cutter.isPosCircle()) return new Line2D.Double(a, b); else return null; else if(cutter.isLine()) return null; else if (cutter.isPosCircle()) return Draw.arcNegative(c, a, b); else return Draw.arcPositive(c, a, b);
However, it seems that now I have enough graphics primitives to draw a network on a conformal projection of the elliptic plane. And hyperbolic, for that matter.
So now to the next bit.
- I have a set of nodes.
- The nodes have icons and state.
- Each node “participates” in two separate graph structures.
- Graph A is an arbitrary directed graph. Arcs have properties and end decorations.
- Graph B is a tree structure. Nodes can be within nodes.
- In terms of graph B, each node is a unit circle. The nodes “within” it are circles at some location with in it.
- The location of a node within a node is specified by a moebus transformation that maps the unit circle onto the location where the contained node is.
- This allows us to do nesting by composition of transforms.
- To display, a given node has the focus and is drawn as the main circle on the screen.
- This central circle has an outside and an inside.
- Either of these areas can display the “contents” of the node or the “context” of the node.
- The “normal” display is context outside, contents inside. Its what you would get if you did a zoom.
- If both the ouside and the inside display the same (context/context or content/content), then we draw the short line segments. You see both images of anything and the graph is drawn compactly.
- If both the ouside and the inside display the same (context/context or content/content), and a graph A arc needs to be drawn that crosses the border, then either the arc is not drawn, or the arc is drawn from the node to the border – the unit circle serves as a sort of vanishing horizon.
- When a graph A arc spans multiple tree steps – a choice
- Draw the arc relative to the current focus
- Draw the arc relative to the top of the tree
- Draw the arc relative to the higest node that contains both
- Draw the arc as a number of segments. I prefer this, because I think it will serve to “gather” arcs into pathways that make sense.
- Animate focus changes. Anything else will just not work.
(pretend the blue crosses are closer on the outside than the inside)