# Creating high quality figures of surfaces

I am not sure if this question is suitable for mo, it is more about visualization than math. Anyway, here it is:

What is the best way to visualize a 2-surface in Euclidean space with high quality?

Of course Maple or Matlab produce some grapical output but if one is interested in high quality figures, these methods are insufficient.

I am currently using the following procedure (POV-Ray is a free rendering software based on C):

1. produce the surface with Matlab (or C) and store the surface as a triangle mesh.
2. write out the triangle mesh to a Povray file.
3. produce parameter curves with Matlab (or C)
4. write out the parameter curves (as a union of cylinders) to a Povray file.

This produces very nice figures but suffers from a lack of interactivity. For instance the camera position has to be specified a-priori in Povray.

My question: what do you use? Is there a better method?

The best quality surfaces that I have seen are on Ken Baker's site: http://sketchesoftopology.wordpress.com/ I think that Ken uses rhino, and he constructs them in space. If you want a 2-d illustration, then you can draw them in fairly high quality using illustrator. I am pretty sure that Ken spent a lot of time learning his system, and I found learning illustrator no easy feat.

If the geomview software is still available from the deceased geometry center, then you might also try that.

You can easily produce images and even animations of algebraic surfaces and curves on them with Oliver Labs' Surfex sofware:

http://www.surfex.algebraicsurface.net/

This software is easy to use and gives very nice plots such as this one:

(source: oliverlabs.net)

Some galleries:

http://www.AlgebraicSurface.net

http://www.Calendar.AlgebraicSurface.net

• The surfex software website seems to be down (but maybe it is still somewhere on (oliverlabs.net). The surfex software package seems to have been redeveloped as something called surfer (imaginary.org/de/program/surfer). Feb 18 '19 at 10:11

Personally I have recently converted to using Asymptote for illustrations. The learning curve may be a bit steep (then again, since you are already familiar with C, maybe not). I am not sure if the output is as high quality as you want though.

If you want more interactivity into a free software, you can try Blender.

• this sounds like a good suggestion. do you have experience with blender? how about python? is it as powerful as matlab? May 28 '10 at 7:33
• I do not see the link between Python, Matlab and Blender. Blender is a raytracer together with a graphic modeler. I guess it can import data files to construct meshes or uv maps from other software, but I have no experience with it (I only use Povray from time to time). May 28 '10 at 8:21
• there is a python interface for blender. May 28 '10 at 17:38

I've done some illustrations and animations with surf.

Please excuse me in offering as a possible answer a software that I developed/am developing myself, namely

asxp

which stands for "algebraic surface explorer".

It can

• create living views of an algebraic surface under parameter change,
• produce Floyd-Steinberg dithered grayscale images of surfaces
• create images which are cross hatched along the principal directions of curvature
• contour images
• triangularize surfaces, smoothen and reduce the triangularization
• produce STL models ready for 3D printing (with the help of an auxiliary program, "renderstl" that I wrote too)

The program uses QT, CGAL, GNU GTS and CUDA. At the moment it is in late prototypical state and will probably soon be published, maybe as open-source-software.

http://www.aviduratas.de/asxp.html

Below are two cross-hatched images:

A certain quartic surface:

A torsal algebraic surface (note the straight lines in the cross hatch):

The curves on the cross-hatched surfaces are available in vector form and would therefore be usable for engraving or pen-plotting.

The newest version of Mathematica is actually capable of pretty easily producing some remarkably good graphics if you know how to use it.

http://gallery.wolfram.com/all_images/Surfaces

http://members.wolfram.com/jeffb/visualization/klein.shtml

http://members.wolfram.com/jeffb/visualization/index.shtml

• thanks for the suggestion. To be honest, I do not find these figures to be of very high quality. May 25 '10 at 18:03
• Really? I thought some of them looked quite nice. At least, when you look at the large versions of the images (aside from the compression artifacting visible on some of them), the small versions can look kind of funny. Although now that I look at those pages, I see those were made with 1 or 2 iterations old Mathematica (5 or 6) while the 7 ones can look nicer. How about something like this that took me like 5 minutes to make in Mathematica 7: img44.imageshack.us/img44/297/shapey.png? You can make things nicer if you play around with the lighting, specularity, etc. May 25 '10 at 21:37

For figures in tex papers, pgf/tikz is usually my go-to package. However, if interactively is a concern, this is certainly not the way to go (tweak, build, tweak, build, ....). It can certainly do high quality ornamented 3d stuff though, e.g.

http://www.texample.net/tikz/examples/spherical-and-cartesian-grids/

Perhaps VTK (the Visualization Toolkit) from Kitware? You can set up interactive windows to easily shift camera position of 3D surfaces.

VTK

Another suggestion could very well be Paraview:

Paraview

The guy on Sketches of Topology which has already been mentioned (it does indeed have some high quality graphics) claims he's used lots of Google SketchUp (proprietary).

http://sketchesoftopology.wordpress.com

This is a very good list of software, most of it at least plots, some of it makes pretty graphics, all of it GPL/OSS as far as I can tell. A few markup languages designed for making mathematical figures are on there as well.

http://orms.mfo.de/

Let me (belatedly) endorse @jeremy's answer, now that this question has been bumped to the front page: Mathematica, Sage, and Matlab all now have pretty high-quality 3D graphics capabilities. Here is a Mathematica example:

$z^2(z^2-16x)=64y^2$. From the MO question, Names of certain surfaces.
But you might look into how the Hévéa project rendered its impressive images:

From the MO question, $C^1$ isometric embedding of flat torus into $\mathbb{R}^3$.