Left-click - move reciprocation center or vertex of either polygon Middle-click (or alt-click or ctrl-click) - add a vertex to primal (red) polygon, on nearest edge Right-click (or meta-click) - delete nearest vertex of primal (red) polygon '+'/'='/'i' - zoom in '-'/'o' - zoom out 's' - swap primal with dual 'c' - toggle control panel '3'-'9','0'-'2' - make regular polygon with 3 - 12 sides Shift - '1'-'9','0' - make regular polygon with 10 - 100 sides Arrow keys - move reciprocation center 10 pixels in direction of arrow Ctrl-Arrow keys - move reciprocation center 1 pixel in direction of arrow Debugging (stuff you don't care about): ' ' - repaint 'V' - cycle event debug level (output to java console window). 'b' - toggle double buffering Here is what's going on: The red polygon is your polygon, which you can edit (move a vertex by left-clicking and dragging, add a vertex by middle-clicking, delete a vertex by right-clicking). The white dot is your reciprocation center which you can move around by dragging with the left mouse button. The white circle is the reciprocation circle, whose radius is the geometric mean of all the distances to the vertices and edges. You can also switch among any of the following methods for choosing the radius: - Geometric median distance to verts and edges - Geometric mean distance to verts and edges (default) - sqrt(min*max distance) - Equalize polygon areas - Equalize polygon perimeters The green polygon is the reciprocal polygon. You can choose to show any or all of the following types of CGs, of both the polygon and its dual: - average of vertices - CG of perimeter - CG of area - Rob's CG (see below) - Don's CG from paper (see below) When showing "Don's CG from paper": The red and green 'f's are f(primal) and f(dual) respectively (as defined in the paper) assuming the reciprocation center is the origin. The yellow 'f' is their average (not very important). The yellow 'F' is F(primal) = f(primal) - f(dual) (as defined in the paper). The yellow 'X' is the Canonical Reciprocation Center as defined in the paper (i.e. the point such that if you move the reciprocation center to it, the red and green f's coincide). (Note that if the polygon is not convex, the Canonical Reciprocation Center is undefined and the 'X' calculation will give unpredictable results.) You can make the reciprocation center follow the Canonical Reciprocation Center by checking the appropriate checkbox in the control panel. When showing "Rob's CG": The blue lines point outward from the reciprocation center towards each vertex and edge of the polygon. The green and red dots around the circle are these directions normalized so that they are points on the circle. The green (resp. red) dot inside the circle is the average of all the green (resp. red) dots around the circle. The yellow dot is the average of the green and red dot. If you want the reciprocation center to automatically follow the yellow dot, set Custom CG to "p times 1/||p|| integrated over Vertices (sum)" (which is the same as Rob's CG) and check the "Follow Custom CG of CGs (yellow +)" checkbox. Rob's algorithm: try to make the white dot coincide with the hollow yellow dot. Alternate algorithm: try to make any green CG symbol coincide with the corresponding red CG symbol.Download source code (compressed jar file contains class files and source)
Last Modified: Mon Oct 11 11:21:05 PDT 2004 Don Hatch hatch@plunk.org |