import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.geom.*; import java.math.*; public class DocumentGraph { Manager M; public DocumentGraph(Manager MM) { this.M=MM; } public void AGP_info() { String S="plot controls"; S=S+"\n\nThis control panel specifies what you plot in the Arithmetic Graph window. If you don't know what the arithmetic graph is, you can read the documentation for the Arithmetic Graph Window. In brief, the arithmetic graph is a 2-dimensional plot which encodes the dynamics of the fundamental return map for the outer billiards map."; S=S+"\n\nNow I'll suppose you know what the arithmetic graph is. Once you have set the option you like, just push 'go' and see what happens. Note: many grid points in the Arithmetic Graph window are not in the arithmetic graph: they have trivial orbits. For these points, nothing will happen if you press 'go'. You can also select and activate some of the options using the keyboard. For instance, pressing H is equivalent to selecting the 'forward' option and then pressing 'go'. The relevant key letter is written after the option on the control panel. "; S=S+"\n\nforward: The forward option plots the forward orbit of the selected point in the Arithmetic Graph window. You control the number of iterates (always a power of 2 with our interface) using the arrow key labelled 'length'."; S=S+"\n\nbasic: The basic option plots both the forwards and backwards orbit of the selected point in the Arithmetic Graph window. You control the number of iterates (always a power of 2 with our interface) using the arrow key labelled 'length'."; S=S+"\n\nbackward: The backward option plots the backward orbit of the selected point in the Arithmetic Graph window. You control the number of iterates as in the forward case."; S=S+"\n\nperiod: Let p/q be the rational parameter you have selected. When pq is even, the fundamental orbit is a closed embedded polygon. This option plots this polygon. When pq is odd, the fundamental orbit is an infinite embedded periodic curve. This option plots 2 periods of that curve in this case. The fundamental orbit is the orbit of the point (1/q,1)."; S=S+"\n\npivot arc: This routine plots the pivot arc. The pivot arc is the smallest arc of the fundamental component of the arithmetic graph that contains all the low vertices. A vertex (m,n) is low if the baseline separates (m,n) from (m,n-1). The pivot arc is discussed in great detail in the monograph."; S=S+"\n\nmonster: This plot works for an even rational paramter A=p/q. There is a unique sequence A1,A2,...A, where the denominators increase, successive fractions are Farey-related, and the last term is A. This routine plots, all at the same time, the arithmetic graphs corresponding to these components. Unlike other routines, the colors are fixed in advance for the plot. This plot does nothing for odd rationals."; S=S+"\n\nlow -- even: A low vertex (m,n) is a vertex that is within 1 vertical unit of the baseline, the line of slope -A through the origin. the parity of such a vertex is defined to be the parity of m+n. A low component is a component of the arithmetic graph that contains a low vertex. According to a result in our monograph, all the low vertices on a low component have the same parity. Thus, we can speak of the parity of a low component. This routine plots one period's worth of all the low components of even parity."; S=S+"\n\nlow -- odd: This routine plots one period's worth of the low components of odd parity. To get a nice picture, you should plot the even low components and the odd low components with different colors."; S=S+"\n\nblock1: This option lets you plot all the orbits within a standard rectangle. The rectangle is centered on the point in the window you have selected. If you select nothing, then the default is (0,0)."; S=S+"\n\nblock2: This option lets you plot all the orbits within a certain parallelogram whose sides are parallel to the wall and ceiling lines of the hexagrid. The two arrow keys above this panel control the size of this rectangle. The rectangle is centered on the point in the window you have selected. If you select nothing, then the default is (0,0)."; S=S+"\n\ncompare: This option works like the block plots, in that it considers the return map for all points within a parallelogram. However, the compare option considers the block plots for two parameters at the same time, and then records the grid points where the two plots differ. To get this plot to work, you should save a rational value using the monograph mode of the shape entry system, and then select a nearby second parameter. The inferior predecessor is always a good choice. In general, if you select parameters p1/q1 and p2/q2, you you would like the difference |p1/q1-p2/q2| to be proportional to 1/q^2, where q=min(q1,q2). The smaller the constant of proportionality, the larger the region of agreement. To best appreciate this option, you should turn on the 'dio lemma' option on the 'regions' control panel."; M.E.setExplain(S); M.E.repaint(); } public void style_info() { String S="drawing style"; S=S+"\n\nThis control panel specifies the drawing style. There are 3 options:"; S=S+"\n\noutline: This just shows the arithmetic graph itself."; S=S+"\n\nsolid: When orbits are plotted individually, as with the 'forwards' and 'backwards' plotting options, this fills in the whole component, provided that it has been completely plotted. This option works best with the stable orbits, which are polygons. For the unstable orbits, the picture is not as nice."; S=S+"\n\nsolid+white: This does the same as the solid option, but adds a white outline."; S=S+"\n\nThe solid option is best used with semi-transparent colors. Otherwise, some parts of the picture might block other parts. For the purposes of understanding the basic structure of the arithmetic graph, it is better to use the outline option. The other options are added for artistic effect."; M.E.setExplain(S); M.E.repaint(); } public void scale_info() { String S="scaling"; S=S+"\n\nThis control panel specifies the way the pictures in the arithmetic graph window are normalized."; S=S+"\n\nintegral: This is the usual mode, where the Z+Z lattice is a square grid. The entire monograph is written so as to be compatible with this scaling, and all the features of the arithmetic graph window work with this scaling."; S=S+"\n\naffine: This mode applies an affine transformation to the picture so that the basis (V,W) from the monograph generates a square grid. This mode is useful when you want to explore the fractal structure of the arithmetic graphs."; M.E.setExplain(S); M.E.repaint(); } public void arithmeticGraphInfo() { String S="arithmetic graph window"; S=S+"\n\nThis window draws the arithmetic graph. You activate controls for this window by selecting the 'graph' option on the red 'controls' control panel. Here we will describe the arithmetic graph, and also explain how you interact with this window"; S=S+"\n\nThere is a single real number A that controls the shape of the kite. Let R denote the union of the two rays emanating from the top and bottom vertices of the kite and pointing in the positive X direction. The point (a,b) in the grid on this window corresponds to the points on R of the form"; S=S+"\n\n(T(a,b),1) and (T(a,b),-1) \n\nwhere T(a,b)=2aA+2b+(e)"; S=S+"\n\nHere (e) is an infinitesimally small positive value. In our computations, we take e=.0000001. The point here is to make sure that we are computing well-defined orbits."; S=S+"\n\nWe apply the outer billiards map a number of times until our point returns to a point on R, and this point necessarily corresponds to some T(a0,b0). We also apply the inverse map a number of times to arrive at a point T(a1,b1). We connect (a,b) to both (a0,b0) and (a1,b1). This gives us a small part of the arithmetic graph. Doing this for all points in the grid gives us the whole arithmetic graph. The 'block plot' option on the Arithmetic Graph Control Panel makes this plot."; S=S+"\n\nAlternatively, we can trace out an orbit by starting with (a,b), then moving to (a1,b1), then moving to a new point (a2,b2) connected to (a1,b1), and so on. This would give us a kind of 2D plot of the return map. We could also connect (a,b) to (a0,b0), etc., working our way backwards. This would give us a kind of 2D plot of the backwards return map. The 'forwards' and 'backwards' options on the Arithmetic Graph Control Panel let you make this kind of plot, once you have selected (a,b)."; S=S+"\n\nYou can interact with the Arithmetic Graph window in several ways. First of all, you can click on grid points, as we already mentioned. You select points using the middle mouse button. You can scale the window using the left and right mouse buttons. You can resize the window by dragging on the lower left corner. You can move the selected point using the arrow keys in the upper left corner. You can also enter a point numerically using the keyboard."; S=S+"\n\nThere are a few other auxilliary controls on the top portion of the window. Once you select a component of the arithmetic graph, you can manipulate it in the following way:"; S=S+"\n\ndelete: You can delete the component by pushing the delete button."; S=S+"\n\nreflect: There is a natural basis for the plane related to the kite with parameter A=p/q. This basis is given by the vectors\n\n V=(q,-p) and W=(p,((p+q)^2-2p^2)/(2q)). \n\nThe linear part of the reflection maps V to -V and W to W. There is also a translation part that maps (0,0) to the point (p',q') where pq'-qp'=1 and q'=2 vertical units of the baseline but which does not have a vertex within 1 vertical unit of the baseline. Each rational parameter has an odd predecessor and an even predecessor. These are two rationals with smaller denominator. When you select a rational parameter (with the advanced version of the selection panel) the two predecessors appear as 2 of the 3 rationals on the next row.) We think of K as being small in comparison to the denominators of all the rationals involved in this constrction. The basic geometric fact is that the K hovering component is contained in the one displayed parallelogram or the other. Each displayed parallelogram is contained in the region of agreement between the arithmetic graph for the main rational and the arithmetic graph corresponding to one of the two predecessors. Hence, the K-hovering components are inherited from simpler arithmetic graphs as long as K is small in comparison to the denominators of all the rationals involved. This is the proof that there are no large K-hovering components."; M.E.setExplain(S); M.E.repaint(); } }