source
Using the applet:
- TAB --> toggle edit/query mode
- edit mode:
- inserting objects in primal plane:
- ctrl + left-click + drag --> insert point or line depending on where you release the mouse
- ctrl + right-click + drag --> insert point or segment depending on where you release
- (the applet will insert line/segment if possible, otherwise it will insert a point)
- editing objects in either plane:
- mouse-over --> highlight the object
- ctrl + click --> delete highlighted object
- left-click + drag --> freely drag objects or parts of objects
- (point: move it freely around screen)
- (line: left-right changes slope, up-down changes y-intercept)
- (segment: move endpoints freely, only translate the connecting line)
- (double wedge: pick intersection point to translate, rotate individual lines)
- right-click + drag --> restrictively drag objects or parts of objects
- (line: can only change y-intercept)
- (segment: move endpoints along the line, translate the connecting line)
- specify a triangle in primal plane (mouse-over to show dual)
- shift + left-click --> specify each vertex (you won't be able to insert invalid vertices)
- the triangle edges are dualized to double wedges
- the dual of a triangle looks like another triangle whose each pair of edges defines a double wedge,
so the total space is enclosed by the three double wedges
- specify a circle in primal plane (again, mouse-over to show dual)
- shift + right-click --> specify the center (radius is 5, i was too lazy to implement varying radius)
- the circle points are sampled, and the dual looks like the whole space except for interior of 2 paraboloids symmetric accross the dual line of the center
- query mode:
- most of the following features are sampled to display (because they are infinite sets of points/lines)
- keys '1' - '9' --> set the sampling density (1 = dense, 9 = sparse)
- (the sparser you sample, the faster the interaction is)
- ctrl + click + drag --> insert point or segment in primal plane (depending on where you release the mouse)
- (the resulting dual lines are inserted into a BSP tree)
- BSP cell (mouse-over query line to display)
- right-click + drag --> set query line (point in dual), show the BSP cell of dual point in dual and primal plane
- bsp cell is displayed as a polygon in dual, cell edges are shown in dual plane, and in primal plane as points
- the duals of the cell edges seem to be the closest points to the query line
- zone (mouse-over query point to display)
- left-click + drag --> set query point (line in dual), show the zone of dual line in dual and primal plane
- zone is displayed as polygons in dual, but sampled to compute lines in primal
- it seems that lines almost always fill the whole primal plane, which makes it very slow
- space --> hide/show zone in primal to display it faster
- stabbers (mouse-over one of the selected segments to display)
- create segments in edit mode
- shift + left-click --> add/remove segment under mouse to the set of selected segments
- shift + right-click --> remove all segments from the selection
- stabbers are sampled to show in both planes
- in dual, the stabbers are points belonging to the intersection of all double wedges
- i hope you're using internet explorer, it is very slow to display all sampled lines
- my own (non)interesting connection:
- the set of circle tangents:
- alt + left-click --> add sampled tangents of a circle centered at mouse position with radius 5
- it only works in primal plane in edit mode
- the dual of the set of tangents of a circle is a set of points on the 2 paraboloids symmetric accross the dual of circle center
- those are the same paraboloids that are not covered by duals of the edge points of the circle
- a parabola:
- alt + right-click --> add sampled points of a parabola y = mouse_y*x*x + mouse_x*x
- it only works in primal plane in edit mode
- the dual of a parabola looks like the whole plane except for interior of another paraboloid
- as mouse_y approaches 0, parabola approaches a line, and the dual becomes a set of all lines through one point