Currently, the program can:
- plot functions of one and two variables; rectangular, polar and cylindrical coordinate systems are supported. 3D plots are rendered using OpenGL, and can be rotated and lighted to better understand them;
- plot solutions to relations between variables. For now, only in rectangular coordinates (x, y, z);
- plot parametric curves and surfaces, defined in rectangular, polar or cylindrical coordinates;
- display vector fields in plane and space (for 2D fields also as flow lines);
- display color plots in both RGB and HSV space (functions mapping position to point color);
- animate every kind of plot, actually introducing another dimension: time;
- save static plots as BMP files and animated plots as BMP frame sequences (still experimental).
Every expression you want to graph must be passed by command line, just by writing it:
metaphi "y=cos(e^x)" "x^2+y^2=1"
would for example plot both cos(ex) and a unit circle in the same window. Most of the commonly used functions are recognized: sqrt, cbrt, cos, sin, log, exp, tan, cosh, sinh, gamma and so on. Though this is already an easy way to specify expressions (there are no languages to learn), we want to implement a more user-friendly and interactive thing.
Functions of one variable and relations are displayed using interval arithmetic evaluation, a mechanism which greatly improves plots--basically by avoiding aliasing and feature missing. The plot also takes into account machine rounding errors automatically; this can be at the same time very useful and quite irritating when the curve suddenly becomes 50 pixels thick ;-). Other functions and objects are drawn with a rather stupid discrete sampling algorithm, but they will be fixed too where it makes sense.
We have many other things to experiment with, going from PostScript file saving and AVI animations to integrals and derivatives.