## Acknowledgements

### Richard Palais

An early version of 3D-MathXplor (then called 3D-Filmstrip) goes back to 1987. It included a basic set of 3D graphics routines plus some routines for viewing and rotating 3D objects. A little later Hermann Karcher visited me from Bonn and we worked hard together on the program, making many improvements. In particular, Hermann showed me what a wonderful tool the Painter's Algorithm is---I know of no better method for getting intimately familiar with the anatomy of a complicated surface in space than seeing it built up in stages from several different viewpoints. Hermann's wife Traudel is a physics teacher, and suggested the addition of the magnetic field examples for the second order, three-dimensional ODE category.

Experienced graphics programmers have pointed out that by drawing directly to the screen 3D-XplorMath breaks one of the maxims of graphics programming. (Thou shalt always draw to an offscreen bitmap and then copy it to the screen). One reason is that in most graphics applications the user doesn't want to see a partially drawn object---only the final result, while as explained above, we want the user to see a surface being built up by the Painter's Algorithm (and the timing information inherent in seeing an ODE orbit being drawn in real-time). So we do just the opposite---we draw first to the screen and then copy the screen to an offscreen bitmap that is used both for screen updating and perhaps as a frame of a filmstrip.

In August of 1995 Hermann visited me again, and we spent several weeks working hard to program the Weierstrass-Enneper technique for defining minimal surfaces into 3D-XplorMath. (I travelled to Bonn for a week the next December to return the visit and finish the job.) Karcher is one of a small group of experts in this field and I feel very fortunate and grateful to have had this opportunity to learn his elegant and efficient numerical methods for carrying out the integrations and analytic continuations required to implement the Weierstrass-Enneper method. Many of the famous and beautiful minimal surfaces from the last century (those of Scherk, Riemann, Enneper, Schwarz) as well as the new ones discovered in the recently by Chen-Gackstatter, Costa, Hoffman, Karcher, Meeks, Rosenberg, Wei and several others, are best exhibited using this method. For most of these, the Weierstrass integrals cannot be found in closed form, so that numerical quadrature is essential.

There is an important first step in constructing a good graphical representation of such surfaces, one that suggest the correct behaviour of the surface outside of the screen (or in more mathematical terms, a parametrization adapted to the ends of the minimal surface) This is the choice in each case of an appropriate grid along which to evaluate the Weierstrass integral. This involves starting with an equi-spaced rectangular grid, deforming the spacing so that more lines will be displayed "where interesting things are going on", and then mapping this grid conformally (often with an algebraic function that is computed by analytic continuation). This produces the grid along which the complex integrals must be evaluated to map the grid as parameter lines onto the minimal surface in three-space. But even then one is not finished ! There are usually singularities and branch points (because one is tha integrating on a topologically non-trivial Riemann surface rather than on a simply-connected domain) so one cannot display the entire surface as above. Rather, one first uses this technique to create a "tile" or "fundamental domain" of the surface, and then creates the entire surface by applying a sequence of reflections and rotations to this tile. Carrying out all of the above steps requires an intimate and detailed knowledge of the conformal properties and symmetries of these remarkable geometric objects, and I particularly appreciated Hermann's willingness to contribute freely from his vast store of knowledge on these matters, much of which he discovered himself. I am happy to report that as time went on, the collaboration between Karcher and me became closer, with Hermann taking over an ever increasing part of the actual coding until around 2011 he became the principal coder for the continued development of our program.

After Hermann's initial visit, I thought a lot about how to improve the program, but did not work on it for several years. Then, in mid-1993, David Eck showed me his remarkable Macintosh program shell, xWindows. It made programming in Think Object Pascal so easy and enjoyable that I was quickly able to implement all of the features I had been thinking about for so long. The "User Defined..." feature of the program is based on a powerful and speedy expression parser and evaluator, also developed by Eck. Indeed, when I needed a complex expression evaluator for the Conformal Map category, David took time out from his own work, to modify his Real evaluator so it would handle complex expressions. I think it is fair to say that Karcher and I could not have been developed 3D-XplorMath without David's vital contributions, and I am happy to report that in 2003, David rejoined the 3DXM Consortium and led a team effort to create a platform independent version of 3D-XplorMath using Java.

The late Alfred Gray was kind enough to send me a pre-publication version of his excellent book, "Modern Differential Geometry of Curves and Surfaces" (CRC Press 1993). Having available his Mathematica code for so many beautiful curves and surfaces greatly simplified the chore of choosing and programming interesting examples for this program. Alfred's premature passing was a great loss for mathematical visualization.

My good friend Chandler Fulton, from the world of biology, was an early beta-tester of this program, and suggested that it might be possible to use it to make a 3D model of the DNA double-helix skeleton to help better visualise it. I thought about it a little and he was right, so "Double Helix" appears in the Surfaces menu. Chan supplied me with the appropriate default parameters for real DNA (the ratio of the radius of the helix to the pitch, and the vertical displacement of the two strands).

In the 1996, the 3D-MathXplor user interface got a major facelift. I was "attacked" by Xah Lee and Mike Epstein---two users who liked the mathematical visualization aspects of the program, but were far from enthusiastic about the UI. At first I fought against most of their recommendations, but it soon became clear that even though I have been a Mac user since 1984---when they were not yet even in their teens---they both had a much better feeling than I for what it is that gives a Mac program that special feeling when all of its UI elements are correct and work well together. So eventually they won nearly all the arguments, and I implemented most of the UI changes they recommended, with a great deal of help from them during the reprogramming and testing.

In the 1998, Angel Montesinos Amilibia did some extensive testing of the program that uncovered several serious bugs, and made important criticisms of the program that led to further changes to the user interface, improving it considerably in the process. Angel's algorithms (and his Pascal code) are used in 3D-MathXplor to create implicit curves.

In developing the algorithms to truncate a regular polyhedron, I received help and encouragement from Fan Chung, Han Sah, Darko Babic, and Igor Rivin.

The parametrization of the pseudospherical surface corresponding to the "Breather" solution of the Sine-Gordon equation is due to Jochen Denzler.

The efficient Fast Fourier Transform (FFT) code was written by Bob Palais and plays an important role in many parts of the program.

The interface between 3D-MathXplor and the ray tracing program POVRay was the idea of Christophe Favergeon Borgialli, and he implemented the conversion program and auxiliary file needed to carry out his idea. My thanks to Christophe.