% 3d.mp, poly.mp : changes
% ----------------------------------------------------------------------------
% D. Roegel, 12/2/1997: tetrahedron animation
%            17/2/1997: cleaning, introduction of local vectors
%                       dodecahedron animation
%            18/2/1997: correction of a bug in |set_point|
%                       hidden faces implemented
%            19/2/1997: icosahedron animation
%            20/2/1997: cube and octahedron animation
%                       code cleaned and simplified
%                       |rotate_vect| made more general
%                       rotation and translation of an object
%                       addition of figures for the polyhedra
%            21/2/1997: addition of figures explaining the computations
%            23/2/1997: cleaning and corrections
%            24/2/1997: additionnal figures
%                       |rotate_vect| renamed in |vect_rotate|
%                       |pnt| can now only be used locally.
%                       several variables made private
%                       computation of the bounding box of an animation
%                       |beginview| and |endview|
%                       |set_points| renamed |project_object|
%                       |set_point| renamed |project_point|
%                       parameters for PS translation and pnmcut
%                       |mult_object| added
%                       The standard convex polyhedra are now centered
%                       and normalized.
%                       Automatic generation of a shell script
%            25/2/1997: |normalize_object| corrected to take into
%                       account a set of points, and not all the points
%                       of an object.
%                       Introduction of |hexcolor|.
%                       Code splitted in three files: 3d.mp, poly.mp 
%                       and driver.
%                       Additional figures for the dodecahedron
%            26/2/1997: list of object points removed and replaced
%                       by the last number.
%                       |errmessage| added
%                       |vtmp| changed in |v_|
%                       |write_script| slightly simplified
%                       Code and documentation cleaned.
%            27/2/1997: |write_script| made more general
%                       new figure for the observer's orientation
%                       Euler angles are now no longer mentioned.
%                       Angle parameters added to |compute_reference|
%                       |compute_perspective| added
%                       |draw_point| added
%                       |draw_axes| added
%  v 0.96    28/2/1997: sign of theta in |compute_perspective| changed
%  v 0.97               correction to |write_script|
%                       addition of |pnt_obj|
%                       addition of |def_object|
%                       |rotate_object| renamed in |rotate_object_p_v|
%                       addition of |rotate_object_p_p|
%                       addition of |animate_two_objects|
%                       generation of dodecahedron+icosahedron animation
%  v 0.972  3-4/3/1997: objects have now been elevated to classes;
%                       poly.mp contains parameterized definitions
%                       of classes of polyhedra.
%                       Many macros have been adapted. It is now possible
%                       to use several instances of the same class of
%                       objects.
%  v 0.973    5/3/1997: faces are now declared in arrays, which makes
%                       their manipulation easier. Also, color arrays.
%                       Introduction of |set_face| and |draw_faces|
%  v 0.974   10/3/1997: faces and color arrays have been extended to keep
%                       the informations of all faces of all objects
%  v 0.975   11/3/1997: various simplifications, addition of |obj_name|
%                       computing an object name from an index.
%                       Addition of |obs_distance|
%                       |draw_...| functions removed in poly.mp
%  v 0.976   12/3/1997: an example with three objects
%  v 0.977   14/3/1997: ppmquant, pnmcut and ppmtogif replaced by mogrify
%  v 0.978   17/3/1997: |reset_object|, |put_object|,
%                       and |rotate_object_abs_p_v| introduced
%                       |def_object| merged in |assign_object|
%                       drawing of points separated in the polyhedra,
%                       in order to be able to reset the positions.
%  v 0.979   20/3/1997: overflow handling added, 
%                       introduction of field of view parameters (|h_field| and
%                       |v_field|)
%  v 0.98    21/3/1997: new figure and some slight corrections
%  v 0.981   25/4/1997: when |filled_faces| is false, hidden edges are
%                       drawn dashed.
%  v 0.982   25/4/1997: |drawhidden| parameter added to |draw_face|
%  v 0.983   28/4/1997: |set_face| uses now local points
%                       |set_obj_point| for local points
%                       |rotate_in_plane| uses now local points
%                       |get_next_face_point| renamed in |next_face_point|
%                       |next_face_point| uses now local points
%                       |pnt| and |face| removed from poly.mp
%                       |set_face| renamed |set_obj_face| to be consistent
%                       with |set_obj_point|
%  v 0.984    1/5/1997: |rotate_object_abs_p_v| renamed |rotate_object_abs_pv|
%                       |rotate_object_p_v| renamed |rotate_object_pv|
%                       (reason: avoid overfull hboxes in paper)
%                       All |_inst| macros removed since they were not
%                       necessary.
%                       |next_face_point| renamed in |new_face_point|
%  v 0.985    2/5/1997: |three_d_loaded| renamed |three_d_version|
%                       and holds the version number.
%  v 0.986    2/5/1997: code cleaned.
%  v 0.987   12/5/1997: various small improvements suggested by Ulrik Vieth
%  v 0.988   13/5/1997: introduction of 10 ancillary points in the dodecahedron
%                       only 21 points are now available (20 vertices + center)
%                       |free_point| introduced, as well as variants
%                       of |new_face_point| and |rotate_in_plane| to cope
%                       with the ancillary points.
%  v 0.989   16/5/1997: |new_tmp_points|, |free_tmp_points|
%                       |new_face_point_abs| renamed into |new_abs_face_point|
%                       |rotate_in_plane| removed
%                       |rotate_in_plane_abs| renamed into |rotate_in_plane|
%                       paper.tex brought up to date.
%  v 0.990   17/5/1997: |new_points| renamed |new_obj_points|
%                       |new_faces| renamed |new_obj_faces|
%                       |new_tmp_points| renamed |new_points|
%                       |free_tmp_points| renamed |free_points|
%                       paper.tex brought up to date.
%  v 0.991   18/5/1997: the following changes were done to for formatting
%                         reasons in the TUGboat paper.
%                         |middle_point| renamed |mid_point|
%                         |rotate_object...| renamed |rotate_obj...|
%                         |assign_object| renamed |assign_obj|
%                         |reset_object| renamed |reset_obj|
%                         |put_object| renamed |put_obj|
%                         |scale_object| renamed |scale_obj|
%                         |translate_object| renamed |translate_obj|
%                       syntax of |obs_distance| changed to take a first
%                        `text' parameter.
%  v 0.992   23/5/1997: some cosmetic changes by Ulrik Vieth, 
%                       for better formatting with mft.
%                       |def_object| renamed |def_obj|.
%                       Code formatted with the meta-mode.el emacs package.
%                       
%  v 0.993   29/5/1997: several "object" renamed "obj"; corrected in the paper.
%                       slight changes in the paper.
%  v 0.994  30/10/1997: |draw_contours| added after suggestion by Denis Barbier
%  v 1.0     8/ 4/1998: final spit for TUGboat article
% ----------------------------------------------------------------------------
