Home » Archimedes archive » Acorn User » AU 1994-02.adf » !FEMS_App_FEMS_App » FEMSdoc2

FEMSdoc2

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1994-02.adf » !FEMS_App_FEMS_App
Filename: FEMSdoc2
Read OK:
File size: 6E7C bytes
Load address: 0000
Exec address: 0000
File contents
                FEMS VERSION 2.3 DOCUMENTATION FILE
                ===================================

        This file describes, in a more complete way than the magazine
articles, the syntax of script files for FEMS version 2.3, as supplied on
the cover disk of the February 1994 BBC Acorn User.  In the interests of
clarity, some parts of the articles are also included in this file.

        For a summary of the differences between this file and the one
supplied on the January cover disk, please see the file "Changes2�3".


DESIGNING YOUR OWN SCENES

        To give maximum flexibility in the setting up of simulations, and
because there are so many possibilities, the scene and parameters are
described in a text file "script" which tells the program what to do.  Even
if you don't feel up to creating your own scenes, fiddling with the provided
definition files will allow you to change things like the screen resolution,
rendering style (whether the picture is drawn with dots or lines) and the
viewpoint used.  Since the simulation setup files are just text files, they
can be created and modified in Edit or any other text editor.  The magazine
explains the general idea of script files and some hints for the successful
creation of animations.


SCRIPT FILES: GENERAL

1       The first line of a script must be "FEMS2".  This is so the program
can recognize valid definition files, and knows which version they are.

2       The program doesn't care whether the letters in the script are upper
or lower case, as it converts them all to lower case when it reads the file.

3       Lines can be concatenated by replacing a newline with a colon, and
spaces can be used instead of commas if you wish.

4       Comments are anything between a /* and a */ (like in C), and are
ignored.  Comments can be nested (unlike in C).

5       A "block" consists of a block name followed by several commands
enclosed in curly brackets.  The brackets must have a separator to either
side of them ie. use "rendering { type dots }" not "rendering{ type dots} "

6       A script consists of some global parameters, a "rendering" block,
and any number of "solid" and "background" blocks.


SCRIPT FILES: UNITS

        At points in a script where you need to specify a distance, a
velocity or an angle, you have a choice of the units you can use.  The units
must come straight after the number, without a separating space, ie. use
"12cm" not "12 cm".

Recognized units for distance:
        in      inches
        ft      feet
        cm      centimetres
        mm      millimetres
the default unit is 1/46080 of an inch 

Recognised units for velocity:
        ips     inches per second
        ftps    feet per second
        cmps    centimetres per second
        mmps    millimetres per second 
the default unit is 1/(921.6) of an inch per second

Recognised units for angles:
        deg     degrees
        rad     radians
the default unit is degrees

Recognised units for angular velocity:
        degps   degrees per second
        radps   radians per second
        rpm     revolutions per minute
the default unit is 0.056889 degrees per second


GLOBAL PARAMETERS

        There are three global parameter commands:

                frame_aim <number>
                gravity <number>,<number>,<number>
                time_div <number>

        The number after frame_aim is the number of frames you want to aim
for.  All this does is cause the program to pause after that many frames, so
you don't overshoot if the computer is being left unattended.  It also sets
the number of frames used to estimate the finishing time.  If the program
has continued past the aim point, or there is not enough space to store the
number of frames aimed for, the finishing time is based on the estimated
maximum number of frames.

        "Gravity" sets the direction and speed with which things fall. 
There are three numbers for the amounts in the x, y and z directions. 
Normally these will be something like 0, 0  and -600 so things fall
downwards.  The script "UpStairs" uses a sideways gravity to make the cube
appear to climb the stairs.

        The "time_div" command sets the number of times the finite element
simulation procedures are called between frames, or in other words how
finely divided the time steps are.  The number must be a power of 2, eg.
1,2,4,8 etc.  The main purpose of this is to allow objects to be stiffer
without exploding, so the spring constants in the objects are automatically
increased when this value is increased.


THE RENDERING BLOCK

        The other set of options affects the appearance of the picture on
the screen.  This is called the "rendering block" and looks like this:
 
                rendering {
                 type <render_type>
                 resolution <number>,<number>
                 view <number>,<number>
                 background <back_type>
                }

        <render_type> is one of "dots", "lines", "all_dots" or "wireframe". 
"Dots" draws the points at the corners of the surface facets, and "lines"
draws the edges of the surface facets.  The other two options do the same
but without removing hidden surfaces.  The "dots" option uses the least
memory for frame storage, and "all_dots" is the quickest to draw.

        The "resolution" command lets you choose the screen resolution you
want to use, by specifying the number of horizontal and vertical pixels. 
Useful values are 320,256 (low resolution) 640,256 (high resolution) and
640,512 (multisync monitors), but you can use any resolution for which there
is a screen mode.  The program will give an error of there is no mode which
fits.  When choosing a resolution, bear in mind that higher resolutions will
take more frame storage space.

        "View" specifies the angle from which you look at the scene.  The
numbers are angles in degrees, the first being the direction in the x-y
plane.  This is the angle through which the scene is rotated about the
vertical axis.  If this is 0, the x direction is horizontally across your
screen (+x on the right, -y on the left) and the +y direction is out of the
screen towards you.  The second number is the "elevation": an value of zero
will put the viewpoint on the x-y plane (looking horizontally, +z axis
vertically upwards), and an angle of 90 would have you looking directly down
from above.

        The "background" command is optional: if you include "background
back" in the rendering block, the program assumes that the background
object(s) are always behind the solid object(s), and does not redraw the
background every frame.  This is useful, for example, when the background is
a set of stairs, as it reduces the frame drawing time.  The default setting
is "background mix" which lets the background object(s) be partly in front
of and partly behind the solid(s).

        The order in which any of the above options are arranged does not
matter, as long as the rendering options are kept inside the rendering
block.


        CREATING OBJECTS: BACKGROUND OBJECTS

        Background objects are the fixed pieces of scenery which the moving
objects interact with.  You can have as many background objects as you want:
they are all created at the origin but they can be moved to any position.

        The script to create a background object is as follows:

                background {
                 create {
                  type <object_type>
                  points <points_spec>
                  size <size_spec>
                 }
                 translate <x>,<y>,<z>
                }

        The indentation is optional: it was added for clarity.  The first
thing in a background block must be a create block, and there must be only
one of these.  The translate command is optional, and there may be any
number of these.  The three parameters are the amounts by which to move the
object in the x, y and z directions.  All distances should be followed by a
unit, eg 3.3in (with no separating space) as described earlier.  The default
unit is 1/640 of a printer's point (a very small distance), so if the
translate command has no visible effect, check the units.

        The first word in the create block must be "type", because the
effect of the "points" and "size" commands are dependant on the object type.
 For a background object, <object_type> must be one of "sheet", "sphere" or
"stairs".


THE SPHERE OBJECT

        This has one "points" parameter and one "size" parameter, i.e. the
word "points" must be followed by one number, and "size" must be followed by
a distance.  The previous remarks about units for distances also apply to
all size parameters.  The size parameter for a sphere sets its radius.  The
points parameter sets the number of points used to draw the sphere: if this
parameter is P, there are P rings of points, and the widest one contains 2P
points.  12 is an adequate value for this parameter.
        You should avoid creating objects which extend into a sphere,
because these will be ejected outwards violently.


THE SHEET OBJECT

        This has one "points" parameter and one "size" parameter.  Sheets
are always square: the points parameter sets the number of points along one
side, and the size parameter sets the length of one side.  For example, if
you use "points 21" and "size 5in" the program will create a sheet with 21 x
21 = 441 points, so if you use "lines" as the rendering type the sheet will
be divided into 20 x 20 squares, each 0.25in x 0.25in.  The sheet is created
horizontal (ie. on the x-y plane) and centred on the origin, so in the above
example the sheet would extend from -5in to +5in in the x direction, from
-5in to +5in in the y direction, and have z=0 for all points.

        When the sheet is created as a background object, it defines a
"floor".  No solid will be allowed to pass below the height of the sheet. 
You should avoid creating objects which extend below the floor, because
these will be ejected upwards violently.  Note that the floor effect does
not depend on the size of the sheet, only on its vertical position.: the
effective floor is an infinite plane at the same height as the sheet.  If
you wanted an invisible floor, therefore, you could create a small sheet
with points set to 2, and move it out of sight in the x or y direction.


THE STAIRS OBJECT

        Being a more complex object, this takes three points parameters and
three size parameters.  Just to confuse things, the points parameters do not
correspond to the same features as the size parameters, unlike the other
objects.  Let's take the size parameters first; these are:

                size <step_width>,<step_height>,<step_depth>

        These are quite obvious: <step_width> is the width of the steps
along the x axis (see diagram below), <step_height> is the amount you would
have to lift your feet (z direction) and <step_depth> is the amount of room
you have for your feet on each step (y direction).

        The points parameters are:

                points <pts_width>,<steps>,<pts_depth>

        The first and third of these just set the number of points used to
draw the horizontal part of the steps: the second sets the number of steps.

               +
               |\
           +---+ \     Axes:
           |\   \ \      z
       +---+ \   \ +     |
       |\   \ \   \|     |
   +---+ \   \ +---+     *-----y
    \   \ \   \|          \
     O   \ +---+           \
      \   \|                x
       +---+                        O is the position of the origin

        The above diagram shows the orientation and initial position of the
stairs.  You will normally want to translate the stairs in the -y,-z
direction after creating them.  Note that due to the orientation, the first
view parameter will need to be between 90 and 270 for the viewpoint to be on
the right side of the stairs.

        Like the sheet, the extent of the stairs is in fact infinite: solids
do not fall off the sides of the stairs, and the stairs continue above and
below those which are visible.


        CREATING OBJECTS: SOLID OBJECTS

                solid {
                 create {
                  type <object_type>
                  points <points_spec>
                  size <size_spec>
                 }
                 scale <xs>,<ys>,<zs>
                 nearbonds {
                  spring_const <lambda>
                  range <range_val>
                 }
                 <other commands>
                }

        The block to create a solid starts with a "create" block, like
backgrounds.  The only difference here is the choice of objects you can
create: a sheet, a cuboid, a cube, a tube or a compound object.  These will
be described individually later.

        The scale command is optional: it lets you scale an object in the x,
y and z directions.  This command is mainly present to allow you to change
the size of a compound object, which would otherwise be very tedious.  I
would advise that you keep the x, y and z scalings similar, as objects which
have different point spacings in different directions tend to be unstable. 
The scale command goes before nearbonds because otherwise would get
stretched: you may want to use this effect, but keep the scale factors close
to 1 to prevent explosions.

        The "nearbonds" block is what makes the solid a solid (but see
"solid_damp -1" for another way).  It needs to be put after the "create"
block, because it creates all the little springs which hold the points in
the object together.  It is called "nearbonds" because it only bonds
together points which are fairly close.  The number after "spring_const"
sets the stiffness of the springs, and "range" sets how near two points have
to be for a spring to connect them.  For each object, the program works out
an average "nearest-neighbour" distance (call this D), and the "range" value
is in terms of D.  Points with a separation of between D/2 and D are linked
with a spring of strength <lambda>, and points with a separation between D
and D*<range_val> are linked with a spring of strength which decreases
smoothly down to 0 for D*<range_val>.   Points with a separation of less
than D/2 are not connected.


        OTHER COMMANDS

        There are two commands you can use to place the object where you
want it:

                translate <x>,<y>,<z>
                rotate <xr>,<yr>,<zr>

        The translate command has been described above.  The rotate command
rotates the object ABOUT THE ORIGIN.  It rotates by <xr>, <yr> and <zr>
degrees about the x, y, and z axes respectively.  You can have any number of
translate and rotate commands without fear of slowing down the program,
because the commands only affect the initial setting up.  For example, if
you want to rotate by 15 degrees about the point (1in,1in,2in), around the x
axis, you could use:

                translate -1in,-1in,-2in
                rotate 15,0,0       
                translate 1in,1in,2in

        and then translate the solid to where you want it.

        There are some other commands which can go in a solid block, but
these should only be given once in each solid.  They are:
                                    
                velocity <xv>,<yv>,<zv>
                spin <xr>,<yr>,<zr>
                air_damp <damp_val>  
                solid_damp <damp_val>
                damping <damp_val>
                fix_vel <box_x>,<box_y>,<box_z>,<box_w>,<box_d>,<box_h>,
                        <xv>,<yv>,<zv>     
                pull <first>,<last>,<step>,<xv>,<yv>,<zv>
                repel <repel_strength>


THE VELOCITY COMMAND
        The "velocity" command just gives the object an initial velocity, by
setting the velocity of all the points to the amount specified.  The
parameters are the velocity components in the x, y and z directions, which
can be given in various units as described earlier.  NB: The velocity of an
object is not rotated when you rotate the object.

THE SPIN COMMAND
        The "spin" command gives the object an angular velocity.  The three
parameters are the components of angular velocity about the x, y and z axes.
 The centre of the rotation is always the origin: make sure that the point
you want the object to spin around is at the origin when you use the "spin"
command.  If you want to give an object both a spin and a linear velocity,
you must use the "velocity" command first, because "velocity" just sets the
velocities of the points, whereas "spin" adds to the velocities already
present.

THE AIR_DAMP COMMAND
        "air_damp <damp_val>" is a command which simulates wind resistance
on objects, by slowing down points on the surface of objects.  This replaces
the old command "damping" which affected all the points in an object, and
was also slightly direction-dependant.  The parameter for this command is an
integer value: 4 is a good starting point.  Increasing this value by 1
halves the amount of wind resistance, and decreasing it by 1 doubles it. 
Values below 2 may cause the object to explode.  The use of this command is
appropriate for:
a/      Sheet-type objects, which in real life are slowed a lot by air
pressure
b/      Objects which are picking up speed too fast: try running the
animation "FlopCube" with no air damping.

THE "SOLID_DAMP" COMMAND:
        The damping routine in the previous version of FEMS used a simple
method whose effect was similar to having wind resistance on every element
in an object: the faster a point was moving, the more it was slowed down. 
This gave a realistic effect for objects like cloths, whose behaviour is
strongly affected by air resistance, but it also rapidly slows the rotation
of a spinning ball, for example, and prevents freely-falling solids from
picking up much speed.  The solid_damp command damps out wobbles without
these side-effects, and makes the object slightly less floppy in the
process.  The parameter is the same as for air_damp, except...
        If you use the command "solid_damp -1", the object will be made
completely solid ("frozen").  In this case any bonds in the object are not
used, and can be left out of the script.  You may notice that the frozen
object will tend to stick into background objects: this is a consequence of
the background objects being modelled as "force fields" and the frozen
object being capable of applying much greater forces on them, where the
non-frozen object would have bent or squashed.  You can still have air
damping on the same object, and there is nothing to stop you having a
mixture of frozen and normal objects in one simulation.

THE DAMPING COMMAND
        The "damping" command takes the same type of parameter as the other
types of damping.  This type of damping has drawbacks which are described
above, but the command has been left in for downwards compatibility.

THE FIX_VEL COMMAND
        Often in an animation, you need to give part or all of an object a
fixed velocity or to hold it still.  The "fix_vel" command lets you do this.
 The first six parameters define a cuboid of space.  Any points which are in
this cuboid at the time the "fix_vel" command is done are given a fixed
velocity, which can be zero.  The first three parameters are the position of
the corner of the cuboid, and the next three are its extent in the x, y and
z directions.  In other words, the cuboid goes from <box_x> to
<box_x>+<box_w> in the x direction, from <box_y> to <box_y>+<box_d> in the y
direction, and from <box_z> to <box_z>+<box_h> in the z direction.  The last
three parameters are the velocity components in the three directions.
        You can have any number of "fix_vel" commands in a create block, but
you can only have a maximum of 63 different velocities used by "fix_vel"
commands in an animation script.

THE PULL COMMAND
        The "pull" command is rather low-level: it needs to refer to the
numbering of the points in an object.  The first three parameters are like a
FOR-NEXT loop which defines a set of points, and these points are given a
fixed velocity given by the last three parameters.  This command is only
present for downwards compatibility: you should now use "fix_vel" instead. 
You can now have any number of "pull" commands for an object, but only 63
different pull velocities in a script.

THE REPEL COMMAND
        The "repel" command causes solid objects to repel each other when
they get close.  The parameter specifies the strength of the repulsion. 
This command works by making the surface points of solids repel each other
when they get within a certain range.  For two solids to interact, they must
both have a "repel" command in their create block.
        The range of the repulsive force is set to be twice the spacing of
the points, so that the force is not too small in the gaps between the
points.  The unfortunate side effect of this is that objects start repelling
each other before they meet.  The only way round this is to reduce the
repulsion until the objects just touch before separating again, but the
value you need to make this happen will depend on how fast the objects are
moving, how heavy they are, etc.  You can reduce the range by using more
points on the surfaces of the objects, but this means there are more points
which have to be compared with each other, which slows things down.  A
compromise, which is used in the animation "repel.BallBlocks", is to have
one object with closely spaced points, and one with widely separated points.
 The repulsion force range is twice the shorter point spacing, and the
number of comparisons is the product of (repulsive points on first object)
and (repulsive points on second object), so this gives the best of both
worlds.
        The strength of the repulsive force used when two objects meet is
the product of the "repel" parameter given for the two objects. 
        As well as making the surface points repulsive, the program also
makes the "second layer in" points repulsive, with four times the repulsion
strength.  This is why there is a pause during the reading of the script
when a "repel" command is found: the program is working out which points are
in the second layer.  This is done so that objects will continue to repel
even if they pass into each other slightly.


THE CUBOID OBJECT

        To create a cuboid, use the following parameters in the "create"
block:

                type cuboid
                size <x_size>,<y_size>,<z_size>
                points <x_pts>,<y_pts>,<z_pts>

        The meaning of the parameters is hopefully obvious.  It is a good
idea to keep the separation of the points the same in all three directions,
ie. <size>/<pts> should be similar for x, y and z.  The cuboid is created
initially with one corner at the origin, with the rest of the object in the
+x, +y, +z octant.


THE CUBE OBJECT

        The setup for a cube is:

                type cube
                size <size>
                points <pts>

        This is basically the same as a cuboid, except the parameters for
the three directions are all set to be equal, and the cube is created
centred on the origin.


THE SOLID SPHERE OBJECT

                type solid_sphere
                size <radius>
                points <pts>,<thick>

        The "sphere" object just creates the outer shell of a sphere.  The
"solid_sphere" object makes this more solid by adding concentric spheres of
points inside the original sphere.  The <radius> and <pts> parameters are
the same as as for a sphere, and the <thick> parameter specifies how many
concentric spheres are made (including the outer one).  If you specify more
than will fit, the program will put in as many as it can.  The difference in
the radii of the concentric spheres is PI*<radius>/<pts>.
        

THE TUBE OBJECT

                type tube
                size <length>,<radius>,<thickness>
                points <length_pts>,<circ_points>,<thick_points>

        The <length> parameter sets the length of the tube.  <Radius> sets
the distance from the axis of the tube to the centre of its walls, and
<thickness> sets the wall thickness.
        The three points parameters set the number of points along the
length, around the circumference and across the wall respectively.
        As I mentioned earlier, it is a good idea to keep the
"nearest-neighbour" distance fairly constant, so as a rough guide, try to
keep:
                <length_pts>   <circ_points>   <thick_points>
                ------------ = ------------- = --------------
                  <length>     2*PI*<radius>    <thickness>
        and
                <radius> > 2*<thickness>
        These are only approximate rules, so feel free to try things out and
see what happens.


COMPOUND OBJECTS

        Compound objects let you stick together any number of other solids
to create a more complex object.  Here is an example of how a compound
object might look:

                create {
                 type compound
                 part {
                  type cuboid
                  points 7,3,3
                  size 3in,1in,1in
                  offset 1in,0,0
                 }
                 part { type cuboid:points 3,3,11:size 1in,1in,5in }
                 part { type cuboid:points 3,7,3:size 1in,3in,1in:offset
0,1in,0 }
                }

        The first line in the "create" block is "type compound", then there
is a list of "part" blocks.  Each of these is much like a "create" block (it
has type, size and points commands), but with the following differences:

1       You can add an "offset" command at the end
2       You cannot have a compound type object as a part!

        The "offset" command is exactly equivalent to a "translate" command,
but only applies to the particular part whose block it is in.

        In the example above, the first "part" block is written out with one
command per line, but the rest are contracted onto one line each by
replacing newlines with colons.  Remember that the curly brackets must be
separated from the commands, else you will get an error.  There is no limit
on the number of parts a compound object can have.  Compound solids work by
letting you create several objects before you use the "nearbonds" command. 
When you do use this command, it connects the parts together.  This method
means that parts will not get connected if they are separated by more than
the range of the "nearbonds" command.  You should also not let parts pass
through each other, as the resulting compound object is unstable.


GETTING SCREENSHOTS

        There is no built-in facility for obtaining screenshots, but it is
simple to do this by adding a line to PROCframe_actions in the program. 
This procedure is called after each frame has been drawn, with the frame
number passed in frame%.  To save a picture of frame 30, add a line at the
beginning of PROCframe_actions which says:

                IF frame%=30 THEN *ScreenSave FEMSpic30

        You could also make the ScreenSave conditional on the Alt key being
held down, for example.


FACET OUTPUT

        I have included in the program a facility to output the coordinates
of all the triangular "facets" which make up the surfaces of the objects. 
You could use this data to create an input file for a ray tracer or other 3D
rendering program.  As for screenshots, you just add a line to
PROCframe_actions like:

                IF frame%=30 THEN PROCoutput_facets("$.Temp.facets30")

        which will create a data file when the program reaches the 30th
frame.  The data file consists of a list of numbers which can the read by a

                INPUT#chan%,A%

        type BASIC statement.  You can read the file with a program which
looks something like this:

                REPEAT
                 INPUT#chan%,A%
                 IF A%<>1 THEN ERROR 1,"Bad file"
                 INPUT#chan%,N%
                 FOR i%=1 TO N%
                  INPUT#chan%,X1%,Y1%,Z1%
                  INPUT#chan%,X2%,Y2%,Z2%
                  INPUT#chan%,X3%,Y3%,Z3%
                  REM do something with the data here
                 NEXT
                UNTIL EOF#chan%

        The coordinates of the three corners of each facet are given in
units of 1/640th of a point, in other words 1/&B400 of an inch.

        Have fun!
00000000  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000010  20 46 45 4d 53 20 56 45  52 53 49 4f 4e 20 32 2e  | FEMS VERSION 2.|
00000020  33 20 44 4f 43 55 4d 45  4e 54 41 54 49 4f 4e 20  |3 DOCUMENTATION |
00000030  46 49 4c 45 0a 20 20 20  20 20 20 20 20 20 20 20  |FILE.           |
00000040  20 20 20 20 20 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |     ===========|
00000050  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |================|
00000060  3d 3d 3d 3d 3d 3d 3d 3d  0a 0a 20 20 20 20 20 20  |========..      |
00000070  20 20 54 68 69 73 20 66  69 6c 65 20 64 65 73 63  |  This file desc|
00000080  72 69 62 65 73 2c 20 69  6e 20 61 20 6d 6f 72 65  |ribes, in a more|
00000090  20 63 6f 6d 70 6c 65 74  65 20 77 61 79 20 74 68  | complete way th|
000000a0  61 6e 20 74 68 65 20 6d  61 67 61 7a 69 6e 65 0a  |an the magazine.|
000000b0  61 72 74 69 63 6c 65 73  2c 20 74 68 65 20 73 79  |articles, the sy|
000000c0  6e 74 61 78 20 6f 66 20  73 63 72 69 70 74 20 66  |ntax of script f|
000000d0  69 6c 65 73 20 66 6f 72  20 46 45 4d 53 20 76 65  |iles for FEMS ve|
000000e0  72 73 69 6f 6e 20 32 2e  33 2c 20 61 73 20 73 75  |rsion 2.3, as su|
000000f0  70 70 6c 69 65 64 20 6f  6e 0a 74 68 65 20 63 6f  |pplied on.the co|
00000100  76 65 72 20 64 69 73 6b  20 6f 66 20 74 68 65 20  |ver disk of the |
00000110  46 65 62 72 75 61 72 79  20 31 39 39 34 20 42 42  |February 1994 BB|
00000120  43 20 41 63 6f 72 6e 20  55 73 65 72 2e 20 20 49  |C Acorn User.  I|
00000130  6e 20 74 68 65 20 69 6e  74 65 72 65 73 74 73 20  |n the interests |
00000140  6f 66 0a 63 6c 61 72 69  74 79 2c 20 73 6f 6d 65  |of.clarity, some|
00000150  20 70 61 72 74 73 20 6f  66 20 74 68 65 20 61 72  | parts of the ar|
00000160  74 69 63 6c 65 73 20 61  72 65 20 61 6c 73 6f 20  |ticles are also |
00000170  69 6e 63 6c 75 64 65 64  20 69 6e 20 74 68 69 73  |included in this|
00000180  20 66 69 6c 65 2e 0a 0a  20 20 20 20 20 20 20 20  | file...        |
00000190  46 6f 72 20 61 20 73 75  6d 6d 61 72 79 20 6f 66  |For a summary of|
000001a0  20 74 68 65 20 64 69 66  66 65 72 65 6e 63 65 73  | the differences|
000001b0  20 62 65 74 77 65 65 6e  20 74 68 69 73 20 66 69  | between this fi|
000001c0  6c 65 20 61 6e 64 20 74  68 65 20 6f 6e 65 0a 73  |le and the one.s|
000001d0  75 70 70 6c 69 65 64 20  6f 6e 20 74 68 65 20 4a  |upplied on the J|
000001e0  61 6e 75 61 72 79 20 63  6f 76 65 72 20 64 69 73  |anuary cover dis|
000001f0  6b 2c 20 70 6c 65 61 73  65 20 73 65 65 20 74 68  |k, please see th|
00000200  65 20 66 69 6c 65 20 22  43 68 61 6e 67 65 73 32  |e file "Changes2|
00000210  b7 33 22 2e 0a 0a 0a 44  45 53 49 47 4e 49 4e 47  |.3"....DESIGNING|
00000220  20 59 4f 55 52 20 4f 57  4e 20 53 43 45 4e 45 53  | YOUR OWN SCENES|
00000230  0a 0a 20 20 20 20 20 20  20 20 54 6f 20 67 69 76  |..        To giv|
00000240  65 20 6d 61 78 69 6d 75  6d 20 66 6c 65 78 69 62  |e maximum flexib|
00000250  69 6c 69 74 79 20 69 6e  20 74 68 65 20 73 65 74  |ility in the set|
00000260  74 69 6e 67 20 75 70 20  6f 66 20 73 69 6d 75 6c  |ting up of simul|
00000270  61 74 69 6f 6e 73 2c 20  61 6e 64 0a 62 65 63 61  |ations, and.beca|
00000280  75 73 65 20 74 68 65 72  65 20 61 72 65 20 73 6f  |use there are so|
00000290  20 6d 61 6e 79 20 70 6f  73 73 69 62 69 6c 69 74  | many possibilit|
000002a0  69 65 73 2c 20 74 68 65  20 73 63 65 6e 65 20 61  |ies, the scene a|
000002b0  6e 64 20 70 61 72 61 6d  65 74 65 72 73 20 61 72  |nd parameters ar|
000002c0  65 0a 64 65 73 63 72 69  62 65 64 20 69 6e 20 61  |e.described in a|
000002d0  20 74 65 78 74 20 66 69  6c 65 20 22 73 63 72 69  | text file "scri|
000002e0  70 74 22 20 77 68 69 63  68 20 74 65 6c 6c 73 20  |pt" which tells |
000002f0  74 68 65 20 70 72 6f 67  72 61 6d 20 77 68 61 74  |the program what|
00000300  20 74 6f 20 64 6f 2e 20  20 45 76 65 6e 0a 69 66  | to do.  Even.if|
00000310  20 79 6f 75 20 64 6f 6e  27 74 20 66 65 65 6c 20  | you don't feel |
00000320  75 70 20 74 6f 20 63 72  65 61 74 69 6e 67 20 79  |up to creating y|
00000330  6f 75 72 20 6f 77 6e 20  73 63 65 6e 65 73 2c 20  |our own scenes, |
00000340  66 69 64 64 6c 69 6e 67  20 77 69 74 68 20 74 68  |fiddling with th|
00000350  65 20 70 72 6f 76 69 64  65 64 0a 64 65 66 69 6e  |e provided.defin|
00000360  69 74 69 6f 6e 20 66 69  6c 65 73 20 77 69 6c 6c  |ition files will|
00000370  20 61 6c 6c 6f 77 20 79  6f 75 20 74 6f 20 63 68  | allow you to ch|
00000380  61 6e 67 65 20 74 68 69  6e 67 73 20 6c 69 6b 65  |ange things like|
00000390  20 74 68 65 20 73 63 72  65 65 6e 20 72 65 73 6f  | the screen reso|
000003a0  6c 75 74 69 6f 6e 2c 0a  72 65 6e 64 65 72 69 6e  |lution,.renderin|
000003b0  67 20 73 74 79 6c 65 20  28 77 68 65 74 68 65 72  |g style (whether|
000003c0  20 74 68 65 20 70 69 63  74 75 72 65 20 69 73 20  | the picture is |
000003d0  64 72 61 77 6e 20 77 69  74 68 20 64 6f 74 73 20  |drawn with dots |
000003e0  6f 72 20 6c 69 6e 65 73  29 20 61 6e 64 20 74 68  |or lines) and th|
000003f0  65 0a 76 69 65 77 70 6f  69 6e 74 20 75 73 65 64  |e.viewpoint used|
00000400  2e 20 20 53 69 6e 63 65  20 74 68 65 20 73 69 6d  |.  Since the sim|
00000410  75 6c 61 74 69 6f 6e 20  73 65 74 75 70 20 66 69  |ulation setup fi|
00000420  6c 65 73 20 61 72 65 20  6a 75 73 74 20 74 65 78  |les are just tex|
00000430  74 20 66 69 6c 65 73 2c  20 74 68 65 79 0a 63 61  |t files, they.ca|
00000440  6e 20 62 65 20 63 72 65  61 74 65 64 20 61 6e 64  |n be created and|
00000450  20 6d 6f 64 69 66 69 65  64 20 69 6e 20 45 64 69  | modified in Edi|
00000460  74 20 6f 72 20 61 6e 79  20 6f 74 68 65 72 20 74  |t or any other t|
00000470  65 78 74 20 65 64 69 74  6f 72 2e 20 20 54 68 65  |ext editor.  The|
00000480  20 6d 61 67 61 7a 69 6e  65 0a 65 78 70 6c 61 69  | magazine.explai|
00000490  6e 73 20 74 68 65 20 67  65 6e 65 72 61 6c 20 69  |ns the general i|
000004a0  64 65 61 20 6f 66 20 73  63 72 69 70 74 20 66 69  |dea of script fi|
000004b0  6c 65 73 20 61 6e 64 20  73 6f 6d 65 20 68 69 6e  |les and some hin|
000004c0  74 73 20 66 6f 72 20 74  68 65 20 73 75 63 63 65  |ts for the succe|
000004d0  73 73 66 75 6c 0a 63 72  65 61 74 69 6f 6e 20 6f  |ssful.creation o|
000004e0  66 20 61 6e 69 6d 61 74  69 6f 6e 73 2e 0a 0a 0a  |f animations....|
000004f0  53 43 52 49 50 54 20 46  49 4c 45 53 3a 20 47 45  |SCRIPT FILES: GE|
00000500  4e 45 52 41 4c 0a 0a 31  20 20 20 20 20 20 20 54  |NERAL..1       T|
00000510  68 65 20 66 69 72 73 74  20 6c 69 6e 65 20 6f 66  |he first line of|
00000520  20 61 20 73 63 72 69 70  74 20 6d 75 73 74 20 62  | a script must b|
00000530  65 20 22 46 45 4d 53 32  22 2e 20 20 54 68 69 73  |e "FEMS2".  This|
00000540  20 69 73 20 73 6f 20 74  68 65 20 70 72 6f 67 72  | is so the progr|
00000550  61 6d 0a 63 61 6e 20 72  65 63 6f 67 6e 69 7a 65  |am.can recognize|
00000560  20 76 61 6c 69 64 20 64  65 66 69 6e 69 74 69 6f  | valid definitio|
00000570  6e 20 66 69 6c 65 73 2c  20 61 6e 64 20 6b 6e 6f  |n files, and kno|
00000580  77 73 20 77 68 69 63 68  20 76 65 72 73 69 6f 6e  |ws which version|
00000590  20 74 68 65 79 20 61 72  65 2e 0a 0a 32 20 20 20  | they are...2   |
000005a0  20 20 20 20 54 68 65 20  70 72 6f 67 72 61 6d 20  |    The program |
000005b0  64 6f 65 73 6e 27 74 20  63 61 72 65 20 77 68 65  |doesn't care whe|
000005c0  74 68 65 72 20 74 68 65  20 6c 65 74 74 65 72 73  |ther the letters|
000005d0  20 69 6e 20 74 68 65 20  73 63 72 69 70 74 20 61  | in the script a|
000005e0  72 65 20 75 70 70 65 72  0a 6f 72 20 6c 6f 77 65  |re upper.or lowe|
000005f0  72 20 63 61 73 65 2c 20  61 73 20 69 74 20 63 6f  |r case, as it co|
00000600  6e 76 65 72 74 73 20 74  68 65 6d 20 61 6c 6c 20  |nverts them all |
00000610  74 6f 20 6c 6f 77 65 72  20 63 61 73 65 20 77 68  |to lower case wh|
00000620  65 6e 20 69 74 20 72 65  61 64 73 20 74 68 65 20  |en it reads the |
00000630  66 69 6c 65 2e 0a 0a 33  20 20 20 20 20 20 20 4c  |file...3       L|
00000640  69 6e 65 73 20 63 61 6e  20 62 65 20 63 6f 6e 63  |ines can be conc|
00000650  61 74 65 6e 61 74 65 64  20 62 79 20 72 65 70 6c  |atenated by repl|
00000660  61 63 69 6e 67 20 61 20  6e 65 77 6c 69 6e 65 20  |acing a newline |
00000670  77 69 74 68 20 61 20 63  6f 6c 6f 6e 2c 20 61 6e  |with a colon, an|
00000680  64 0a 73 70 61 63 65 73  20 63 61 6e 20 62 65 20  |d.spaces can be |
00000690  75 73 65 64 20 69 6e 73  74 65 61 64 20 6f 66 20  |used instead of |
000006a0  63 6f 6d 6d 61 73 20 69  66 20 79 6f 75 20 77 69  |commas if you wi|
000006b0  73 68 2e 0a 0a 34 20 20  20 20 20 20 20 43 6f 6d  |sh...4       Com|
000006c0  6d 65 6e 74 73 20 61 72  65 20 61 6e 79 74 68 69  |ments are anythi|
000006d0  6e 67 20 62 65 74 77 65  65 6e 20 61 20 2f 2a 20  |ng between a /* |
000006e0  61 6e 64 20 61 20 2a 2f  20 28 6c 69 6b 65 20 69  |and a */ (like i|
000006f0  6e 20 43 29 2c 20 61 6e  64 20 61 72 65 0a 69 67  |n C), and are.ig|
00000700  6e 6f 72 65 64 2e 20 20  43 6f 6d 6d 65 6e 74 73  |nored.  Comments|
00000710  20 63 61 6e 20 62 65 20  6e 65 73 74 65 64 20 28  | can be nested (|
00000720  75 6e 6c 69 6b 65 20 69  6e 20 43 29 2e 0a 0a 35  |unlike in C)...5|
00000730  20 20 20 20 20 20 20 41  20 22 62 6c 6f 63 6b 22  |       A "block"|
00000740  20 63 6f 6e 73 69 73 74  73 20 6f 66 20 61 20 62  | consists of a b|
00000750  6c 6f 63 6b 20 6e 61 6d  65 20 66 6f 6c 6c 6f 77  |lock name follow|
00000760  65 64 20 62 79 20 73 65  76 65 72 61 6c 20 63 6f  |ed by several co|
00000770  6d 6d 61 6e 64 73 0a 65  6e 63 6c 6f 73 65 64 20  |mmands.enclosed |
00000780  69 6e 20 63 75 72 6c 79  20 62 72 61 63 6b 65 74  |in curly bracket|
00000790  73 2e 20 20 54 68 65 20  62 72 61 63 6b 65 74 73  |s.  The brackets|
000007a0  20 6d 75 73 74 20 68 61  76 65 20 61 20 73 65 70  | must have a sep|
000007b0  61 72 61 74 6f 72 20 74  6f 20 65 69 74 68 65 72  |arator to either|
000007c0  0a 73 69 64 65 20 6f 66  20 74 68 65 6d 20 69 65  |.side of them ie|
000007d0  2e 20 75 73 65 20 22 72  65 6e 64 65 72 69 6e 67  |. use "rendering|
000007e0  20 7b 20 74 79 70 65 20  64 6f 74 73 20 7d 22 20  | { type dots }" |
000007f0  6e 6f 74 20 22 72 65 6e  64 65 72 69 6e 67 7b 20  |not "rendering{ |
00000800  74 79 70 65 20 64 6f 74  73 7d 20 22 0a 0a 36 20  |type dots} "..6 |
00000810  20 20 20 20 20 20 41 20  73 63 72 69 70 74 20 63  |      A script c|
00000820  6f 6e 73 69 73 74 73 20  6f 66 20 73 6f 6d 65 20  |onsists of some |
00000830  67 6c 6f 62 61 6c 20 70  61 72 61 6d 65 74 65 72  |global parameter|
00000840  73 2c 20 61 20 22 72 65  6e 64 65 72 69 6e 67 22  |s, a "rendering"|
00000850  20 62 6c 6f 63 6b 2c 0a  61 6e 64 20 61 6e 79 20  | block,.and any |
00000860  6e 75 6d 62 65 72 20 6f  66 20 22 73 6f 6c 69 64  |number of "solid|
00000870  22 20 61 6e 64 20 22 62  61 63 6b 67 72 6f 75 6e  |" and "backgroun|
00000880  64 22 20 62 6c 6f 63 6b  73 2e 0a 0a 0a 53 43 52  |d" blocks....SCR|
00000890  49 50 54 20 46 49 4c 45  53 3a 20 55 4e 49 54 53  |IPT FILES: UNITS|
000008a0  0a 0a 20 20 20 20 20 20  20 20 41 74 20 70 6f 69  |..        At poi|
000008b0  6e 74 73 20 69 6e 20 61  20 73 63 72 69 70 74 20  |nts in a script |
000008c0  77 68 65 72 65 20 79 6f  75 20 6e 65 65 64 20 74  |where you need t|
000008d0  6f 20 73 70 65 63 69 66  79 20 61 20 64 69 73 74  |o specify a dist|
000008e0  61 6e 63 65 2c 20 61 0a  76 65 6c 6f 63 69 74 79  |ance, a.velocity|
000008f0  20 6f 72 20 61 6e 20 61  6e 67 6c 65 2c 20 79 6f  | or an angle, yo|
00000900  75 20 68 61 76 65 20 61  20 63 68 6f 69 63 65 20  |u have a choice |
00000910  6f 66 20 74 68 65 20 75  6e 69 74 73 20 79 6f 75  |of the units you|
00000920  20 63 61 6e 20 75 73 65  2e 20 20 54 68 65 20 75  | can use.  The u|
00000930  6e 69 74 73 0a 6d 75 73  74 20 63 6f 6d 65 20 73  |nits.must come s|
00000940  74 72 61 69 67 68 74 20  61 66 74 65 72 20 74 68  |traight after th|
00000950  65 20 6e 75 6d 62 65 72  2c 20 77 69 74 68 6f 75  |e number, withou|
00000960  74 20 61 20 73 65 70 61  72 61 74 69 6e 67 20 73  |t a separating s|
00000970  70 61 63 65 2c 20 69 65  2e 20 75 73 65 0a 22 31  |pace, ie. use."1|
00000980  32 63 6d 22 20 6e 6f 74  20 22 31 32 20 63 6d 22  |2cm" not "12 cm"|
00000990  2e 0a 0a 52 65 63 6f 67  6e 69 7a 65 64 20 75 6e  |...Recognized un|
000009a0  69 74 73 20 66 6f 72 20  64 69 73 74 61 6e 63 65  |its for distance|
000009b0  3a 0a 20 20 20 20 20 20  20 20 69 6e 20 20 20 20  |:.        in    |
000009c0  20 20 69 6e 63 68 65 73  0a 20 20 20 20 20 20 20  |  inches.       |
000009d0  20 66 74 20 20 20 20 20  20 66 65 65 74 0a 20 20  | ft      feet.  |
000009e0  20 20 20 20 20 20 63 6d  20 20 20 20 20 20 63 65  |      cm      ce|
000009f0  6e 74 69 6d 65 74 72 65  73 0a 20 20 20 20 20 20  |ntimetres.      |
00000a00  20 20 6d 6d 20 20 20 20  20 20 6d 69 6c 6c 69 6d  |  mm      millim|
00000a10  65 74 72 65 73 0a 74 68  65 20 64 65 66 61 75 6c  |etres.the defaul|
00000a20  74 20 75 6e 69 74 20 69  73 20 31 2f 34 36 30 38  |t unit is 1/4608|
00000a30  30 20 6f 66 20 61 6e 20  69 6e 63 68 20 0a 0a 52  |0 of an inch ..R|
00000a40  65 63 6f 67 6e 69 73 65  64 20 75 6e 69 74 73 20  |ecognised units |
00000a50  66 6f 72 20 76 65 6c 6f  63 69 74 79 3a 0a 20 20  |for velocity:.  |
00000a60  20 20 20 20 20 20 69 70  73 20 20 20 20 20 69 6e  |      ips     in|
00000a70  63 68 65 73 20 70 65 72  20 73 65 63 6f 6e 64 0a  |ches per second.|
00000a80  20 20 20 20 20 20 20 20  66 74 70 73 20 20 20 20  |        ftps    |
00000a90  66 65 65 74 20 70 65 72  20 73 65 63 6f 6e 64 0a  |feet per second.|
00000aa0  20 20 20 20 20 20 20 20  63 6d 70 73 20 20 20 20  |        cmps    |
00000ab0  63 65 6e 74 69 6d 65 74  72 65 73 20 70 65 72 20  |centimetres per |
00000ac0  73 65 63 6f 6e 64 0a 20  20 20 20 20 20 20 20 6d  |second.        m|
00000ad0  6d 70 73 20 20 20 20 6d  69 6c 6c 69 6d 65 74 72  |mps    millimetr|
00000ae0  65 73 20 70 65 72 20 73  65 63 6f 6e 64 20 0a 74  |es per second .t|
00000af0  68 65 20 64 65 66 61 75  6c 74 20 75 6e 69 74 20  |he default unit |
00000b00  69 73 20 31 2f 28 39 32  31 2e 36 29 20 6f 66 20  |is 1/(921.6) of |
00000b10  61 6e 20 69 6e 63 68 20  70 65 72 20 73 65 63 6f  |an inch per seco|
00000b20  6e 64 0a 0a 52 65 63 6f  67 6e 69 73 65 64 20 75  |nd..Recognised u|
00000b30  6e 69 74 73 20 66 6f 72  20 61 6e 67 6c 65 73 3a  |nits for angles:|
00000b40  0a 20 20 20 20 20 20 20  20 64 65 67 20 20 20 20  |.        deg    |
00000b50  20 64 65 67 72 65 65 73  0a 20 20 20 20 20 20 20  | degrees.       |
00000b60  20 72 61 64 20 20 20 20  20 72 61 64 69 61 6e 73  | rad     radians|
00000b70  0a 74 68 65 20 64 65 66  61 75 6c 74 20 75 6e 69  |.the default uni|
00000b80  74 20 69 73 20 64 65 67  72 65 65 73 0a 0a 52 65  |t is degrees..Re|
00000b90  63 6f 67 6e 69 73 65 64  20 75 6e 69 74 73 20 66  |cognised units f|
00000ba0  6f 72 20 61 6e 67 75 6c  61 72 20 76 65 6c 6f 63  |or angular veloc|
00000bb0  69 74 79 3a 0a 20 20 20  20 20 20 20 20 64 65 67  |ity:.        deg|
00000bc0  70 73 20 20 20 64 65 67  72 65 65 73 20 70 65 72  |ps   degrees per|
00000bd0  20 73 65 63 6f 6e 64 0a  20 20 20 20 20 20 20 20  | second.        |
00000be0  72 61 64 70 73 20 20 20  72 61 64 69 61 6e 73 20  |radps   radians |
00000bf0  70 65 72 20 73 65 63 6f  6e 64 0a 20 20 20 20 20  |per second.     |
00000c00  20 20 20 72 70 6d 20 20  20 20 20 72 65 76 6f 6c  |   rpm     revol|
00000c10  75 74 69 6f 6e 73 20 70  65 72 20 6d 69 6e 75 74  |utions per minut|
00000c20  65 0a 74 68 65 20 64 65  66 61 75 6c 74 20 75 6e  |e.the default un|
00000c30  69 74 20 69 73 20 30 2e  30 35 36 38 38 39 20 64  |it is 0.056889 d|
00000c40  65 67 72 65 65 73 20 70  65 72 20 73 65 63 6f 6e  |egrees per secon|
00000c50  64 0a 0a 0a 47 4c 4f 42  41 4c 20 50 41 52 41 4d  |d...GLOBAL PARAM|
00000c60  45 54 45 52 53 0a 0a 20  20 20 20 20 20 20 20 54  |ETERS..        T|
00000c70  68 65 72 65 20 61 72 65  20 74 68 72 65 65 20 67  |here are three g|
00000c80  6c 6f 62 61 6c 20 70 61  72 61 6d 65 74 65 72 20  |lobal parameter |
00000c90  63 6f 6d 6d 61 6e 64 73  3a 0a 0a 20 20 20 20 20  |commands:..     |
00000ca0  20 20 20 20 20 20 20 20  20 20 20 66 72 61 6d 65  |           frame|
00000cb0  5f 61 69 6d 20 3c 6e 75  6d 62 65 72 3e 0a 20 20  |_aim <number>.  |
00000cc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 67 72  |              gr|
00000cd0  61 76 69 74 79 20 3c 6e  75 6d 62 65 72 3e 2c 3c  |avity <number>,<|
00000ce0  6e 75 6d 62 65 72 3e 2c  3c 6e 75 6d 62 65 72 3e  |number>,<number>|
00000cf0  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000d00  20 74 69 6d 65 5f 64 69  76 20 3c 6e 75 6d 62 65  | time_div <numbe|
00000d10  72 3e 0a 0a 20 20 20 20  20 20 20 20 54 68 65 20  |r>..        The |
00000d20  6e 75 6d 62 65 72 20 61  66 74 65 72 20 66 72 61  |number after fra|
00000d30  6d 65 5f 61 69 6d 20 69  73 20 74 68 65 20 6e 75  |me_aim is the nu|
00000d40  6d 62 65 72 20 6f 66 20  66 72 61 6d 65 73 20 79  |mber of frames y|
00000d50  6f 75 20 77 61 6e 74 20  74 6f 20 61 69 6d 0a 66  |ou want to aim.f|
00000d60  6f 72 2e 20 20 41 6c 6c  20 74 68 69 73 20 64 6f  |or.  All this do|
00000d70  65 73 20 69 73 20 63 61  75 73 65 20 74 68 65 20  |es is cause the |
00000d80  70 72 6f 67 72 61 6d 20  74 6f 20 70 61 75 73 65  |program to pause|
00000d90  20 61 66 74 65 72 20 74  68 61 74 20 6d 61 6e 79  | after that many|
00000da0  20 66 72 61 6d 65 73 2c  20 73 6f 0a 79 6f 75 20  | frames, so.you |
00000db0  64 6f 6e 27 74 20 6f 76  65 72 73 68 6f 6f 74 20  |don't overshoot |
00000dc0  69 66 20 74 68 65 20 63  6f 6d 70 75 74 65 72 20  |if the computer |
00000dd0  69 73 20 62 65 69 6e 67  20 6c 65 66 74 20 75 6e  |is being left un|
00000de0  61 74 74 65 6e 64 65 64  2e 20 20 49 74 20 61 6c  |attended.  It al|
00000df0  73 6f 20 73 65 74 73 0a  74 68 65 20 6e 75 6d 62  |so sets.the numb|
00000e00  65 72 20 6f 66 20 66 72  61 6d 65 73 20 75 73 65  |er of frames use|
00000e10  64 20 74 6f 20 65 73 74  69 6d 61 74 65 20 74 68  |d to estimate th|
00000e20  65 20 66 69 6e 69 73 68  69 6e 67 20 74 69 6d 65  |e finishing time|
00000e30  2e 20 20 49 66 20 74 68  65 20 70 72 6f 67 72 61  |.  If the progra|
00000e40  6d 0a 68 61 73 20 63 6f  6e 74 69 6e 75 65 64 20  |m.has continued |
00000e50  70 61 73 74 20 74 68 65  20 61 69 6d 20 70 6f 69  |past the aim poi|
00000e60  6e 74 2c 20 6f 72 20 74  68 65 72 65 20 69 73 20  |nt, or there is |
00000e70  6e 6f 74 20 65 6e 6f 75  67 68 20 73 70 61 63 65  |not enough space|
00000e80  20 74 6f 20 73 74 6f 72  65 20 74 68 65 0a 6e 75  | to store the.nu|
00000e90  6d 62 65 72 20 6f 66 20  66 72 61 6d 65 73 20 61  |mber of frames a|
00000ea0  69 6d 65 64 20 66 6f 72  2c 20 74 68 65 20 66 69  |imed for, the fi|
00000eb0  6e 69 73 68 69 6e 67 20  74 69 6d 65 20 69 73 20  |nishing time is |
00000ec0  62 61 73 65 64 20 6f 6e  20 74 68 65 20 65 73 74  |based on the est|
00000ed0  69 6d 61 74 65 64 0a 6d  61 78 69 6d 75 6d 20 6e  |imated.maximum n|
00000ee0  75 6d 62 65 72 20 6f 66  20 66 72 61 6d 65 73 2e  |umber of frames.|
00000ef0  0a 0a 20 20 20 20 20 20  20 20 22 47 72 61 76 69  |..        "Gravi|
00000f00  74 79 22 20 73 65 74 73  20 74 68 65 20 64 69 72  |ty" sets the dir|
00000f10  65 63 74 69 6f 6e 20 61  6e 64 20 73 70 65 65 64  |ection and speed|
00000f20  20 77 69 74 68 20 77 68  69 63 68 20 74 68 69 6e  | with which thin|
00000f30  67 73 20 66 61 6c 6c 2e  20 0a 54 68 65 72 65 20  |gs fall. .There |
00000f40  61 72 65 20 74 68 72 65  65 20 6e 75 6d 62 65 72  |are three number|
00000f50  73 20 66 6f 72 20 74 68  65 20 61 6d 6f 75 6e 74  |s for the amount|
00000f60  73 20 69 6e 20 74 68 65  20 78 2c 20 79 20 61 6e  |s in the x, y an|
00000f70  64 20 7a 20 64 69 72 65  63 74 69 6f 6e 73 2e 20  |d z directions. |
00000f80  0a 4e 6f 72 6d 61 6c 6c  79 20 74 68 65 73 65 20  |.Normally these |
00000f90  77 69 6c 6c 20 62 65 20  73 6f 6d 65 74 68 69 6e  |will be somethin|
00000fa0  67 20 6c 69 6b 65 20 30  2c 20 30 20 20 61 6e 64  |g like 0, 0  and|
00000fb0  20 2d 36 30 30 20 73 6f  20 74 68 69 6e 67 73 20  | -600 so things |
00000fc0  66 61 6c 6c 0a 64 6f 77  6e 77 61 72 64 73 2e 20  |fall.downwards. |
00000fd0  20 54 68 65 20 73 63 72  69 70 74 20 22 55 70 53  | The script "UpS|
00000fe0  74 61 69 72 73 22 20 75  73 65 73 20 61 20 73 69  |tairs" uses a si|
00000ff0  64 65 77 61 79 73 20 67  72 61 76 69 74 79 20 74  |deways gravity t|
00001000  6f 20 6d 61 6b 65 20 74  68 65 20 63 75 62 65 0a  |o make the cube.|
00001010  61 70 70 65 61 72 20 74  6f 20 63 6c 69 6d 62 20  |appear to climb |
00001020  74 68 65 20 73 74 61 69  72 73 2e 0a 0a 20 20 20  |the stairs...   |
00001030  20 20 20 20 20 54 68 65  20 22 74 69 6d 65 5f 64  |     The "time_d|
00001040  69 76 22 20 63 6f 6d 6d  61 6e 64 20 73 65 74 73  |iv" command sets|
00001050  20 74 68 65 20 6e 75 6d  62 65 72 20 6f 66 20 74  | the number of t|
00001060  69 6d 65 73 20 74 68 65  20 66 69 6e 69 74 65 20  |imes the finite |
00001070  65 6c 65 6d 65 6e 74 0a  73 69 6d 75 6c 61 74 69  |element.simulati|
00001080  6f 6e 20 70 72 6f 63 65  64 75 72 65 73 20 61 72  |on procedures ar|
00001090  65 20 63 61 6c 6c 65 64  20 62 65 74 77 65 65 6e  |e called between|
000010a0  20 66 72 61 6d 65 73 2c  20 6f 72 20 69 6e 20 6f  | frames, or in o|
000010b0  74 68 65 72 20 77 6f 72  64 73 20 68 6f 77 0a 66  |ther words how.f|
000010c0  69 6e 65 6c 79 20 64 69  76 69 64 65 64 20 74 68  |inely divided th|
000010d0  65 20 74 69 6d 65 20 73  74 65 70 73 20 61 72 65  |e time steps are|
000010e0  2e 20 20 54 68 65 20 6e  75 6d 62 65 72 20 6d 75  |.  The number mu|
000010f0  73 74 20 62 65 20 61 20  70 6f 77 65 72 20 6f 66  |st be a power of|
00001100  20 32 2c 20 65 67 2e 0a  31 2c 32 2c 34 2c 38 20  | 2, eg..1,2,4,8 |
00001110  65 74 63 2e 20 20 54 68  65 20 6d 61 69 6e 20 70  |etc.  The main p|
00001120  75 72 70 6f 73 65 20 6f  66 20 74 68 69 73 20 69  |urpose of this i|
00001130  73 20 74 6f 20 61 6c 6c  6f 77 20 6f 62 6a 65 63  |s to allow objec|
00001140  74 73 20 74 6f 20 62 65  20 73 74 69 66 66 65 72  |ts to be stiffer|
00001150  0a 77 69 74 68 6f 75 74  20 65 78 70 6c 6f 64 69  |.without explodi|
00001160  6e 67 2c 20 73 6f 20 74  68 65 20 73 70 72 69 6e  |ng, so the sprin|
00001170  67 20 63 6f 6e 73 74 61  6e 74 73 20 69 6e 20 74  |g constants in t|
00001180  68 65 20 6f 62 6a 65 63  74 73 20 61 72 65 20 61  |he objects are a|
00001190  75 74 6f 6d 61 74 69 63  61 6c 6c 79 0a 69 6e 63  |utomatically.inc|
000011a0  72 65 61 73 65 64 20 77  68 65 6e 20 74 68 69 73  |reased when this|
000011b0  20 76 61 6c 75 65 20 69  73 20 69 6e 63 72 65 61  | value is increa|
000011c0  73 65 64 2e 0a 0a 0a 54  48 45 20 52 45 4e 44 45  |sed....THE RENDE|
000011d0  52 49 4e 47 20 42 4c 4f  43 4b 0a 0a 20 20 20 20  |RING BLOCK..    |
000011e0  20 20 20 20 54 68 65 20  6f 74 68 65 72 20 73 65  |    The other se|
000011f0  74 20 6f 66 20 6f 70 74  69 6f 6e 73 20 61 66 66  |t of options aff|
00001200  65 63 74 73 20 74 68 65  20 61 70 70 65 61 72 61  |ects the appeara|
00001210  6e 63 65 20 6f 66 20 74  68 65 20 70 69 63 74 75  |nce of the pictu|
00001220  72 65 20 6f 6e 0a 74 68  65 20 73 63 72 65 65 6e  |re on.the screen|
00001230  2e 20 20 54 68 69 73 20  69 73 20 63 61 6c 6c 65  |.  This is calle|
00001240  64 20 74 68 65 20 22 72  65 6e 64 65 72 69 6e 67  |d the "rendering|
00001250  20 62 6c 6f 63 6b 22 20  61 6e 64 20 6c 6f 6f 6b  | block" and look|
00001260  73 20 6c 69 6b 65 20 74  68 69 73 3a 0a 20 0a 20  |s like this:. . |
00001270  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
00001280  65 6e 64 65 72 69 6e 67  20 7b 0a 20 20 20 20 20  |endering {.     |
00001290  20 20 20 20 20 20 20 20  20 20 20 20 74 79 70 65  |            type|
000012a0  20 3c 72 65 6e 64 65 72  5f 74 79 70 65 3e 0a 20  | <render_type>. |
000012b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000012c0  72 65 73 6f 6c 75 74 69  6f 6e 20 3c 6e 75 6d 62  |resolution <numb|
000012d0  65 72 3e 2c 3c 6e 75 6d  62 65 72 3e 0a 20 20 20  |er>,<number>.   |
000012e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 76 69  |              vi|
000012f0  65 77 20 3c 6e 75 6d 62  65 72 3e 2c 3c 6e 75 6d  |ew <number>,<num|
00001300  62 65 72 3e 0a 20 20 20  20 20 20 20 20 20 20 20  |ber>.           |
00001310  20 20 20 20 20 20 62 61  63 6b 67 72 6f 75 6e 64  |      background|
00001320  20 3c 62 61 63 6b 5f 74  79 70 65 3e 0a 20 20 20  | <back_type>.   |
00001330  20 20 20 20 20 20 20 20  20 20 20 20 20 7d 0a 0a  |             }..|
00001340  20 20 20 20 20 20 20 20  3c 72 65 6e 64 65 72 5f  |        <render_|
00001350  74 79 70 65 3e 20 69 73  20 6f 6e 65 20 6f 66 20  |type> is one of |
00001360  22 64 6f 74 73 22 2c 20  22 6c 69 6e 65 73 22 2c  |"dots", "lines",|
00001370  20 22 61 6c 6c 5f 64 6f  74 73 22 20 6f 72 20 22  | "all_dots" or "|
00001380  77 69 72 65 66 72 61 6d  65 22 2e 20 0a 22 44 6f  |wireframe". ."Do|
00001390  74 73 22 20 64 72 61 77  73 20 74 68 65 20 70 6f  |ts" draws the po|
000013a0  69 6e 74 73 20 61 74 20  74 68 65 20 63 6f 72 6e  |ints at the corn|
000013b0  65 72 73 20 6f 66 20 74  68 65 20 73 75 72 66 61  |ers of the surfa|
000013c0  63 65 20 66 61 63 65 74  73 2c 20 61 6e 64 20 22  |ce facets, and "|
000013d0  6c 69 6e 65 73 22 0a 64  72 61 77 73 20 74 68 65  |lines".draws the|
000013e0  20 65 64 67 65 73 20 6f  66 20 74 68 65 20 73 75  | edges of the su|
000013f0  72 66 61 63 65 20 66 61  63 65 74 73 2e 20 20 54  |rface facets.  T|
00001400  68 65 20 6f 74 68 65 72  20 74 77 6f 20 6f 70 74  |he other two opt|
00001410  69 6f 6e 73 20 64 6f 20  74 68 65 20 73 61 6d 65  |ions do the same|
00001420  0a 62 75 74 20 77 69 74  68 6f 75 74 20 72 65 6d  |.but without rem|
00001430  6f 76 69 6e 67 20 68 69  64 64 65 6e 20 73 75 72  |oving hidden sur|
00001440  66 61 63 65 73 2e 20 20  54 68 65 20 22 64 6f 74  |faces.  The "dot|
00001450  73 22 20 6f 70 74 69 6f  6e 20 75 73 65 73 20 74  |s" option uses t|
00001460  68 65 20 6c 65 61 73 74  0a 6d 65 6d 6f 72 79 20  |he least.memory |
00001470  66 6f 72 20 66 72 61 6d  65 20 73 74 6f 72 61 67  |for frame storag|
00001480  65 2c 20 61 6e 64 20 22  61 6c 6c 5f 64 6f 74 73  |e, and "all_dots|
00001490  22 20 69 73 20 74 68 65  20 71 75 69 63 6b 65 73  |" is the quickes|
000014a0  74 20 74 6f 20 64 72 61  77 2e 0a 0a 20 20 20 20  |t to draw...    |
000014b0  20 20 20 20 54 68 65 20  22 72 65 73 6f 6c 75 74  |    The "resolut|
000014c0  69 6f 6e 22 20 63 6f 6d  6d 61 6e 64 20 6c 65 74  |ion" command let|
000014d0  73 20 79 6f 75 20 63 68  6f 6f 73 65 20 74 68 65  |s you choose the|
000014e0  20 73 63 72 65 65 6e 20  72 65 73 6f 6c 75 74 69  | screen resoluti|
000014f0  6f 6e 20 79 6f 75 0a 77  61 6e 74 20 74 6f 20 75  |on you.want to u|
00001500  73 65 2c 20 62 79 20 73  70 65 63 69 66 79 69 6e  |se, by specifyin|
00001510  67 20 74 68 65 20 6e 75  6d 62 65 72 20 6f 66 20  |g the number of |
00001520  68 6f 72 69 7a 6f 6e 74  61 6c 20 61 6e 64 20 76  |horizontal and v|
00001530  65 72 74 69 63 61 6c 20  70 69 78 65 6c 73 2e 20  |ertical pixels. |
00001540  0a 55 73 65 66 75 6c 20  76 61 6c 75 65 73 20 61  |.Useful values a|
00001550  72 65 20 33 32 30 2c 32  35 36 20 28 6c 6f 77 20  |re 320,256 (low |
00001560  72 65 73 6f 6c 75 74 69  6f 6e 29 20 36 34 30 2c  |resolution) 640,|
00001570  32 35 36 20 28 68 69 67  68 20 72 65 73 6f 6c 75  |256 (high resolu|
00001580  74 69 6f 6e 29 20 61 6e  64 0a 36 34 30 2c 35 31  |tion) and.640,51|
00001590  32 20 28 6d 75 6c 74 69  73 79 6e 63 20 6d 6f 6e  |2 (multisync mon|
000015a0  69 74 6f 72 73 29 2c 20  62 75 74 20 79 6f 75 20  |itors), but you |
000015b0  63 61 6e 20 75 73 65 20  61 6e 79 20 72 65 73 6f  |can use any reso|
000015c0  6c 75 74 69 6f 6e 20 66  6f 72 20 77 68 69 63 68  |lution for which|
000015d0  20 74 68 65 72 65 0a 69  73 20 61 20 73 63 72 65  | there.is a scre|
000015e0  65 6e 20 6d 6f 64 65 2e  20 20 54 68 65 20 70 72  |en mode.  The pr|
000015f0  6f 67 72 61 6d 20 77 69  6c 6c 20 67 69 76 65 20  |ogram will give |
00001600  61 6e 20 65 72 72 6f 72  20 6f 66 20 74 68 65 72  |an error of ther|
00001610  65 20 69 73 20 6e 6f 20  6d 6f 64 65 20 77 68 69  |e is no mode whi|
00001620  63 68 0a 66 69 74 73 2e  20 20 57 68 65 6e 20 63  |ch.fits.  When c|
00001630  68 6f 6f 73 69 6e 67 20  61 20 72 65 73 6f 6c 75  |hoosing a resolu|
00001640  74 69 6f 6e 2c 20 62 65  61 72 20 69 6e 20 6d 69  |tion, bear in mi|
00001650  6e 64 20 74 68 61 74 20  68 69 67 68 65 72 20 72  |nd that higher r|
00001660  65 73 6f 6c 75 74 69 6f  6e 73 20 77 69 6c 6c 0a  |esolutions will.|
00001670  74 61 6b 65 20 6d 6f 72  65 20 66 72 61 6d 65 20  |take more frame |
00001680  73 74 6f 72 61 67 65 20  73 70 61 63 65 2e 0a 0a  |storage space...|
00001690  20 20 20 20 20 20 20 20  22 56 69 65 77 22 20 73  |        "View" s|
000016a0  70 65 63 69 66 69 65 73  20 74 68 65 20 61 6e 67  |pecifies the ang|
000016b0  6c 65 20 66 72 6f 6d 20  77 68 69 63 68 20 79 6f  |le from which yo|
000016c0  75 20 6c 6f 6f 6b 20 61  74 20 74 68 65 20 73 63  |u look at the sc|
000016d0  65 6e 65 2e 20 20 54 68  65 0a 6e 75 6d 62 65 72  |ene.  The.number|
000016e0  73 20 61 72 65 20 61 6e  67 6c 65 73 20 69 6e 20  |s are angles in |
000016f0  64 65 67 72 65 65 73 2c  20 74 68 65 20 66 69 72  |degrees, the fir|
00001700  73 74 20 62 65 69 6e 67  20 74 68 65 20 64 69 72  |st being the dir|
00001710  65 63 74 69 6f 6e 20 69  6e 20 74 68 65 20 78 2d  |ection in the x-|
00001720  79 0a 70 6c 61 6e 65 2e  20 20 54 68 69 73 20 69  |y.plane.  This i|
00001730  73 20 74 68 65 20 61 6e  67 6c 65 20 74 68 72 6f  |s the angle thro|
00001740  75 67 68 20 77 68 69 63  68 20 74 68 65 20 73 63  |ugh which the sc|
00001750  65 6e 65 20 69 73 20 72  6f 74 61 74 65 64 20 61  |ene is rotated a|
00001760  62 6f 75 74 20 74 68 65  0a 76 65 72 74 69 63 61  |bout the.vertica|
00001770  6c 20 61 78 69 73 2e 20  20 49 66 20 74 68 69 73  |l axis.  If this|
00001780  20 69 73 20 30 2c 20 74  68 65 20 78 20 64 69 72  | is 0, the x dir|
00001790  65 63 74 69 6f 6e 20 69  73 20 68 6f 72 69 7a 6f  |ection is horizo|
000017a0  6e 74 61 6c 6c 79 20 61  63 72 6f 73 73 20 79 6f  |ntally across yo|
000017b0  75 72 0a 73 63 72 65 65  6e 20 28 2b 78 20 6f 6e  |ur.screen (+x on|
000017c0  20 74 68 65 20 72 69 67  68 74 2c 20 2d 79 20 6f  | the right, -y o|
000017d0  6e 20 74 68 65 20 6c 65  66 74 29 20 61 6e 64 20  |n the left) and |
000017e0  74 68 65 20 2b 79 20 64  69 72 65 63 74 69 6f 6e  |the +y direction|
000017f0  20 69 73 20 6f 75 74 20  6f 66 20 74 68 65 0a 73  | is out of the.s|
00001800  63 72 65 65 6e 20 74 6f  77 61 72 64 73 20 79 6f  |creen towards yo|
00001810  75 2e 20 20 54 68 65 20  73 65 63 6f 6e 64 20 6e  |u.  The second n|
00001820  75 6d 62 65 72 20 69 73  20 74 68 65 20 22 65 6c  |umber is the "el|
00001830  65 76 61 74 69 6f 6e 22  3a 20 61 6e 20 76 61 6c  |evation": an val|
00001840  75 65 20 6f 66 20 7a 65  72 6f 0a 77 69 6c 6c 20  |ue of zero.will |
00001850  70 75 74 20 74 68 65 20  76 69 65 77 70 6f 69 6e  |put the viewpoin|
00001860  74 20 6f 6e 20 74 68 65  20 78 2d 79 20 70 6c 61  |t on the x-y pla|
00001870  6e 65 20 28 6c 6f 6f 6b  69 6e 67 20 68 6f 72 69  |ne (looking hori|
00001880  7a 6f 6e 74 61 6c 6c 79  2c 20 2b 7a 20 61 78 69  |zontally, +z axi|
00001890  73 0a 76 65 72 74 69 63  61 6c 6c 79 20 75 70 77  |s.vertically upw|
000018a0  61 72 64 73 29 2c 20 61  6e 64 20 61 6e 20 61 6e  |ards), and an an|
000018b0  67 6c 65 20 6f 66 20 39  30 20 77 6f 75 6c 64 20  |gle of 90 would |
000018c0  68 61 76 65 20 79 6f 75  20 6c 6f 6f 6b 69 6e 67  |have you looking|
000018d0  20 64 69 72 65 63 74 6c  79 20 64 6f 77 6e 0a 66  | directly down.f|
000018e0  72 6f 6d 20 61 62 6f 76  65 2e 0a 0a 20 20 20 20  |rom above...    |
000018f0  20 20 20 20 54 68 65 20  22 62 61 63 6b 67 72 6f  |    The "backgro|
00001900  75 6e 64 22 20 63 6f 6d  6d 61 6e 64 20 69 73 20  |und" command is |
00001910  6f 70 74 69 6f 6e 61 6c  3a 20 69 66 20 79 6f 75  |optional: if you|
00001920  20 69 6e 63 6c 75 64 65  20 22 62 61 63 6b 67 72  | include "backgr|
00001930  6f 75 6e 64 0a 62 61 63  6b 22 20 69 6e 20 74 68  |ound.back" in th|
00001940  65 20 72 65 6e 64 65 72  69 6e 67 20 62 6c 6f 63  |e rendering bloc|
00001950  6b 2c 20 74 68 65 20 70  72 6f 67 72 61 6d 20 61  |k, the program a|
00001960  73 73 75 6d 65 73 20 74  68 61 74 20 74 68 65 20  |ssumes that the |
00001970  62 61 63 6b 67 72 6f 75  6e 64 0a 6f 62 6a 65 63  |background.objec|
00001980  74 28 73 29 20 61 72 65  20 61 6c 77 61 79 73 20  |t(s) are always |
00001990  62 65 68 69 6e 64 20 74  68 65 20 73 6f 6c 69 64  |behind the solid|
000019a0  20 6f 62 6a 65 63 74 28  73 29 2c 20 61 6e 64 20  | object(s), and |
000019b0  64 6f 65 73 20 6e 6f 74  20 72 65 64 72 61 77 20  |does not redraw |
000019c0  74 68 65 0a 62 61 63 6b  67 72 6f 75 6e 64 20 65  |the.background e|
000019d0  76 65 72 79 20 66 72 61  6d 65 2e 20 20 54 68 69  |very frame.  Thi|
000019e0  73 20 69 73 20 75 73 65  66 75 6c 2c 20 66 6f 72  |s is useful, for|
000019f0  20 65 78 61 6d 70 6c 65  2c 20 77 68 65 6e 20 74  | example, when t|
00001a00  68 65 20 62 61 63 6b 67  72 6f 75 6e 64 20 69 73  |he background is|
00001a10  0a 61 20 73 65 74 20 6f  66 20 73 74 61 69 72 73  |.a set of stairs|
00001a20  2c 20 61 73 20 69 74 20  72 65 64 75 63 65 73 20  |, as it reduces |
00001a30  74 68 65 20 66 72 61 6d  65 20 64 72 61 77 69 6e  |the frame drawin|
00001a40  67 20 74 69 6d 65 2e 20  20 54 68 65 20 64 65 66  |g time.  The def|
00001a50  61 75 6c 74 20 73 65 74  74 69 6e 67 0a 69 73 20  |ault setting.is |
00001a60  22 62 61 63 6b 67 72 6f  75 6e 64 20 6d 69 78 22  |"background mix"|
00001a70  20 77 68 69 63 68 20 6c  65 74 73 20 74 68 65 20  | which lets the |
00001a80  62 61 63 6b 67 72 6f 75  6e 64 20 6f 62 6a 65 63  |background objec|
00001a90  74 28 73 29 20 62 65 20  70 61 72 74 6c 79 20 69  |t(s) be partly i|
00001aa0  6e 20 66 72 6f 6e 74 0a  6f 66 20 61 6e 64 20 70  |n front.of and p|
00001ab0  61 72 74 6c 79 20 62 65  68 69 6e 64 20 74 68 65  |artly behind the|
00001ac0  20 73 6f 6c 69 64 28 73  29 2e 0a 0a 20 20 20 20  | solid(s)...    |
00001ad0  20 20 20 20 54 68 65 20  6f 72 64 65 72 20 69 6e  |    The order in|
00001ae0  20 77 68 69 63 68 20 61  6e 79 20 6f 66 20 74 68  | which any of th|
00001af0  65 20 61 62 6f 76 65 20  6f 70 74 69 6f 6e 73 20  |e above options |
00001b00  61 72 65 20 61 72 72 61  6e 67 65 64 20 64 6f 65  |are arranged doe|
00001b10  73 20 6e 6f 74 0a 6d 61  74 74 65 72 2c 20 61 73  |s not.matter, as|
00001b20  20 6c 6f 6e 67 20 61 73  20 74 68 65 20 72 65 6e  | long as the ren|
00001b30  64 65 72 69 6e 67 20 6f  70 74 69 6f 6e 73 20 61  |dering options a|
00001b40  72 65 20 6b 65 70 74 20  69 6e 73 69 64 65 20 74  |re kept inside t|
00001b50  68 65 20 72 65 6e 64 65  72 69 6e 67 0a 62 6c 6f  |he rendering.blo|
00001b60  63 6b 2e 0a 0a 0a 20 20  20 20 20 20 20 20 43 52  |ck....        CR|
00001b70  45 41 54 49 4e 47 20 4f  42 4a 45 43 54 53 3a 20  |EATING OBJECTS: |
00001b80  42 41 43 4b 47 52 4f 55  4e 44 20 4f 42 4a 45 43  |BACKGROUND OBJEC|
00001b90  54 53 0a 0a 20 20 20 20  20 20 20 20 42 61 63 6b  |TS..        Back|
00001ba0  67 72 6f 75 6e 64 20 6f  62 6a 65 63 74 73 20 61  |ground objects a|
00001bb0  72 65 20 74 68 65 20 66  69 78 65 64 20 70 69 65  |re the fixed pie|
00001bc0  63 65 73 20 6f 66 20 73  63 65 6e 65 72 79 20 77  |ces of scenery w|
00001bd0  68 69 63 68 20 74 68 65  20 6d 6f 76 69 6e 67 0a  |hich the moving.|
00001be0  6f 62 6a 65 63 74 73 20  69 6e 74 65 72 61 63 74  |objects interact|
00001bf0  20 77 69 74 68 2e 20 20  59 6f 75 20 63 61 6e 20  | with.  You can |
00001c00  68 61 76 65 20 61 73 20  6d 61 6e 79 20 62 61 63  |have as many bac|
00001c10  6b 67 72 6f 75 6e 64 20  6f 62 6a 65 63 74 73 20  |kground objects |
00001c20  61 73 20 79 6f 75 20 77  61 6e 74 3a 0a 74 68 65  |as you want:.the|
00001c30  79 20 61 72 65 20 61 6c  6c 20 63 72 65 61 74 65  |y are all create|
00001c40  64 20 61 74 20 74 68 65  20 6f 72 69 67 69 6e 20  |d at the origin |
00001c50  62 75 74 20 74 68 65 79  20 63 61 6e 20 62 65 20  |but they can be |
00001c60  6d 6f 76 65 64 20 74 6f  20 61 6e 79 20 70 6f 73  |moved to any pos|
00001c70  69 74 69 6f 6e 2e 0a 0a  20 20 20 20 20 20 20 20  |ition...        |
00001c80  54 68 65 20 73 63 72 69  70 74 20 74 6f 20 63 72  |The script to cr|
00001c90  65 61 74 65 20 61 20 62  61 63 6b 67 72 6f 75 6e  |eate a backgroun|
00001ca0  64 20 6f 62 6a 65 63 74  20 69 73 20 61 73 20 66  |d object is as f|
00001cb0  6f 6c 6c 6f 77 73 3a 0a  0a 20 20 20 20 20 20 20  |ollows:..       |
00001cc0  20 20 20 20 20 20 20 20  20 62 61 63 6b 67 72 6f  |         backgro|
00001cd0  75 6e 64 20 7b 0a 20 20  20 20 20 20 20 20 20 20  |und {.          |
00001ce0  20 20 20 20 20 20 20 63  72 65 61 74 65 20 7b 0a  |       create {.|
00001cf0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001d00  20 20 74 79 70 65 20 3c  6f 62 6a 65 63 74 5f 74  |  type <object_t|
00001d10  79 70 65 3e 0a 20 20 20  20 20 20 20 20 20 20 20  |ype>.           |
00001d20  20 20 20 20 20 20 20 70  6f 69 6e 74 73 20 3c 70  |       points <p|
00001d30  6f 69 6e 74 73 5f 73 70  65 63 3e 0a 20 20 20 20  |oints_spec>.    |
00001d40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 73 69  |              si|
00001d50  7a 65 20 3c 73 69 7a 65  5f 73 70 65 63 3e 0a 20  |ze <size_spec>. |
00001d60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001d70  7d 0a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |}.              |
00001d80  20 20 20 74 72 61 6e 73  6c 61 74 65 20 3c 78 3e  |   translate <x>|
00001d90  2c 3c 79 3e 2c 3c 7a 3e  0a 20 20 20 20 20 20 20  |,<y>,<z>.       |
00001da0  20 20 20 20 20 20 20 20  20 7d 0a 0a 20 20 20 20  |         }..    |
00001db0  20 20 20 20 54 68 65 20  69 6e 64 65 6e 74 61 74  |    The indentat|
00001dc0  69 6f 6e 20 69 73 20 6f  70 74 69 6f 6e 61 6c 3a  |ion is optional:|
00001dd0  20 69 74 20 77 61 73 20  61 64 64 65 64 20 66 6f  | it was added fo|
00001de0  72 20 63 6c 61 72 69 74  79 2e 20 20 54 68 65 20  |r clarity.  The |
00001df0  66 69 72 73 74 0a 74 68  69 6e 67 20 69 6e 20 61  |first.thing in a|
00001e00  20 62 61 63 6b 67 72 6f  75 6e 64 20 62 6c 6f 63  | background bloc|
00001e10  6b 20 6d 75 73 74 20 62  65 20 61 20 63 72 65 61  |k must be a crea|
00001e20  74 65 20 62 6c 6f 63 6b  2c 20 61 6e 64 20 74 68  |te block, and th|
00001e30  65 72 65 20 6d 75 73 74  20 62 65 20 6f 6e 6c 79  |ere must be only|
00001e40  0a 6f 6e 65 20 6f 66 20  74 68 65 73 65 2e 20 20  |.one of these.  |
00001e50  54 68 65 20 74 72 61 6e  73 6c 61 74 65 20 63 6f  |The translate co|
00001e60  6d 6d 61 6e 64 20 69 73  20 6f 70 74 69 6f 6e 61  |mmand is optiona|
00001e70  6c 2c 20 61 6e 64 20 74  68 65 72 65 20 6d 61 79  |l, and there may|
00001e80  20 62 65 20 61 6e 79 0a  6e 75 6d 62 65 72 20 6f  | be any.number o|
00001e90  66 20 74 68 65 73 65 2e  20 20 54 68 65 20 74 68  |f these.  The th|
00001ea0  72 65 65 20 70 61 72 61  6d 65 74 65 72 73 20 61  |ree parameters a|
00001eb0  72 65 20 74 68 65 20 61  6d 6f 75 6e 74 73 20 62  |re the amounts b|
00001ec0  79 20 77 68 69 63 68 20  74 6f 20 6d 6f 76 65 20  |y which to move |
00001ed0  74 68 65 0a 6f 62 6a 65  63 74 20 69 6e 20 74 68  |the.object in th|
00001ee0  65 20 78 2c 20 79 20 61  6e 64 20 7a 20 64 69 72  |e x, y and z dir|
00001ef0  65 63 74 69 6f 6e 73 2e  20 20 41 6c 6c 20 64 69  |ections.  All di|
00001f00  73 74 61 6e 63 65 73 20  73 68 6f 75 6c 64 20 62  |stances should b|
00001f10  65 20 66 6f 6c 6c 6f 77  65 64 20 62 79 20 61 0a  |e followed by a.|
00001f20  75 6e 69 74 2c 20 65 67  20 33 2e 33 69 6e 20 28  |unit, eg 3.3in (|
00001f30  77 69 74 68 20 6e 6f 20  73 65 70 61 72 61 74 69  |with no separati|
00001f40  6e 67 20 73 70 61 63 65  29 20 61 73 20 64 65 73  |ng space) as des|
00001f50  63 72 69 62 65 64 20 65  61 72 6c 69 65 72 2e 20  |cribed earlier. |
00001f60  20 54 68 65 20 64 65 66  61 75 6c 74 0a 75 6e 69  | The default.uni|
00001f70  74 20 69 73 20 31 2f 36  34 30 20 6f 66 20 61 20  |t is 1/640 of a |
00001f80  70 72 69 6e 74 65 72 27  73 20 70 6f 69 6e 74 20  |printer's point |
00001f90  28 61 20 76 65 72 79 20  73 6d 61 6c 6c 20 64 69  |(a very small di|
00001fa0  73 74 61 6e 63 65 29 2c  20 73 6f 20 69 66 20 74  |stance), so if t|
00001fb0  68 65 0a 74 72 61 6e 73  6c 61 74 65 20 63 6f 6d  |he.translate com|
00001fc0  6d 61 6e 64 20 68 61 73  20 6e 6f 20 76 69 73 69  |mand has no visi|
00001fd0  62 6c 65 20 65 66 66 65  63 74 2c 20 63 68 65 63  |ble effect, chec|
00001fe0  6b 20 74 68 65 20 75 6e  69 74 73 2e 0a 0a 20 20  |k the units...  |
00001ff0  20 20 20 20 20 20 54 68  65 20 66 69 72 73 74 20  |      The first |
00002000  77 6f 72 64 20 69 6e 20  74 68 65 20 63 72 65 61  |word in the crea|
00002010  74 65 20 62 6c 6f 63 6b  20 6d 75 73 74 20 62 65  |te block must be|
00002020  20 22 74 79 70 65 22 2c  20 62 65 63 61 75 73 65  | "type", because|
00002030  20 74 68 65 0a 65 66 66  65 63 74 20 6f 66 20 74  | the.effect of t|
00002040  68 65 20 22 70 6f 69 6e  74 73 22 20 61 6e 64 20  |he "points" and |
00002050  22 73 69 7a 65 22 20 63  6f 6d 6d 61 6e 64 73 20  |"size" commands |
00002060  61 72 65 20 64 65 70 65  6e 64 61 6e 74 20 6f 6e  |are dependant on|
00002070  20 74 68 65 20 6f 62 6a  65 63 74 20 74 79 70 65  | the object type|
00002080  2e 0a 20 46 6f 72 20 61  20 62 61 63 6b 67 72 6f  |.. For a backgro|
00002090  75 6e 64 20 6f 62 6a 65  63 74 2c 20 3c 6f 62 6a  |und object, <obj|
000020a0  65 63 74 5f 74 79 70 65  3e 20 6d 75 73 74 20 62  |ect_type> must b|
000020b0  65 20 6f 6e 65 20 6f 66  20 22 73 68 65 65 74 22  |e one of "sheet"|
000020c0  2c 20 22 73 70 68 65 72  65 22 20 6f 72 0a 22 73  |, "sphere" or."s|
000020d0  74 61 69 72 73 22 2e 0a  0a 0a 54 48 45 20 53 50  |tairs"....THE SP|
000020e0  48 45 52 45 20 4f 42 4a  45 43 54 0a 0a 20 20 20  |HERE OBJECT..   |
000020f0  20 20 20 20 20 54 68 69  73 20 68 61 73 20 6f 6e  |     This has on|
00002100  65 20 22 70 6f 69 6e 74  73 22 20 70 61 72 61 6d  |e "points" param|
00002110  65 74 65 72 20 61 6e 64  20 6f 6e 65 20 22 73 69  |eter and one "si|
00002120  7a 65 22 20 70 61 72 61  6d 65 74 65 72 2c 20 69  |ze" parameter, i|
00002130  2e 65 2e 20 74 68 65 0a  77 6f 72 64 20 22 70 6f  |.e. the.word "po|
00002140  69 6e 74 73 22 20 6d 75  73 74 20 62 65 20 66 6f  |ints" must be fo|
00002150  6c 6c 6f 77 65 64 20 62  79 20 6f 6e 65 20 6e 75  |llowed by one nu|
00002160  6d 62 65 72 2c 20 61 6e  64 20 22 73 69 7a 65 22  |mber, and "size"|
00002170  20 6d 75 73 74 20 62 65  20 66 6f 6c 6c 6f 77 65  | must be followe|
00002180  64 20 62 79 0a 61 20 64  69 73 74 61 6e 63 65 2e  |d by.a distance.|
00002190  20 20 54 68 65 20 70 72  65 76 69 6f 75 73 20 72  |  The previous r|
000021a0  65 6d 61 72 6b 73 20 61  62 6f 75 74 20 75 6e 69  |emarks about uni|
000021b0  74 73 20 66 6f 72 20 64  69 73 74 61 6e 63 65 73  |ts for distances|
000021c0  20 61 6c 73 6f 20 61 70  70 6c 79 20 74 6f 0a 61  | also apply to.a|
000021d0  6c 6c 20 73 69 7a 65 20  70 61 72 61 6d 65 74 65  |ll size paramete|
000021e0  72 73 2e 20 20 54 68 65  20 73 69 7a 65 20 70 61  |rs.  The size pa|
000021f0  72 61 6d 65 74 65 72 20  66 6f 72 20 61 20 73 70  |rameter for a sp|
00002200  68 65 72 65 20 73 65 74  73 20 69 74 73 20 72 61  |here sets its ra|
00002210  64 69 75 73 2e 20 20 54  68 65 0a 70 6f 69 6e 74  |dius.  The.point|
00002220  73 20 70 61 72 61 6d 65  74 65 72 20 73 65 74 73  |s parameter sets|
00002230  20 74 68 65 20 6e 75 6d  62 65 72 20 6f 66 20 70  | the number of p|
00002240  6f 69 6e 74 73 20 75 73  65 64 20 74 6f 20 64 72  |oints used to dr|
00002250  61 77 20 74 68 65 20 73  70 68 65 72 65 3a 20 69  |aw the sphere: i|
00002260  66 20 74 68 69 73 0a 70  61 72 61 6d 65 74 65 72  |f this.parameter|
00002270  20 69 73 20 50 2c 20 74  68 65 72 65 20 61 72 65  | is P, there are|
00002280  20 50 20 72 69 6e 67 73  20 6f 66 20 70 6f 69 6e  | P rings of poin|
00002290  74 73 2c 20 61 6e 64 20  74 68 65 20 77 69 64 65  |ts, and the wide|
000022a0  73 74 20 6f 6e 65 20 63  6f 6e 74 61 69 6e 73 20  |st one contains |
000022b0  32 50 0a 70 6f 69 6e 74  73 2e 20 20 31 32 20 69  |2P.points.  12 i|
000022c0  73 20 61 6e 20 61 64 65  71 75 61 74 65 20 76 61  |s an adequate va|
000022d0  6c 75 65 20 66 6f 72 20  74 68 69 73 20 70 61 72  |lue for this par|
000022e0  61 6d 65 74 65 72 2e 0a  20 20 20 20 20 20 20 20  |ameter..        |
000022f0  59 6f 75 20 73 68 6f 75  6c 64 20 61 76 6f 69 64  |You should avoid|
00002300  20 63 72 65 61 74 69 6e  67 20 6f 62 6a 65 63 74  | creating object|
00002310  73 20 77 68 69 63 68 20  65 78 74 65 6e 64 20 69  |s which extend i|
00002320  6e 74 6f 20 61 20 73 70  68 65 72 65 2c 0a 62 65  |nto a sphere,.be|
00002330  63 61 75 73 65 20 74 68  65 73 65 20 77 69 6c 6c  |cause these will|
00002340  20 62 65 20 65 6a 65 63  74 65 64 20 6f 75 74 77  | be ejected outw|
00002350  61 72 64 73 20 76 69 6f  6c 65 6e 74 6c 79 2e 0a  |ards violently..|
00002360  0a 0a 54 48 45 20 53 48  45 45 54 20 4f 42 4a 45  |..THE SHEET OBJE|
00002370  43 54 0a 0a 20 20 20 20  20 20 20 20 54 68 69 73  |CT..        This|
00002380  20 68 61 73 20 6f 6e 65  20 22 70 6f 69 6e 74 73  | has one "points|
00002390  22 20 70 61 72 61 6d 65  74 65 72 20 61 6e 64 20  |" parameter and |
000023a0  6f 6e 65 20 22 73 69 7a  65 22 20 70 61 72 61 6d  |one "size" param|
000023b0  65 74 65 72 2e 20 20 53  68 65 65 74 73 0a 61 72  |eter.  Sheets.ar|
000023c0  65 20 61 6c 77 61 79 73  20 73 71 75 61 72 65 3a  |e always square:|
000023d0  20 74 68 65 20 70 6f 69  6e 74 73 20 70 61 72 61  | the points para|
000023e0  6d 65 74 65 72 20 73 65  74 73 20 74 68 65 20 6e  |meter sets the n|
000023f0  75 6d 62 65 72 20 6f 66  20 70 6f 69 6e 74 73 20  |umber of points |
00002400  61 6c 6f 6e 67 20 6f 6e  65 0a 73 69 64 65 2c 20  |along one.side, |
00002410  61 6e 64 20 74 68 65 20  73 69 7a 65 20 70 61 72  |and the size par|
00002420  61 6d 65 74 65 72 20 73  65 74 73 20 74 68 65 20  |ameter sets the |
00002430  6c 65 6e 67 74 68 20 6f  66 20 6f 6e 65 20 73 69  |length of one si|
00002440  64 65 2e 20 20 46 6f 72  20 65 78 61 6d 70 6c 65  |de.  For example|
00002450  2c 20 69 66 0a 79 6f 75  20 75 73 65 20 22 70 6f  |, if.you use "po|
00002460  69 6e 74 73 20 32 31 22  20 61 6e 64 20 22 73 69  |ints 21" and "si|
00002470  7a 65 20 35 69 6e 22 20  74 68 65 20 70 72 6f 67  |ze 5in" the prog|
00002480  72 61 6d 20 77 69 6c 6c  20 63 72 65 61 74 65 20  |ram will create |
00002490  61 20 73 68 65 65 74 20  77 69 74 68 20 32 31 20  |a sheet with 21 |
000024a0  78 0a 32 31 20 3d 20 34  34 31 20 70 6f 69 6e 74  |x.21 = 441 point|
000024b0  73 2c 20 73 6f 20 69 66  20 79 6f 75 20 75 73 65  |s, so if you use|
000024c0  20 22 6c 69 6e 65 73 22  20 61 73 20 74 68 65 20  | "lines" as the |
000024d0  72 65 6e 64 65 72 69 6e  67 20 74 79 70 65 20 74  |rendering type t|
000024e0  68 65 20 73 68 65 65 74  20 77 69 6c 6c 0a 62 65  |he sheet will.be|
000024f0  20 64 69 76 69 64 65 64  20 69 6e 74 6f 20 32 30  | divided into 20|
00002500  20 78 20 32 30 20 73 71  75 61 72 65 73 2c 20 65  | x 20 squares, e|
00002510  61 63 68 20 30 2e 32 35  69 6e 20 78 20 30 2e 32  |ach 0.25in x 0.2|
00002520  35 69 6e 2e 20 20 54 68  65 20 73 68 65 65 74 20  |5in.  The sheet |
00002530  69 73 20 63 72 65 61 74  65 64 0a 68 6f 72 69 7a  |is created.horiz|
00002540  6f 6e 74 61 6c 20 28 69  65 2e 20 6f 6e 20 74 68  |ontal (ie. on th|
00002550  65 20 78 2d 79 20 70 6c  61 6e 65 29 20 61 6e 64  |e x-y plane) and|
00002560  20 63 65 6e 74 72 65 64  20 6f 6e 20 74 68 65 20  | centred on the |
00002570  6f 72 69 67 69 6e 2c 20  73 6f 20 69 6e 20 74 68  |origin, so in th|
00002580  65 20 61 62 6f 76 65 0a  65 78 61 6d 70 6c 65 20  |e above.example |
00002590  74 68 65 20 73 68 65 65  74 20 77 6f 75 6c 64 20  |the sheet would |
000025a0  65 78 74 65 6e 64 20 66  72 6f 6d 20 2d 35 69 6e  |extend from -5in|
000025b0  20 74 6f 20 2b 35 69 6e  20 69 6e 20 74 68 65 20  | to +5in in the |
000025c0  78 20 64 69 72 65 63 74  69 6f 6e 2c 20 66 72 6f  |x direction, fro|
000025d0  6d 0a 2d 35 69 6e 20 74  6f 20 2b 35 69 6e 20 69  |m.-5in to +5in i|
000025e0  6e 20 74 68 65 20 79 20  64 69 72 65 63 74 69 6f  |n the y directio|
000025f0  6e 2c 20 61 6e 64 20 68  61 76 65 20 7a 3d 30 20  |n, and have z=0 |
00002600  66 6f 72 20 61 6c 6c 20  70 6f 69 6e 74 73 2e 0a  |for all points..|
00002610  0a 20 20 20 20 20 20 20  20 57 68 65 6e 20 74 68  |.        When th|
00002620  65 20 73 68 65 65 74 20  69 73 20 63 72 65 61 74  |e sheet is creat|
00002630  65 64 20 61 73 20 61 20  62 61 63 6b 67 72 6f 75  |ed as a backgrou|
00002640  6e 64 20 6f 62 6a 65 63  74 2c 20 69 74 20 64 65  |nd object, it de|
00002650  66 69 6e 65 73 20 61 0a  22 66 6c 6f 6f 72 22 2e  |fines a."floor".|
00002660  20 20 4e 6f 20 73 6f 6c  69 64 20 77 69 6c 6c 20  |  No solid will |
00002670  62 65 20 61 6c 6c 6f 77  65 64 20 74 6f 20 70 61  |be allowed to pa|
00002680  73 73 20 62 65 6c 6f 77  20 74 68 65 20 68 65 69  |ss below the hei|
00002690  67 68 74 20 6f 66 20 74  68 65 20 73 68 65 65 74  |ght of the sheet|
000026a0  2e 20 0a 59 6f 75 20 73  68 6f 75 6c 64 20 61 76  |. .You should av|
000026b0  6f 69 64 20 63 72 65 61  74 69 6e 67 20 6f 62 6a  |oid creating obj|
000026c0  65 63 74 73 20 77 68 69  63 68 20 65 78 74 65 6e  |ects which exten|
000026d0  64 20 62 65 6c 6f 77 20  74 68 65 20 66 6c 6f 6f  |d below the floo|
000026e0  72 2c 20 62 65 63 61 75  73 65 0a 74 68 65 73 65  |r, because.these|
000026f0  20 77 69 6c 6c 20 62 65  20 65 6a 65 63 74 65 64  | will be ejected|
00002700  20 75 70 77 61 72 64 73  20 76 69 6f 6c 65 6e 74  | upwards violent|
00002710  6c 79 2e 20 20 4e 6f 74  65 20 74 68 61 74 20 74  |ly.  Note that t|
00002720  68 65 20 66 6c 6f 6f 72  20 65 66 66 65 63 74 20  |he floor effect |
00002730  64 6f 65 73 0a 6e 6f 74  20 64 65 70 65 6e 64 20  |does.not depend |
00002740  6f 6e 20 74 68 65 20 73  69 7a 65 20 6f 66 20 74  |on the size of t|
00002750  68 65 20 73 68 65 65 74  2c 20 6f 6e 6c 79 20 6f  |he sheet, only o|
00002760  6e 20 69 74 73 20 76 65  72 74 69 63 61 6c 20 70  |n its vertical p|
00002770  6f 73 69 74 69 6f 6e 2e  3a 20 74 68 65 0a 65 66  |osition.: the.ef|
00002780  66 65 63 74 69 76 65 20  66 6c 6f 6f 72 20 69 73  |fective floor is|
00002790  20 61 6e 20 69 6e 66 69  6e 69 74 65 20 70 6c 61  | an infinite pla|
000027a0  6e 65 20 61 74 20 74 68  65 20 73 61 6d 65 20 68  |ne at the same h|
000027b0  65 69 67 68 74 20 61 73  20 74 68 65 20 73 68 65  |eight as the she|
000027c0  65 74 2e 20 20 49 66 0a  79 6f 75 20 77 61 6e 74  |et.  If.you want|
000027d0  65 64 20 61 6e 20 69 6e  76 69 73 69 62 6c 65 20  |ed an invisible |
000027e0  66 6c 6f 6f 72 2c 20 74  68 65 72 65 66 6f 72 65  |floor, therefore|
000027f0  2c 20 79 6f 75 20 63 6f  75 6c 64 20 63 72 65 61  |, you could crea|
00002800  74 65 20 61 20 73 6d 61  6c 6c 20 73 68 65 65 74  |te a small sheet|
00002810  0a 77 69 74 68 20 70 6f  69 6e 74 73 20 73 65 74  |.with points set|
00002820  20 74 6f 20 32 2c 20 61  6e 64 20 6d 6f 76 65 20  | to 2, and move |
00002830  69 74 20 6f 75 74 20 6f  66 20 73 69 67 68 74 20  |it out of sight |
00002840  69 6e 20 74 68 65 20 78  20 6f 72 20 79 20 64 69  |in the x or y di|
00002850  72 65 63 74 69 6f 6e 2e  0a 0a 0a 54 48 45 20 53  |rection....THE S|
00002860  54 41 49 52 53 20 4f 42  4a 45 43 54 0a 0a 20 20  |TAIRS OBJECT..  |
00002870  20 20 20 20 20 20 42 65  69 6e 67 20 61 20 6d 6f  |      Being a mo|
00002880  72 65 20 63 6f 6d 70 6c  65 78 20 6f 62 6a 65 63  |re complex objec|
00002890  74 2c 20 74 68 69 73 20  74 61 6b 65 73 20 74 68  |t, this takes th|
000028a0  72 65 65 20 70 6f 69 6e  74 73 20 70 61 72 61 6d  |ree points param|
000028b0  65 74 65 72 73 20 61 6e  64 0a 74 68 72 65 65 20  |eters and.three |
000028c0  73 69 7a 65 20 70 61 72  61 6d 65 74 65 72 73 2e  |size parameters.|
000028d0  20 20 4a 75 73 74 20 74  6f 20 63 6f 6e 66 75 73  |  Just to confus|
000028e0  65 20 74 68 69 6e 67 73  2c 20 74 68 65 20 70 6f  |e things, the po|
000028f0  69 6e 74 73 20 70 61 72  61 6d 65 74 65 72 73 20  |ints parameters |
00002900  64 6f 20 6e 6f 74 0a 63  6f 72 72 65 73 70 6f 6e  |do not.correspon|
00002910  64 20 74 6f 20 74 68 65  20 73 61 6d 65 20 66 65  |d to the same fe|
00002920  61 74 75 72 65 73 20 61  73 20 74 68 65 20 73 69  |atures as the si|
00002930  7a 65 20 70 61 72 61 6d  65 74 65 72 73 2c 20 75  |ze parameters, u|
00002940  6e 6c 69 6b 65 20 74 68  65 20 6f 74 68 65 72 0a  |nlike the other.|
00002950  6f 62 6a 65 63 74 73 2e  20 20 4c 65 74 27 73 20  |objects.  Let's |
00002960  74 61 6b 65 20 74 68 65  20 73 69 7a 65 20 70 61  |take the size pa|
00002970  72 61 6d 65 74 65 72 73  20 66 69 72 73 74 3b 20  |rameters first; |
00002980  74 68 65 73 65 20 61 72  65 3a 0a 0a 20 20 20 20  |these are:..    |
00002990  20 20 20 20 20 20 20 20  20 20 20 20 73 69 7a 65  |            size|
000029a0  20 3c 73 74 65 70 5f 77  69 64 74 68 3e 2c 3c 73  | <step_width>,<s|
000029b0  74 65 70 5f 68 65 69 67  68 74 3e 2c 3c 73 74 65  |tep_height>,<ste|
000029c0  70 5f 64 65 70 74 68 3e  0a 0a 20 20 20 20 20 20  |p_depth>..      |
000029d0  20 20 54 68 65 73 65 20  61 72 65 20 71 75 69 74  |  These are quit|
000029e0  65 20 6f 62 76 69 6f 75  73 3a 20 3c 73 74 65 70  |e obvious: <step|
000029f0  5f 77 69 64 74 68 3e 20  69 73 20 74 68 65 20 77  |_width> is the w|
00002a00  69 64 74 68 20 6f 66 20  74 68 65 20 73 74 65 70  |idth of the step|
00002a10  73 0a 61 6c 6f 6e 67 20  74 68 65 20 78 20 61 78  |s.along the x ax|
00002a20  69 73 20 28 73 65 65 20  64 69 61 67 72 61 6d 20  |is (see diagram |
00002a30  62 65 6c 6f 77 29 2c 20  3c 73 74 65 70 5f 68 65  |below), <step_he|
00002a40  69 67 68 74 3e 20 69 73  20 74 68 65 20 61 6d 6f  |ight> is the amo|
00002a50  75 6e 74 20 79 6f 75 20  77 6f 75 6c 64 0a 68 61  |unt you would.ha|
00002a60  76 65 20 74 6f 20 6c 69  66 74 20 79 6f 75 72 20  |ve to lift your |
00002a70  66 65 65 74 20 28 7a 20  64 69 72 65 63 74 69 6f  |feet (z directio|
00002a80  6e 29 20 61 6e 64 20 3c  73 74 65 70 5f 64 65 70  |n) and <step_dep|
00002a90  74 68 3e 20 69 73 20 74  68 65 20 61 6d 6f 75 6e  |th> is the amoun|
00002aa0  74 20 6f 66 20 72 6f 6f  6d 0a 79 6f 75 20 68 61  |t of room.you ha|
00002ab0  76 65 20 66 6f 72 20 79  6f 75 72 20 66 65 65 74  |ve for your feet|
00002ac0  20 6f 6e 20 65 61 63 68  20 73 74 65 70 20 28 79  | on each step (y|
00002ad0  20 64 69 72 65 63 74 69  6f 6e 29 2e 0a 0a 20 20  | direction)...  |
00002ae0  20 20 20 20 20 20 54 68  65 20 70 6f 69 6e 74 73  |      The points|
00002af0  20 70 61 72 61 6d 65 74  65 72 73 20 61 72 65 3a  | parameters are:|
00002b00  0a 0a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |..              |
00002b10  20 20 70 6f 69 6e 74 73  20 3c 70 74 73 5f 77 69  |  points <pts_wi|
00002b20  64 74 68 3e 2c 3c 73 74  65 70 73 3e 2c 3c 70 74  |dth>,<steps>,<pt|
00002b30  73 5f 64 65 70 74 68 3e  0a 0a 20 20 20 20 20 20  |s_depth>..      |
00002b40  20 20 54 68 65 20 66 69  72 73 74 20 61 6e 64 20  |  The first and |
00002b50  74 68 69 72 64 20 6f 66  20 74 68 65 73 65 20 6a  |third of these j|
00002b60  75 73 74 20 73 65 74 20  74 68 65 20 6e 75 6d 62  |ust set the numb|
00002b70  65 72 20 6f 66 20 70 6f  69 6e 74 73 20 75 73 65  |er of points use|
00002b80  64 20 74 6f 0a 64 72 61  77 20 74 68 65 20 68 6f  |d to.draw the ho|
00002b90  72 69 7a 6f 6e 74 61 6c  20 70 61 72 74 20 6f 66  |rizontal part of|
00002ba0  20 74 68 65 20 73 74 65  70 73 3a 20 74 68 65 20  | the steps: the |
00002bb0  73 65 63 6f 6e 64 20 73  65 74 73 20 74 68 65 20  |second sets the |
00002bc0  6e 75 6d 62 65 72 20 6f  66 20 73 74 65 70 73 2e  |number of steps.|
00002bd0  0a 0a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |..              |
00002be0  20 2b 0a 20 20 20 20 20  20 20 20 20 20 20 20 20  | +.             |
00002bf0  20 20 7c 5c 0a 20 20 20  20 20 20 20 20 20 20 20  |  |\.           |
00002c00  2b 2d 2d 2d 2b 20 5c 20  20 20 20 20 41 78 65 73  |+---+ \     Axes|
00002c10  3a 0a 20 20 20 20 20 20  20 20 20 20 20 7c 5c 20  |:.           |\ |
00002c20  20 20 5c 20 5c 20 20 20  20 20 20 7a 0a 20 20 20  |  \ \      z.   |
00002c30  20 20 20 20 2b 2d 2d 2d  2b 20 5c 20 20 20 5c 20  |    +---+ \   \ |
00002c40  2b 20 20 20 20 20 7c 0a  20 20 20 20 20 20 20 7c  |+     |.       ||
00002c50  5c 20 20 20 5c 20 5c 20  20 20 5c 7c 20 20 20 20  |\   \ \   \|    |
00002c60  20 7c 0a 20 20 20 2b 2d  2d 2d 2b 20 5c 20 20 20  | |.   +---+ \   |
00002c70  5c 20 2b 2d 2d 2d 2b 20  20 20 20 20 2a 2d 2d 2d  |\ +---+     *---|
00002c80  2d 2d 79 0a 20 20 20 20  5c 20 20 20 5c 20 5c 20  |--y.    \   \ \ |
00002c90  20 20 5c 7c 20 20 20 20  20 20 20 20 20 20 5c 0a  |  \|          \.|
00002ca0  20 20 20 20 20 4f 20 20  20 5c 20 2b 2d 2d 2d 2b  |     O   \ +---+|
00002cb0  20 20 20 20 20 20 20 20  20 20 20 5c 0a 20 20 20  |           \.   |
00002cc0  20 20 20 5c 20 20 20 5c  7c 20 20 20 20 20 20 20  |   \   \|       |
00002cd0  20 20 20 20 20 20 20 20  20 78 0a 20 20 20 20 20  |         x.     |
00002ce0  20 20 2b 2d 2d 2d 2b 20  20 20 20 20 20 20 20 20  |  +---+         |
00002cf0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 4f  |               O|
00002d00  20 69 73 20 74 68 65 20  70 6f 73 69 74 69 6f 6e  | is the position|
00002d10  20 6f 66 20 74 68 65 20  6f 72 69 67 69 6e 0a 0a  | of the origin..|
00002d20  20 20 20 20 20 20 20 20  54 68 65 20 61 62 6f 76  |        The abov|
00002d30  65 20 64 69 61 67 72 61  6d 20 73 68 6f 77 73 20  |e diagram shows |
00002d40  74 68 65 20 6f 72 69 65  6e 74 61 74 69 6f 6e 20  |the orientation |
00002d50  61 6e 64 20 69 6e 69 74  69 61 6c 20 70 6f 73 69  |and initial posi|
00002d60  74 69 6f 6e 20 6f 66 20  74 68 65 0a 73 74 61 69  |tion of the.stai|
00002d70  72 73 2e 20 20 59 6f 75  20 77 69 6c 6c 20 6e 6f  |rs.  You will no|
00002d80  72 6d 61 6c 6c 79 20 77  61 6e 74 20 74 6f 20 74  |rmally want to t|
00002d90  72 61 6e 73 6c 61 74 65  20 74 68 65 20 73 74 61  |ranslate the sta|
00002da0  69 72 73 20 69 6e 20 74  68 65 20 2d 79 2c 2d 7a  |irs in the -y,-z|
00002db0  0a 64 69 72 65 63 74 69  6f 6e 20 61 66 74 65 72  |.direction after|
00002dc0  20 63 72 65 61 74 69 6e  67 20 74 68 65 6d 2e 20  | creating them. |
00002dd0  20 4e 6f 74 65 20 74 68  61 74 20 64 75 65 20 74  | Note that due t|
00002de0  6f 20 74 68 65 20 6f 72  69 65 6e 74 61 74 69 6f  |o the orientatio|
00002df0  6e 2c 20 74 68 65 20 66  69 72 73 74 0a 76 69 65  |n, the first.vie|
00002e00  77 20 70 61 72 61 6d 65  74 65 72 20 77 69 6c 6c  |w parameter will|
00002e10  20 6e 65 65 64 20 74 6f  20 62 65 20 62 65 74 77  | need to be betw|
00002e20  65 65 6e 20 39 30 20 61  6e 64 20 32 37 30 20 66  |een 90 and 270 f|
00002e30  6f 72 20 74 68 65 20 76  69 65 77 70 6f 69 6e 74  |or the viewpoint|
00002e40  20 74 6f 20 62 65 20 6f  6e 0a 74 68 65 20 72 69  | to be on.the ri|
00002e50  67 68 74 20 73 69 64 65  20 6f 66 20 74 68 65 20  |ght side of the |
00002e60  73 74 61 69 72 73 2e 0a  0a 20 20 20 20 20 20 20  |stairs...       |
00002e70  20 4c 69 6b 65 20 74 68  65 20 73 68 65 65 74 2c  | Like the sheet,|
00002e80  20 74 68 65 20 65 78 74  65 6e 74 20 6f 66 20 74  | the extent of t|
00002e90  68 65 20 73 74 61 69 72  73 20 69 73 20 69 6e 20  |he stairs is in |
00002ea0  66 61 63 74 20 69 6e 66  69 6e 69 74 65 3a 20 73  |fact infinite: s|
00002eb0  6f 6c 69 64 73 0a 64 6f  20 6e 6f 74 20 66 61 6c  |olids.do not fal|
00002ec0  6c 20 6f 66 66 20 74 68  65 20 73 69 64 65 73 20  |l off the sides |
00002ed0  6f 66 20 74 68 65 20 73  74 61 69 72 73 2c 20 61  |of the stairs, a|
00002ee0  6e 64 20 74 68 65 20 73  74 61 69 72 73 20 63 6f  |nd the stairs co|
00002ef0  6e 74 69 6e 75 65 20 61  62 6f 76 65 20 61 6e 64  |ntinue above and|
00002f00  0a 62 65 6c 6f 77 20 74  68 6f 73 65 20 77 68 69  |.below those whi|
00002f10  63 68 20 61 72 65 20 76  69 73 69 62 6c 65 2e 0a  |ch are visible..|
00002f20  0a 0a 20 20 20 20 20 20  20 20 43 52 45 41 54 49  |..        CREATI|
00002f30  4e 47 20 4f 42 4a 45 43  54 53 3a 20 53 4f 4c 49  |NG OBJECTS: SOLI|
00002f40  44 20 4f 42 4a 45 43 54  53 0a 0a 20 20 20 20 20  |D OBJECTS..     |
00002f50  20 20 20 20 20 20 20 20  20 20 20 73 6f 6c 69 64  |           solid|
00002f60  20 7b 0a 20 20 20 20 20  20 20 20 20 20 20 20 20  | {.             |
00002f70  20 20 20 20 63 72 65 61  74 65 20 7b 0a 20 20 20  |    create {.   |
00002f80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 74  |               t|
00002f90  79 70 65 20 3c 6f 62 6a  65 63 74 5f 74 79 70 65  |ype <object_type|
00002fa0  3e 0a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |>.              |
00002fb0  20 20 20 20 70 6f 69 6e  74 73 20 3c 70 6f 69 6e  |    points <poin|
00002fc0  74 73 5f 73 70 65 63 3e  0a 20 20 20 20 20 20 20  |ts_spec>.       |
00002fd0  20 20 20 20 20 20 20 20  20 20 20 73 69 7a 65 20  |           size |
00002fe0  3c 73 69 7a 65 5f 73 70  65 63 3e 0a 20 20 20 20  |<size_spec>.    |
00002ff0  20 20 20 20 20 20 20 20  20 20 20 20 20 7d 0a 20  |             }. |
00003000  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003010  73 63 61 6c 65 20 3c 78  73 3e 2c 3c 79 73 3e 2c  |scale <xs>,<ys>,|
00003020  3c 7a 73 3e 0a 20 20 20  20 20 20 20 20 20 20 20  |<zs>.           |
00003030  20 20 20 20 20 20 6e 65  61 72 62 6f 6e 64 73 20  |      nearbonds |
00003040  7b 0a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |{.              |
00003050  20 20 20 20 73 70 72 69  6e 67 5f 63 6f 6e 73 74  |    spring_const|
00003060  20 3c 6c 61 6d 62 64 61  3e 0a 20 20 20 20 20 20  | <lambda>.      |
00003070  20 20 20 20 20 20 20 20  20 20 20 20 72 61 6e 67  |            rang|
00003080  65 20 3c 72 61 6e 67 65  5f 76 61 6c 3e 0a 20 20  |e <range_val>.  |
00003090  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 7d  |               }|
000030a0  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
000030b0  20 20 3c 6f 74 68 65 72  20 63 6f 6d 6d 61 6e 64  |  <other command|
000030c0  73 3e 0a 20 20 20 20 20  20 20 20 20 20 20 20 20  |s>.             |
000030d0  20 20 20 7d 0a 0a 20 20  20 20 20 20 20 20 54 68  |   }..        Th|
000030e0  65 20 62 6c 6f 63 6b 20  74 6f 20 63 72 65 61 74  |e block to creat|
000030f0  65 20 61 20 73 6f 6c 69  64 20 73 74 61 72 74 73  |e a solid starts|
00003100  20 77 69 74 68 20 61 20  22 63 72 65 61 74 65 22  | with a "create"|
00003110  20 62 6c 6f 63 6b 2c 20  6c 69 6b 65 0a 62 61 63  | block, like.bac|
00003120  6b 67 72 6f 75 6e 64 73  2e 20 20 54 68 65 20 6f  |kgrounds.  The o|
00003130  6e 6c 79 20 64 69 66 66  65 72 65 6e 63 65 20 68  |nly difference h|
00003140  65 72 65 20 69 73 20 74  68 65 20 63 68 6f 69 63  |ere is the choic|
00003150  65 20 6f 66 20 6f 62 6a  65 63 74 73 20 79 6f 75  |e of objects you|
00003160  20 63 61 6e 0a 63 72 65  61 74 65 3a 20 61 20 73  | can.create: a s|
00003170  68 65 65 74 2c 20 61 20  63 75 62 6f 69 64 2c 20  |heet, a cuboid, |
00003180  61 20 63 75 62 65 2c 20  61 20 74 75 62 65 20 6f  |a cube, a tube o|
00003190  72 20 61 20 63 6f 6d 70  6f 75 6e 64 20 6f 62 6a  |r a compound obj|
000031a0  65 63 74 2e 20 20 54 68  65 73 65 20 77 69 6c 6c  |ect.  These will|
000031b0  0a 62 65 20 64 65 73 63  72 69 62 65 64 20 69 6e  |.be described in|
000031c0  64 69 76 69 64 75 61 6c  6c 79 20 6c 61 74 65 72  |dividually later|
000031d0  2e 0a 0a 20 20 20 20 20  20 20 20 54 68 65 20 73  |...        The s|
000031e0  63 61 6c 65 20 63 6f 6d  6d 61 6e 64 20 69 73 20  |cale command is |
000031f0  6f 70 74 69 6f 6e 61 6c  3a 20 69 74 20 6c 65 74  |optional: it let|
00003200  73 20 79 6f 75 20 73 63  61 6c 65 20 61 6e 20 6f  |s you scale an o|
00003210  62 6a 65 63 74 20 69 6e  20 74 68 65 20 78 2c 0a  |bject in the x,.|
00003220  79 20 61 6e 64 20 7a 20  64 69 72 65 63 74 69 6f  |y and z directio|
00003230  6e 73 2e 20 20 54 68 69  73 20 63 6f 6d 6d 61 6e  |ns.  This comman|
00003240  64 20 69 73 20 6d 61 69  6e 6c 79 20 70 72 65 73  |d is mainly pres|
00003250  65 6e 74 20 74 6f 20 61  6c 6c 6f 77 20 79 6f 75  |ent to allow you|
00003260  20 74 6f 20 63 68 61 6e  67 65 0a 74 68 65 20 73  | to change.the s|
00003270  69 7a 65 20 6f 66 20 61  20 63 6f 6d 70 6f 75 6e  |ize of a compoun|
00003280  64 20 6f 62 6a 65 63 74  2c 20 77 68 69 63 68 20  |d object, which |
00003290  77 6f 75 6c 64 20 6f 74  68 65 72 77 69 73 65 20  |would otherwise |
000032a0  62 65 20 76 65 72 79 20  74 65 64 69 6f 75 73 2e  |be very tedious.|
000032b0  20 20 49 0a 77 6f 75 6c  64 20 61 64 76 69 73 65  |  I.would advise|
000032c0  20 74 68 61 74 20 79 6f  75 20 6b 65 65 70 20 74  | that you keep t|
000032d0  68 65 20 78 2c 20 79 20  61 6e 64 20 7a 20 73 63  |he x, y and z sc|
000032e0  61 6c 69 6e 67 73 20 73  69 6d 69 6c 61 72 2c 20  |alings similar, |
000032f0  61 73 20 6f 62 6a 65 63  74 73 20 77 68 69 63 68  |as objects which|
00003300  0a 68 61 76 65 20 64 69  66 66 65 72 65 6e 74 20  |.have different |
00003310  70 6f 69 6e 74 20 73 70  61 63 69 6e 67 73 20 69  |point spacings i|
00003320  6e 20 64 69 66 66 65 72  65 6e 74 20 64 69 72 65  |n different dire|
00003330  63 74 69 6f 6e 73 20 74  65 6e 64 20 74 6f 20 62  |ctions tend to b|
00003340  65 20 75 6e 73 74 61 62  6c 65 2e 20 0a 54 68 65  |e unstable. .The|
00003350  20 73 63 61 6c 65 20 63  6f 6d 6d 61 6e 64 20 67  | scale command g|
00003360  6f 65 73 20 62 65 66 6f  72 65 20 6e 65 61 72 62  |oes before nearb|
00003370  6f 6e 64 73 20 62 65 63  61 75 73 65 20 6f 74 68  |onds because oth|
00003380  65 72 77 69 73 65 20 77  6f 75 6c 64 20 67 65 74  |erwise would get|
00003390  0a 73 74 72 65 74 63 68  65 64 3a 20 79 6f 75 20  |.stretched: you |
000033a0  6d 61 79 20 77 61 6e 74  20 74 6f 20 75 73 65 20  |may want to use |
000033b0  74 68 69 73 20 65 66 66  65 63 74 2c 20 62 75 74  |this effect, but|
000033c0  20 6b 65 65 70 20 74 68  65 20 73 63 61 6c 65 20  | keep the scale |
000033d0  66 61 63 74 6f 72 73 20  63 6c 6f 73 65 0a 74 6f  |factors close.to|
000033e0  20 31 20 74 6f 20 70 72  65 76 65 6e 74 20 65 78  | 1 to prevent ex|
000033f0  70 6c 6f 73 69 6f 6e 73  2e 0a 0a 20 20 20 20 20  |plosions...     |
00003400  20 20 20 54 68 65 20 22  6e 65 61 72 62 6f 6e 64  |   The "nearbond|
00003410  73 22 20 62 6c 6f 63 6b  20 69 73 20 77 68 61 74  |s" block is what|
00003420  20 6d 61 6b 65 73 20 74  68 65 20 73 6f 6c 69 64  | makes the solid|
00003430  20 61 20 73 6f 6c 69 64  20 28 62 75 74 20 73 65  | a solid (but se|
00003440  65 0a 22 73 6f 6c 69 64  5f 64 61 6d 70 20 2d 31  |e."solid_damp -1|
00003450  22 20 66 6f 72 20 61 6e  6f 74 68 65 72 20 77 61  |" for another wa|
00003460  79 29 2e 20 20 49 74 20  6e 65 65 64 73 20 74 6f  |y).  It needs to|
00003470  20 62 65 20 70 75 74 20  61 66 74 65 72 20 74 68  | be put after th|
00003480  65 20 22 63 72 65 61 74  65 22 0a 62 6c 6f 63 6b  |e "create".block|
00003490  2c 20 62 65 63 61 75 73  65 20 69 74 20 63 72 65  |, because it cre|
000034a0  61 74 65 73 20 61 6c 6c  20 74 68 65 20 6c 69 74  |ates all the lit|
000034b0  74 6c 65 20 73 70 72 69  6e 67 73 20 77 68 69 63  |tle springs whic|
000034c0  68 20 68 6f 6c 64 20 74  68 65 20 70 6f 69 6e 74  |h hold the point|
000034d0  73 20 69 6e 0a 74 68 65  20 6f 62 6a 65 63 74 20  |s in.the object |
000034e0  74 6f 67 65 74 68 65 72  2e 20 20 49 74 20 69 73  |together.  It is|
000034f0  20 63 61 6c 6c 65 64 20  22 6e 65 61 72 62 6f 6e  | called "nearbon|
00003500  64 73 22 20 62 65 63 61  75 73 65 20 69 74 20 6f  |ds" because it o|
00003510  6e 6c 79 20 62 6f 6e 64  73 0a 74 6f 67 65 74 68  |nly bonds.togeth|
00003520  65 72 20 70 6f 69 6e 74  73 20 77 68 69 63 68 20  |er points which |
00003530  61 72 65 20 66 61 69 72  6c 79 20 63 6c 6f 73 65  |are fairly close|
00003540  2e 20 20 54 68 65 20 6e  75 6d 62 65 72 20 61 66  |.  The number af|
00003550  74 65 72 20 22 73 70 72  69 6e 67 5f 63 6f 6e 73  |ter "spring_cons|
00003560  74 22 0a 73 65 74 73 20  74 68 65 20 73 74 69 66  |t".sets the stif|
00003570  66 6e 65 73 73 20 6f 66  20 74 68 65 20 73 70 72  |fness of the spr|
00003580  69 6e 67 73 2c 20 61 6e  64 20 22 72 61 6e 67 65  |ings, and "range|
00003590  22 20 73 65 74 73 20 68  6f 77 20 6e 65 61 72 20  |" sets how near |
000035a0  74 77 6f 20 70 6f 69 6e  74 73 20 68 61 76 65 0a  |two points have.|
000035b0  74 6f 20 62 65 20 66 6f  72 20 61 20 73 70 72 69  |to be for a spri|
000035c0  6e 67 20 74 6f 20 63 6f  6e 6e 65 63 74 20 74 68  |ng to connect th|
000035d0  65 6d 2e 20 20 46 6f 72  20 65 61 63 68 20 6f 62  |em.  For each ob|
000035e0  6a 65 63 74 2c 20 74 68  65 20 70 72 6f 67 72 61  |ject, the progra|
000035f0  6d 20 77 6f 72 6b 73 20  6f 75 74 0a 61 6e 20 61  |m works out.an a|
00003600  76 65 72 61 67 65 20 22  6e 65 61 72 65 73 74 2d  |verage "nearest-|
00003610  6e 65 69 67 68 62 6f 75  72 22 20 64 69 73 74 61  |neighbour" dista|
00003620  6e 63 65 20 28 63 61 6c  6c 20 74 68 69 73 20 44  |nce (call this D|
00003630  29 2c 20 61 6e 64 20 74  68 65 20 22 72 61 6e 67  |), and the "rang|
00003640  65 22 20 76 61 6c 75 65  0a 69 73 20 69 6e 20 74  |e" value.is in t|
00003650  65 72 6d 73 20 6f 66 20  44 2e 20 20 50 6f 69 6e  |erms of D.  Poin|
00003660  74 73 20 77 69 74 68 20  61 20 73 65 70 61 72 61  |ts with a separa|
00003670  74 69 6f 6e 20 6f 66 20  62 65 74 77 65 65 6e 20  |tion of between |
00003680  44 2f 32 20 61 6e 64 20  44 20 61 72 65 20 6c 69  |D/2 and D are li|
00003690  6e 6b 65 64 0a 77 69 74  68 20 61 20 73 70 72 69  |nked.with a spri|
000036a0  6e 67 20 6f 66 20 73 74  72 65 6e 67 74 68 20 3c  |ng of strength <|
000036b0  6c 61 6d 62 64 61 3e 2c  20 61 6e 64 20 70 6f 69  |lambda>, and poi|
000036c0  6e 74 73 20 77 69 74 68  20 61 20 73 65 70 61 72  |nts with a separ|
000036d0  61 74 69 6f 6e 20 62 65  74 77 65 65 6e 20 44 0a  |ation between D.|
000036e0  61 6e 64 20 44 2a 3c 72  61 6e 67 65 5f 76 61 6c  |and D*<range_val|
000036f0  3e 20 61 72 65 20 6c 69  6e 6b 65 64 20 77 69 74  |> are linked wit|
00003700  68 20 61 20 73 70 72 69  6e 67 20 6f 66 20 73 74  |h a spring of st|
00003710  72 65 6e 67 74 68 20 77  68 69 63 68 20 64 65 63  |rength which dec|
00003720  72 65 61 73 65 73 0a 73  6d 6f 6f 74 68 6c 79 20  |reases.smoothly |
00003730  64 6f 77 6e 20 74 6f 20  30 20 66 6f 72 20 44 2a  |down to 0 for D*|
00003740  3c 72 61 6e 67 65 5f 76  61 6c 3e 2e 20 20 20 50  |<range_val>.   P|
00003750  6f 69 6e 74 73 20 77 69  74 68 20 61 20 73 65 70  |oints with a sep|
00003760  61 72 61 74 69 6f 6e 20  6f 66 20 6c 65 73 73 0a  |aration of less.|
00003770  74 68 61 6e 20 44 2f 32  20 61 72 65 20 6e 6f 74  |than D/2 are not|
00003780  20 63 6f 6e 6e 65 63 74  65 64 2e 0a 0a 0a 20 20  | connected....  |
00003790  20 20 20 20 20 20 4f 54  48 45 52 20 43 4f 4d 4d  |      OTHER COMM|
000037a0  41 4e 44 53 0a 0a 20 20  20 20 20 20 20 20 54 68  |ANDS..        Th|
000037b0  65 72 65 20 61 72 65 20  74 77 6f 20 63 6f 6d 6d  |ere are two comm|
000037c0  61 6e 64 73 20 79 6f 75  20 63 61 6e 20 75 73 65  |ands you can use|
000037d0  20 74 6f 20 70 6c 61 63  65 20 74 68 65 20 6f 62  | to place the ob|
000037e0  6a 65 63 74 20 77 68 65  72 65 20 79 6f 75 0a 77  |ject where you.w|
000037f0  61 6e 74 20 69 74 3a 0a  0a 20 20 20 20 20 20 20  |ant it:..       |
00003800  20 20 20 20 20 20 20 20  20 74 72 61 6e 73 6c 61  |         transla|
00003810  74 65 20 3c 78 3e 2c 3c  79 3e 2c 3c 7a 3e 0a 20  |te <x>,<y>,<z>. |
00003820  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
00003830  6f 74 61 74 65 20 3c 78  72 3e 2c 3c 79 72 3e 2c  |otate <xr>,<yr>,|
00003840  3c 7a 72 3e 0a 0a 20 20  20 20 20 20 20 20 54 68  |<zr>..        Th|
00003850  65 20 74 72 61 6e 73 6c  61 74 65 20 63 6f 6d 6d  |e translate comm|
00003860  61 6e 64 20 68 61 73 20  62 65 65 6e 20 64 65 73  |and has been des|
00003870  63 72 69 62 65 64 20 61  62 6f 76 65 2e 20 20 54  |cribed above.  T|
00003880  68 65 20 72 6f 74 61 74  65 20 63 6f 6d 6d 61 6e  |he rotate comman|
00003890  64 0a 72 6f 74 61 74 65  73 20 74 68 65 20 6f 62  |d.rotates the ob|
000038a0  6a 65 63 74 20 41 42 4f  55 54 20 54 48 45 20 4f  |ject ABOUT THE O|
000038b0  52 49 47 49 4e 2e 20 20  49 74 20 72 6f 74 61 74  |RIGIN.  It rotat|
000038c0  65 73 20 62 79 20 3c 78  72 3e 2c 20 3c 79 72 3e  |es by <xr>, <yr>|
000038d0  20 61 6e 64 20 3c 7a 72  3e 0a 64 65 67 72 65 65  | and <zr>.degree|
000038e0  73 20 61 62 6f 75 74 20  74 68 65 20 78 2c 20 79  |s about the x, y|
000038f0  2c 20 61 6e 64 20 7a 20  61 78 65 73 20 72 65 73  |, and z axes res|
00003900  70 65 63 74 69 76 65 6c  79 2e 20 20 59 6f 75 20  |pectively.  You |
00003910  63 61 6e 20 68 61 76 65  20 61 6e 79 20 6e 75 6d  |can have any num|
00003920  62 65 72 20 6f 66 0a 74  72 61 6e 73 6c 61 74 65  |ber of.translate|
00003930  20 61 6e 64 20 72 6f 74  61 74 65 20 63 6f 6d 6d  | and rotate comm|
00003940  61 6e 64 73 20 77 69 74  68 6f 75 74 20 66 65 61  |ands without fea|
00003950  72 20 6f 66 20 73 6c 6f  77 69 6e 67 20 64 6f 77  |r of slowing dow|
00003960  6e 20 74 68 65 20 70 72  6f 67 72 61 6d 2c 0a 62  |n the program,.b|
00003970  65 63 61 75 73 65 20 74  68 65 20 63 6f 6d 6d 61  |ecause the comma|
00003980  6e 64 73 20 6f 6e 6c 79  20 61 66 66 65 63 74 20  |nds only affect |
00003990  74 68 65 20 69 6e 69 74  69 61 6c 20 73 65 74 74  |the initial sett|
000039a0  69 6e 67 20 75 70 2e 20  20 46 6f 72 20 65 78 61  |ing up.  For exa|
000039b0  6d 70 6c 65 2c 20 69 66  0a 79 6f 75 20 77 61 6e  |mple, if.you wan|
000039c0  74 20 74 6f 20 72 6f 74  61 74 65 20 62 79 20 31  |t to rotate by 1|
000039d0  35 20 64 65 67 72 65 65  73 20 61 62 6f 75 74 20  |5 degrees about |
000039e0  74 68 65 20 70 6f 69 6e  74 20 28 31 69 6e 2c 31  |the point (1in,1|
000039f0  69 6e 2c 32 69 6e 29 2c  20 61 72 6f 75 6e 64 20  |in,2in), around |
00003a00  74 68 65 20 78 0a 61 78  69 73 2c 20 79 6f 75 20  |the x.axis, you |
00003a10  63 6f 75 6c 64 20 75 73  65 3a 0a 0a 20 20 20 20  |could use:..    |
00003a20  20 20 20 20 20 20 20 20  20 20 20 20 74 72 61 6e  |            tran|
00003a30  73 6c 61 74 65 20 2d 31  69 6e 2c 2d 31 69 6e 2c  |slate -1in,-1in,|
00003a40  2d 32 69 6e 0a 20 20 20  20 20 20 20 20 20 20 20  |-2in.           |
00003a50  20 20 20 20 20 72 6f 74  61 74 65 20 31 35 2c 30  |     rotate 15,0|
00003a60  2c 30 20 20 20 20 20 20  20 0a 20 20 20 20 20 20  |,0       .      |
00003a70  20 20 20 20 20 20 20 20  20 20 74 72 61 6e 73 6c  |          transl|
00003a80  61 74 65 20 31 69 6e 2c  31 69 6e 2c 32 69 6e 0a  |ate 1in,1in,2in.|
00003a90  0a 20 20 20 20 20 20 20  20 61 6e 64 20 74 68 65  |.        and the|
00003aa0  6e 20 74 72 61 6e 73 6c  61 74 65 20 74 68 65 20  |n translate the |
00003ab0  73 6f 6c 69 64 20 74 6f  20 77 68 65 72 65 20 79  |solid to where y|
00003ac0  6f 75 20 77 61 6e 74 20  69 74 2e 0a 0a 20 20 20  |ou want it...   |
00003ad0  20 20 20 20 20 54 68 65  72 65 20 61 72 65 20 73  |     There are s|
00003ae0  6f 6d 65 20 6f 74 68 65  72 20 63 6f 6d 6d 61 6e  |ome other comman|
00003af0  64 73 20 77 68 69 63 68  20 63 61 6e 20 67 6f 20  |ds which can go |
00003b00  69 6e 20 61 20 73 6f 6c  69 64 20 62 6c 6f 63 6b  |in a solid block|
00003b10  2c 20 62 75 74 0a 74 68  65 73 65 20 73 68 6f 75  |, but.these shou|
00003b20  6c 64 20 6f 6e 6c 79 20  62 65 20 67 69 76 65 6e  |ld only be given|
00003b30  20 6f 6e 63 65 20 69 6e  20 65 61 63 68 20 73 6f  | once in each so|
00003b40  6c 69 64 2e 20 20 54 68  65 79 20 61 72 65 3a 0a  |lid.  They are:.|
00003b50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00003b70  20 20 20 20 0a 20 20 20  20 20 20 20 20 20 20 20  |    .           |
00003b80  20 20 20 20 20 76 65 6c  6f 63 69 74 79 20 3c 78  |     velocity <x|
00003b90  76 3e 2c 3c 79 76 3e 2c  3c 7a 76 3e 0a 20 20 20  |v>,<yv>,<zv>.   |
00003ba0  20 20 20 20 20 20 20 20  20 20 20 20 20 73 70 69  |             spi|
00003bb0  6e 20 3c 78 72 3e 2c 3c  79 72 3e 2c 3c 7a 72 3e  |n <xr>,<yr>,<zr>|
00003bc0  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00003bd0  20 61 69 72 5f 64 61 6d  70 20 3c 64 61 6d 70 5f  | air_damp <damp_|
00003be0  76 61 6c 3e 20 20 0a 20  20 20 20 20 20 20 20 20  |val>  .         |
00003bf0  20 20 20 20 20 20 20 73  6f 6c 69 64 5f 64 61 6d  |       solid_dam|
00003c00  70 20 3c 64 61 6d 70 5f  76 61 6c 3e 0a 20 20 20  |p <damp_val>.   |
00003c10  20 20 20 20 20 20 20 20  20 20 20 20 20 64 61 6d  |             dam|
00003c20  70 69 6e 67 20 3c 64 61  6d 70 5f 76 61 6c 3e 0a  |ping <damp_val>.|
00003c30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003c40  66 69 78 5f 76 65 6c 20  3c 62 6f 78 5f 78 3e 2c  |fix_vel <box_x>,|
00003c50  3c 62 6f 78 5f 79 3e 2c  3c 62 6f 78 5f 7a 3e 2c  |<box_y>,<box_z>,|
00003c60  3c 62 6f 78 5f 77 3e 2c  3c 62 6f 78 5f 64 3e 2c  |<box_w>,<box_d>,|
00003c70  3c 62 6f 78 5f 68 3e 2c  0a 20 20 20 20 20 20 20  |<box_h>,.       |
00003c80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003c90  20 3c 78 76 3e 2c 3c 79  76 3e 2c 3c 7a 76 3e 20  | <xv>,<yv>,<zv> |
00003ca0  20 20 20 20 0a 20 20 20  20 20 20 20 20 20 20 20  |    .           |
00003cb0  20 20 20 20 20 70 75 6c  6c 20 3c 66 69 72 73 74  |     pull <first|
00003cc0  3e 2c 3c 6c 61 73 74 3e  2c 3c 73 74 65 70 3e 2c  |>,<last>,<step>,|
00003cd0  3c 78 76 3e 2c 3c 79 76  3e 2c 3c 7a 76 3e 0a 20  |<xv>,<yv>,<zv>. |
00003ce0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
00003cf0  65 70 65 6c 20 3c 72 65  70 65 6c 5f 73 74 72 65  |epel <repel_stre|
00003d00  6e 67 74 68 3e 0a 0a 0a  54 48 45 20 56 45 4c 4f  |ngth>...THE VELO|
00003d10  43 49 54 59 20 43 4f 4d  4d 41 4e 44 0a 20 20 20  |CITY COMMAND.   |
00003d20  20 20 20 20 20 54 68 65  20 22 76 65 6c 6f 63 69  |     The "veloci|
00003d30  74 79 22 20 63 6f 6d 6d  61 6e 64 20 6a 75 73 74  |ty" command just|
00003d40  20 67 69 76 65 73 20 74  68 65 20 6f 62 6a 65 63  | gives the objec|
00003d50  74 20 61 6e 20 69 6e 69  74 69 61 6c 20 76 65 6c  |t an initial vel|
00003d60  6f 63 69 74 79 2c 20 62  79 0a 73 65 74 74 69 6e  |ocity, by.settin|
00003d70  67 20 74 68 65 20 76 65  6c 6f 63 69 74 79 20 6f  |g the velocity o|
00003d80  66 20 61 6c 6c 20 74 68  65 20 70 6f 69 6e 74 73  |f all the points|
00003d90  20 74 6f 20 74 68 65 20  61 6d 6f 75 6e 74 20 73  | to the amount s|
00003da0  70 65 63 69 66 69 65 64  2e 20 20 54 68 65 0a 70  |pecified.  The.p|
00003db0  61 72 61 6d 65 74 65 72  73 20 61 72 65 20 74 68  |arameters are th|
00003dc0  65 20 76 65 6c 6f 63 69  74 79 20 63 6f 6d 70 6f  |e velocity compo|
00003dd0  6e 65 6e 74 73 20 69 6e  20 74 68 65 20 78 2c 20  |nents in the x, |
00003de0  79 20 61 6e 64 20 7a 20  64 69 72 65 63 74 69 6f  |y and z directio|
00003df0  6e 73 2c 20 77 68 69 63  68 0a 63 61 6e 20 62 65  |ns, which.can be|
00003e00  20 67 69 76 65 6e 20 69  6e 20 76 61 72 69 6f 75  | given in variou|
00003e10  73 20 75 6e 69 74 73 20  61 73 20 64 65 73 63 72  |s units as descr|
00003e20  69 62 65 64 20 65 61 72  6c 69 65 72 2e 20 20 4e  |ibed earlier.  N|
00003e30  42 3a 20 54 68 65 20 76  65 6c 6f 63 69 74 79 20  |B: The velocity |
00003e40  6f 66 20 61 6e 0a 6f 62  6a 65 63 74 20 69 73 20  |of an.object is |
00003e50  6e 6f 74 20 72 6f 74 61  74 65 64 20 77 68 65 6e  |not rotated when|
00003e60  20 79 6f 75 20 72 6f 74  61 74 65 20 74 68 65 20  | you rotate the |
00003e70  6f 62 6a 65 63 74 2e 0a  0a 54 48 45 20 53 50 49  |object...THE SPI|
00003e80  4e 20 43 4f 4d 4d 41 4e  44 0a 20 20 20 20 20 20  |N COMMAND.      |
00003e90  20 20 54 68 65 20 22 73  70 69 6e 22 20 63 6f 6d  |  The "spin" com|
00003ea0  6d 61 6e 64 20 67 69 76  65 73 20 74 68 65 20 6f  |mand gives the o|
00003eb0  62 6a 65 63 74 20 61 6e  20 61 6e 67 75 6c 61 72  |bject an angular|
00003ec0  20 76 65 6c 6f 63 69 74  79 2e 20 20 54 68 65 20  | velocity.  The |
00003ed0  74 68 72 65 65 0a 70 61  72 61 6d 65 74 65 72 73  |three.parameters|
00003ee0  20 61 72 65 20 74 68 65  20 63 6f 6d 70 6f 6e 65  | are the compone|
00003ef0  6e 74 73 20 6f 66 20 61  6e 67 75 6c 61 72 20 76  |nts of angular v|
00003f00  65 6c 6f 63 69 74 79 20  61 62 6f 75 74 20 74 68  |elocity about th|
00003f10  65 20 78 2c 20 79 20 61  6e 64 20 7a 20 61 78 65  |e x, y and z axe|
00003f20  73 2e 0a 20 54 68 65 20  63 65 6e 74 72 65 20 6f  |s.. The centre o|
00003f30  66 20 74 68 65 20 72 6f  74 61 74 69 6f 6e 20 69  |f the rotation i|
00003f40  73 20 61 6c 77 61 79 73  20 74 68 65 20 6f 72 69  |s always the ori|
00003f50  67 69 6e 3a 20 6d 61 6b  65 20 73 75 72 65 20 74  |gin: make sure t|
00003f60  68 61 74 20 74 68 65 20  70 6f 69 6e 74 0a 79 6f  |hat the point.yo|
00003f70  75 20 77 61 6e 74 20 74  68 65 20 6f 62 6a 65 63  |u want the objec|
00003f80  74 20 74 6f 20 73 70 69  6e 20 61 72 6f 75 6e 64  |t to spin around|
00003f90  20 69 73 20 61 74 20 74  68 65 20 6f 72 69 67 69  | is at the origi|
00003fa0  6e 20 77 68 65 6e 20 79  6f 75 20 75 73 65 20 74  |n when you use t|
00003fb0  68 65 20 22 73 70 69 6e  22 0a 63 6f 6d 6d 61 6e  |he "spin".comman|
00003fc0  64 2e 20 20 49 66 20 79  6f 75 20 77 61 6e 74 20  |d.  If you want |
00003fd0  74 6f 20 67 69 76 65 20  61 6e 20 6f 62 6a 65 63  |to give an objec|
00003fe0  74 20 62 6f 74 68 20 61  20 73 70 69 6e 20 61 6e  |t both a spin an|
00003ff0  64 20 61 20 6c 69 6e 65  61 72 20 76 65 6c 6f 63  |d a linear veloc|
00004000  69 74 79 2c 0a 79 6f 75  20 6d 75 73 74 20 75 73  |ity,.you must us|
00004010  65 20 74 68 65 20 22 76  65 6c 6f 63 69 74 79 22  |e the "velocity"|
00004020  20 63 6f 6d 6d 61 6e 64  20 66 69 72 73 74 2c 20  | command first, |
00004030  62 65 63 61 75 73 65 20  22 76 65 6c 6f 63 69 74  |because "velocit|
00004040  79 22 20 6a 75 73 74 20  73 65 74 73 20 74 68 65  |y" just sets the|
00004050  0a 76 65 6c 6f 63 69 74  69 65 73 20 6f 66 20 74  |.velocities of t|
00004060  68 65 20 70 6f 69 6e 74  73 2c 20 77 68 65 72 65  |he points, where|
00004070  61 73 20 22 73 70 69 6e  22 20 61 64 64 73 20 74  |as "spin" adds t|
00004080  6f 20 74 68 65 20 76 65  6c 6f 63 69 74 69 65 73  |o the velocities|
00004090  20 61 6c 72 65 61 64 79  0a 70 72 65 73 65 6e 74  | already.present|
000040a0  2e 0a 0a 54 48 45 20 41  49 52 5f 44 41 4d 50 20  |...THE AIR_DAMP |
000040b0  43 4f 4d 4d 41 4e 44 0a  20 20 20 20 20 20 20 20  |COMMAND.        |
000040c0  22 61 69 72 5f 64 61 6d  70 20 3c 64 61 6d 70 5f  |"air_damp <damp_|
000040d0  76 61 6c 3e 22 20 69 73  20 61 20 63 6f 6d 6d 61  |val>" is a comma|
000040e0  6e 64 20 77 68 69 63 68  20 73 69 6d 75 6c 61 74  |nd which simulat|
000040f0  65 73 20 77 69 6e 64 20  72 65 73 69 73 74 61 6e  |es wind resistan|
00004100  63 65 0a 6f 6e 20 6f 62  6a 65 63 74 73 2c 20 62  |ce.on objects, b|
00004110  79 20 73 6c 6f 77 69 6e  67 20 64 6f 77 6e 20 70  |y slowing down p|
00004120  6f 69 6e 74 73 20 6f 6e  20 74 68 65 20 73 75 72  |oints on the sur|
00004130  66 61 63 65 20 6f 66 20  6f 62 6a 65 63 74 73 2e  |face of objects.|
00004140  20 20 54 68 69 73 20 72  65 70 6c 61 63 65 73 0a  |  This replaces.|
00004150  74 68 65 20 6f 6c 64 20  63 6f 6d 6d 61 6e 64 20  |the old command |
00004160  22 64 61 6d 70 69 6e 67  22 20 77 68 69 63 68 20  |"damping" which |
00004170  61 66 66 65 63 74 65 64  20 61 6c 6c 20 74 68 65  |affected all the|
00004180  20 70 6f 69 6e 74 73 20  69 6e 20 61 6e 20 6f 62  | points in an ob|
00004190  6a 65 63 74 2c 20 61 6e  64 0a 77 61 73 20 61 6c  |ject, and.was al|
000041a0  73 6f 20 73 6c 69 67 68  74 6c 79 20 64 69 72 65  |so slightly dire|
000041b0  63 74 69 6f 6e 2d 64 65  70 65 6e 64 61 6e 74 2e  |ction-dependant.|
000041c0  20 20 54 68 65 20 70 61  72 61 6d 65 74 65 72 20  |  The parameter |
000041d0  66 6f 72 20 74 68 69 73  20 63 6f 6d 6d 61 6e 64  |for this command|
000041e0  20 69 73 20 61 6e 0a 69  6e 74 65 67 65 72 20 76  | is an.integer v|
000041f0  61 6c 75 65 3a 20 34 20  69 73 20 61 20 67 6f 6f  |alue: 4 is a goo|
00004200  64 20 73 74 61 72 74 69  6e 67 20 70 6f 69 6e 74  |d starting point|
00004210  2e 20 20 49 6e 63 72 65  61 73 69 6e 67 20 74 68  |.  Increasing th|
00004220  69 73 20 76 61 6c 75 65  20 62 79 20 31 0a 68 61  |is value by 1.ha|
00004230  6c 76 65 73 20 74 68 65  20 61 6d 6f 75 6e 74 20  |lves the amount |
00004240  6f 66 20 77 69 6e 64 20  72 65 73 69 73 74 61 6e  |of wind resistan|
00004250  63 65 2c 20 61 6e 64 20  64 65 63 72 65 61 73 69  |ce, and decreasi|
00004260  6e 67 20 69 74 20 62 79  20 31 20 64 6f 75 62 6c  |ng it by 1 doubl|
00004270  65 73 20 69 74 2e 20 0a  56 61 6c 75 65 73 20 62  |es it. .Values b|
00004280  65 6c 6f 77 20 32 20 6d  61 79 20 63 61 75 73 65  |elow 2 may cause|
00004290  20 74 68 65 20 6f 62 6a  65 63 74 20 74 6f 20 65  | the object to e|
000042a0  78 70 6c 6f 64 65 2e 20  20 54 68 65 20 75 73 65  |xplode.  The use|
000042b0  20 6f 66 20 74 68 69 73  20 63 6f 6d 6d 61 6e 64  | of this command|
000042c0  20 69 73 0a 61 70 70 72  6f 70 72 69 61 74 65 20  | is.appropriate |
000042d0  66 6f 72 3a 0a 61 2f 20  20 20 20 20 20 53 68 65  |for:.a/      She|
000042e0  65 74 2d 74 79 70 65 20  6f 62 6a 65 63 74 73 2c  |et-type objects,|
000042f0  20 77 68 69 63 68 20 69  6e 20 72 65 61 6c 20 6c  | which in real l|
00004300  69 66 65 20 61 72 65 20  73 6c 6f 77 65 64 20 61  |ife are slowed a|
00004310  20 6c 6f 74 20 62 79 20  61 69 72 0a 70 72 65 73  | lot by air.pres|
00004320  73 75 72 65 0a 62 2f 20  20 20 20 20 20 4f 62 6a  |sure.b/      Obj|
00004330  65 63 74 73 20 77 68 69  63 68 20 61 72 65 20 70  |ects which are p|
00004340  69 63 6b 69 6e 67 20 75  70 20 73 70 65 65 64 20  |icking up speed |
00004350  74 6f 6f 20 66 61 73 74  3a 20 74 72 79 20 72 75  |too fast: try ru|
00004360  6e 6e 69 6e 67 20 74 68  65 0a 61 6e 69 6d 61 74  |nning the.animat|
00004370  69 6f 6e 20 22 46 6c 6f  70 43 75 62 65 22 20 77  |ion "FlopCube" w|
00004380  69 74 68 20 6e 6f 20 61  69 72 20 64 61 6d 70 69  |ith no air dampi|
00004390  6e 67 2e 0a 0a 54 48 45  20 22 53 4f 4c 49 44 5f  |ng...THE "SOLID_|
000043a0  44 41 4d 50 22 20 43 4f  4d 4d 41 4e 44 3a 0a 20  |DAMP" COMMAND:. |
000043b0  20 20 20 20 20 20 20 54  68 65 20 64 61 6d 70 69  |       The dampi|
000043c0  6e 67 20 72 6f 75 74 69  6e 65 20 69 6e 20 74 68  |ng routine in th|
000043d0  65 20 70 72 65 76 69 6f  75 73 20 76 65 72 73 69  |e previous versi|
000043e0  6f 6e 20 6f 66 20 46 45  4d 53 20 75 73 65 64 20  |on of FEMS used |
000043f0  61 20 73 69 6d 70 6c 65  0a 6d 65 74 68 6f 64 20  |a simple.method |
00004400  77 68 6f 73 65 20 65 66  66 65 63 74 20 77 61 73  |whose effect was|
00004410  20 73 69 6d 69 6c 61 72  20 74 6f 20 68 61 76 69  | similar to havi|
00004420  6e 67 20 77 69 6e 64 20  72 65 73 69 73 74 61 6e  |ng wind resistan|
00004430  63 65 20 6f 6e 20 65 76  65 72 79 20 65 6c 65 6d  |ce on every elem|
00004440  65 6e 74 0a 69 6e 20 61  6e 20 6f 62 6a 65 63 74  |ent.in an object|
00004450  3a 20 74 68 65 20 66 61  73 74 65 72 20 61 20 70  |: the faster a p|
00004460  6f 69 6e 74 20 77 61 73  20 6d 6f 76 69 6e 67 2c  |oint was moving,|
00004470  20 74 68 65 20 6d 6f 72  65 20 69 74 20 77 61 73  | the more it was|
00004480  20 73 6c 6f 77 65 64 20  64 6f 77 6e 2e 20 0a 54  | slowed down. .T|
00004490  68 69 73 20 67 61 76 65  20 61 20 72 65 61 6c 69  |his gave a reali|
000044a0  73 74 69 63 20 65 66 66  65 63 74 20 66 6f 72 20  |stic effect for |
000044b0  6f 62 6a 65 63 74 73 20  6c 69 6b 65 20 63 6c 6f  |objects like clo|
000044c0  74 68 73 2c 20 77 68 6f  73 65 20 62 65 68 61 76  |ths, whose behav|
000044d0  69 6f 75 72 20 69 73 0a  73 74 72 6f 6e 67 6c 79  |iour is.strongly|
000044e0  20 61 66 66 65 63 74 65  64 20 62 79 20 61 69 72  | affected by air|
000044f0  20 72 65 73 69 73 74 61  6e 63 65 2c 20 62 75 74  | resistance, but|
00004500  20 69 74 20 61 6c 73 6f  20 72 61 70 69 64 6c 79  | it also rapidly|
00004510  20 73 6c 6f 77 73 20 74  68 65 20 72 6f 74 61 74  | slows the rotat|
00004520  69 6f 6e 0a 6f 66 20 61  20 73 70 69 6e 6e 69 6e  |ion.of a spinnin|
00004530  67 20 62 61 6c 6c 2c 20  66 6f 72 20 65 78 61 6d  |g ball, for exam|
00004540  70 6c 65 2c 20 61 6e 64  20 70 72 65 76 65 6e 74  |ple, and prevent|
00004550  73 20 66 72 65 65 6c 79  2d 66 61 6c 6c 69 6e 67  |s freely-falling|
00004560  20 73 6f 6c 69 64 73 20  66 72 6f 6d 0a 70 69 63  | solids from.pic|
00004570  6b 69 6e 67 20 75 70 20  6d 75 63 68 20 73 70 65  |king up much spe|
00004580  65 64 2e 20 20 54 68 65  20 73 6f 6c 69 64 5f 64  |ed.  The solid_d|
00004590  61 6d 70 20 63 6f 6d 6d  61 6e 64 20 64 61 6d 70  |amp command damp|
000045a0  73 20 6f 75 74 20 77 6f  62 62 6c 65 73 20 77 69  |s out wobbles wi|
000045b0  74 68 6f 75 74 0a 74 68  65 73 65 20 73 69 64 65  |thout.these side|
000045c0  2d 65 66 66 65 63 74 73  2c 20 61 6e 64 20 6d 61  |-effects, and ma|
000045d0  6b 65 73 20 74 68 65 20  6f 62 6a 65 63 74 20 73  |kes the object s|
000045e0  6c 69 67 68 74 6c 79 20  6c 65 73 73 20 66 6c 6f  |lightly less flo|
000045f0  70 70 79 20 69 6e 20 74  68 65 0a 70 72 6f 63 65  |ppy in the.proce|
00004600  73 73 2e 20 20 54 68 65  20 70 61 72 61 6d 65 74  |ss.  The paramet|
00004610  65 72 20 69 73 20 74 68  65 20 73 61 6d 65 20 61  |er is the same a|
00004620  73 20 66 6f 72 20 61 69  72 5f 64 61 6d 70 2c 20  |s for air_damp, |
00004630  65 78 63 65 70 74 2e 2e  2e 0a 20 20 20 20 20 20  |except....      |
00004640  20 20 49 66 20 79 6f 75  20 75 73 65 20 74 68 65  |  If you use the|
00004650  20 63 6f 6d 6d 61 6e 64  20 22 73 6f 6c 69 64 5f  | command "solid_|
00004660  64 61 6d 70 20 2d 31 22  2c 20 74 68 65 20 6f 62  |damp -1", the ob|
00004670  6a 65 63 74 20 77 69 6c  6c 20 62 65 20 6d 61 64  |ject will be mad|
00004680  65 0a 63 6f 6d 70 6c 65  74 65 6c 79 20 73 6f 6c  |e.completely sol|
00004690  69 64 20 28 22 66 72 6f  7a 65 6e 22 29 2e 20 20  |id ("frozen").  |
000046a0  49 6e 20 74 68 69 73 20  63 61 73 65 20 61 6e 79  |In this case any|
000046b0  20 62 6f 6e 64 73 20 69  6e 20 74 68 65 20 6f 62  | bonds in the ob|
000046c0  6a 65 63 74 20 61 72 65  20 6e 6f 74 0a 75 73 65  |ject are not.use|
000046d0  64 2c 20 61 6e 64 20 63  61 6e 20 62 65 20 6c 65  |d, and can be le|
000046e0  66 74 20 6f 75 74 20 6f  66 20 74 68 65 20 73 63  |ft out of the sc|
000046f0  72 69 70 74 2e 20 20 59  6f 75 20 6d 61 79 20 6e  |ript.  You may n|
00004700  6f 74 69 63 65 20 74 68  61 74 20 74 68 65 20 66  |otice that the f|
00004710  72 6f 7a 65 6e 0a 6f 62  6a 65 63 74 20 77 69 6c  |rozen.object wil|
00004720  6c 20 74 65 6e 64 20 74  6f 20 73 74 69 63 6b 20  |l tend to stick |
00004730  69 6e 74 6f 20 62 61 63  6b 67 72 6f 75 6e 64 20  |into background |
00004740  6f 62 6a 65 63 74 73 3a  20 74 68 69 73 20 69 73  |objects: this is|
00004750  20 61 20 63 6f 6e 73 65  71 75 65 6e 63 65 20 6f  | a consequence o|
00004760  66 0a 74 68 65 20 62 61  63 6b 67 72 6f 75 6e 64  |f.the background|
00004770  20 6f 62 6a 65 63 74 73  20 62 65 69 6e 67 20 6d  | objects being m|
00004780  6f 64 65 6c 6c 65 64 20  61 73 20 22 66 6f 72 63  |odelled as "forc|
00004790  65 20 66 69 65 6c 64 73  22 20 61 6e 64 20 74 68  |e fields" and th|
000047a0  65 20 66 72 6f 7a 65 6e  0a 6f 62 6a 65 63 74 20  |e frozen.object |
000047b0  62 65 69 6e 67 20 63 61  70 61 62 6c 65 20 6f 66  |being capable of|
000047c0  20 61 70 70 6c 79 69 6e  67 20 6d 75 63 68 20 67  | applying much g|
000047d0  72 65 61 74 65 72 20 66  6f 72 63 65 73 20 6f 6e  |reater forces on|
000047e0  20 74 68 65 6d 2c 20 77  68 65 72 65 20 74 68 65  | them, where the|
000047f0  0a 6e 6f 6e 2d 66 72 6f  7a 65 6e 20 6f 62 6a 65  |.non-frozen obje|
00004800  63 74 20 77 6f 75 6c 64  20 68 61 76 65 20 62 65  |ct would have be|
00004810  6e 74 20 6f 72 20 73 71  75 61 73 68 65 64 2e 20  |nt or squashed. |
00004820  20 59 6f 75 20 63 61 6e  20 73 74 69 6c 6c 20 68  | You can still h|
00004830  61 76 65 20 61 69 72 0a  64 61 6d 70 69 6e 67 20  |ave air.damping |
00004840  6f 6e 20 74 68 65 20 73  61 6d 65 20 6f 62 6a 65  |on the same obje|
00004850  63 74 2c 20 61 6e 64 20  74 68 65 72 65 20 69 73  |ct, and there is|
00004860  20 6e 6f 74 68 69 6e 67  20 74 6f 20 73 74 6f 70  | nothing to stop|
00004870  20 79 6f 75 20 68 61 76  69 6e 67 20 61 0a 6d 69  | you having a.mi|
00004880  78 74 75 72 65 20 6f 66  20 66 72 6f 7a 65 6e 20  |xture of frozen |
00004890  61 6e 64 20 6e 6f 72 6d  61 6c 20 6f 62 6a 65 63  |and normal objec|
000048a0  74 73 20 69 6e 20 6f 6e  65 20 73 69 6d 75 6c 61  |ts in one simula|
000048b0  74 69 6f 6e 2e 0a 0a 54  48 45 20 44 41 4d 50 49  |tion...THE DAMPI|
000048c0  4e 47 20 43 4f 4d 4d 41  4e 44 0a 20 20 20 20 20  |NG COMMAND.     |
000048d0  20 20 20 54 68 65 20 22  64 61 6d 70 69 6e 67 22  |   The "damping"|
000048e0  20 63 6f 6d 6d 61 6e 64  20 74 61 6b 65 73 20 74  | command takes t|
000048f0  68 65 20 73 61 6d 65 20  74 79 70 65 20 6f 66 20  |he same type of |
00004900  70 61 72 61 6d 65 74 65  72 20 61 73 20 74 68 65  |parameter as the|
00004910  20 6f 74 68 65 72 0a 74  79 70 65 73 20 6f 66 20  | other.types of |
00004920  64 61 6d 70 69 6e 67 2e  20 20 54 68 69 73 20 74  |damping.  This t|
00004930  79 70 65 20 6f 66 20 64  61 6d 70 69 6e 67 20 68  |ype of damping h|
00004940  61 73 20 64 72 61 77 62  61 63 6b 73 20 77 68 69  |as drawbacks whi|
00004950  63 68 20 61 72 65 20 64  65 73 63 72 69 62 65 64  |ch are described|
00004960  0a 61 62 6f 76 65 2c 20  62 75 74 20 74 68 65 20  |.above, but the |
00004970  63 6f 6d 6d 61 6e 64 20  68 61 73 20 62 65 65 6e  |command has been|
00004980  20 6c 65 66 74 20 69 6e  20 66 6f 72 20 64 6f 77  | left in for dow|
00004990  6e 77 61 72 64 73 20 63  6f 6d 70 61 74 69 62 69  |nwards compatibi|
000049a0  6c 69 74 79 2e 0a 0a 54  48 45 20 46 49 58 5f 56  |lity...THE FIX_V|
000049b0  45 4c 20 43 4f 4d 4d 41  4e 44 0a 20 20 20 20 20  |EL COMMAND.     |
000049c0  20 20 20 4f 66 74 65 6e  20 69 6e 20 61 6e 20 61  |   Often in an a|
000049d0  6e 69 6d 61 74 69 6f 6e  2c 20 79 6f 75 20 6e 65  |nimation, you ne|
000049e0  65 64 20 74 6f 20 67 69  76 65 20 70 61 72 74 20  |ed to give part |
000049f0  6f 72 20 61 6c 6c 20 6f  66 20 61 6e 20 6f 62 6a  |or all of an obj|
00004a00  65 63 74 20 61 0a 66 69  78 65 64 20 76 65 6c 6f  |ect a.fixed velo|
00004a10  63 69 74 79 20 6f 72 20  74 6f 20 68 6f 6c 64 20  |city or to hold |
00004a20  69 74 20 73 74 69 6c 6c  2e 20 20 54 68 65 20 22  |it still.  The "|
00004a30  66 69 78 5f 76 65 6c 22  20 63 6f 6d 6d 61 6e 64  |fix_vel" command|
00004a40  20 6c 65 74 73 20 79 6f  75 20 64 6f 20 74 68 69  | lets you do thi|
00004a50  73 2e 0a 20 54 68 65 20  66 69 72 73 74 20 73 69  |s.. The first si|
00004a60  78 20 70 61 72 61 6d 65  74 65 72 73 20 64 65 66  |x parameters def|
00004a70  69 6e 65 20 61 20 63 75  62 6f 69 64 20 6f 66 20  |ine a cuboid of |
00004a80  73 70 61 63 65 2e 20 20  41 6e 79 20 70 6f 69 6e  |space.  Any poin|
00004a90  74 73 20 77 68 69 63 68  20 61 72 65 20 69 6e 0a  |ts which are in.|
00004aa0  74 68 69 73 20 63 75 62  6f 69 64 20 61 74 20 74  |this cuboid at t|
00004ab0  68 65 20 74 69 6d 65 20  74 68 65 20 22 66 69 78  |he time the "fix|
00004ac0  5f 76 65 6c 22 20 63 6f  6d 6d 61 6e 64 20 69 73  |_vel" command is|
00004ad0  20 64 6f 6e 65 20 61 72  65 20 67 69 76 65 6e 20  | done are given |
00004ae0  61 20 66 69 78 65 64 0a  76 65 6c 6f 63 69 74 79  |a fixed.velocity|
00004af0  2c 20 77 68 69 63 68 20  63 61 6e 20 62 65 20 7a  |, which can be z|
00004b00  65 72 6f 2e 20 20 54 68  65 20 66 69 72 73 74 20  |ero.  The first |
00004b10  74 68 72 65 65 20 70 61  72 61 6d 65 74 65 72 73  |three parameters|
00004b20  20 61 72 65 20 74 68 65  20 70 6f 73 69 74 69 6f  | are the positio|
00004b30  6e 20 6f 66 0a 74 68 65  20 63 6f 72 6e 65 72 20  |n of.the corner |
00004b40  6f 66 20 74 68 65 20 63  75 62 6f 69 64 2c 20 61  |of the cuboid, a|
00004b50  6e 64 20 74 68 65 20 6e  65 78 74 20 74 68 72 65  |nd the next thre|
00004b60  65 20 61 72 65 20 69 74  73 20 65 78 74 65 6e 74  |e are its extent|
00004b70  20 69 6e 20 74 68 65 20  78 2c 20 79 20 61 6e 64  | in the x, y and|
00004b80  0a 7a 20 64 69 72 65 63  74 69 6f 6e 73 2e 20 20  |.z directions.  |
00004b90  49 6e 20 6f 74 68 65 72  20 77 6f 72 64 73 2c 20  |In other words, |
00004ba0  74 68 65 20 63 75 62 6f  69 64 20 67 6f 65 73 20  |the cuboid goes |
00004bb0  66 72 6f 6d 20 3c 62 6f  78 5f 78 3e 20 74 6f 0a  |from <box_x> to.|
00004bc0  3c 62 6f 78 5f 78 3e 2b  3c 62 6f 78 5f 77 3e 20  |<box_x>+<box_w> |
00004bd0  69 6e 20 74 68 65 20 78  20 64 69 72 65 63 74 69  |in the x directi|
00004be0  6f 6e 2c 20 66 72 6f 6d  20 3c 62 6f 78 5f 79 3e  |on, from <box_y>|
00004bf0  20 74 6f 20 3c 62 6f 78  5f 79 3e 2b 3c 62 6f 78  | to <box_y>+<box|
00004c00  5f 64 3e 20 69 6e 20 74  68 65 20 79 0a 64 69 72  |_d> in the y.dir|
00004c10  65 63 74 69 6f 6e 2c 20  61 6e 64 20 66 72 6f 6d  |ection, and from|
00004c20  20 3c 62 6f 78 5f 7a 3e  20 74 6f 20 3c 62 6f 78  | <box_z> to <box|
00004c30  5f 7a 3e 2b 3c 62 6f 78  5f 68 3e 20 69 6e 20 74  |_z>+<box_h> in t|
00004c40  68 65 20 7a 20 64 69 72  65 63 74 69 6f 6e 2e 20  |he z direction. |
00004c50  20 54 68 65 20 6c 61 73  74 0a 74 68 72 65 65 20  | The last.three |
00004c60  70 61 72 61 6d 65 74 65  72 73 20 61 72 65 20 74  |parameters are t|
00004c70  68 65 20 76 65 6c 6f 63  69 74 79 20 63 6f 6d 70  |he velocity comp|
00004c80  6f 6e 65 6e 74 73 20 69  6e 20 74 68 65 20 74 68  |onents in the th|
00004c90  72 65 65 20 64 69 72 65  63 74 69 6f 6e 73 2e 0a  |ree directions..|
00004ca0  20 20 20 20 20 20 20 20  59 6f 75 20 63 61 6e 20  |        You can |
00004cb0  68 61 76 65 20 61 6e 79  20 6e 75 6d 62 65 72 20  |have any number |
00004cc0  6f 66 20 22 66 69 78 5f  76 65 6c 22 20 63 6f 6d  |of "fix_vel" com|
00004cd0  6d 61 6e 64 73 20 69 6e  20 61 20 63 72 65 61 74  |mands in a creat|
00004ce0  65 20 62 6c 6f 63 6b 2c  20 62 75 74 0a 79 6f 75  |e block, but.you|
00004cf0  20 63 61 6e 20 6f 6e 6c  79 20 68 61 76 65 20 61  | can only have a|
00004d00  20 6d 61 78 69 6d 75 6d  20 6f 66 20 36 33 20 64  | maximum of 63 d|
00004d10  69 66 66 65 72 65 6e 74  20 76 65 6c 6f 63 69 74  |ifferent velocit|
00004d20  69 65 73 20 75 73 65 64  20 62 79 20 22 66 69 78  |ies used by "fix|
00004d30  5f 76 65 6c 22 0a 63 6f  6d 6d 61 6e 64 73 20 69  |_vel".commands i|
00004d40  6e 20 61 6e 20 61 6e 69  6d 61 74 69 6f 6e 20 73  |n an animation s|
00004d50  63 72 69 70 74 2e 0a 0a  54 48 45 20 50 55 4c 4c  |cript...THE PULL|
00004d60  20 43 4f 4d 4d 41 4e 44  0a 20 20 20 20 20 20 20  | COMMAND.       |
00004d70  20 54 68 65 20 22 70 75  6c 6c 22 20 63 6f 6d 6d  | The "pull" comm|
00004d80  61 6e 64 20 69 73 20 72  61 74 68 65 72 20 6c 6f  |and is rather lo|
00004d90  77 2d 6c 65 76 65 6c 3a  20 69 74 20 6e 65 65 64  |w-level: it need|
00004da0  73 20 74 6f 20 72 65 66  65 72 20 74 6f 20 74 68  |s to refer to th|
00004db0  65 0a 6e 75 6d 62 65 72  69 6e 67 20 6f 66 20 74  |e.numbering of t|
00004dc0  68 65 20 70 6f 69 6e 74  73 20 69 6e 20 61 6e 20  |he points in an |
00004dd0  6f 62 6a 65 63 74 2e 20  20 54 68 65 20 66 69 72  |object.  The fir|
00004de0  73 74 20 74 68 72 65 65  20 70 61 72 61 6d 65 74  |st three paramet|
00004df0  65 72 73 20 61 72 65 20  6c 69 6b 65 20 61 0a 46  |ers are like a.F|
00004e00  4f 52 2d 4e 45 58 54 20  6c 6f 6f 70 20 77 68 69  |OR-NEXT loop whi|
00004e10  63 68 20 64 65 66 69 6e  65 73 20 61 20 73 65 74  |ch defines a set|
00004e20  20 6f 66 20 70 6f 69 6e  74 73 2c 20 61 6e 64 20  | of points, and |
00004e30  74 68 65 73 65 20 70 6f  69 6e 74 73 20 61 72 65  |these points are|
00004e40  20 67 69 76 65 6e 20 61  0a 66 69 78 65 64 20 76  | given a.fixed v|
00004e50  65 6c 6f 63 69 74 79 20  67 69 76 65 6e 20 62 79  |elocity given by|
00004e60  20 74 68 65 20 6c 61 73  74 20 74 68 72 65 65 20  | the last three |
00004e70  70 61 72 61 6d 65 74 65  72 73 2e 20 20 54 68 69  |parameters.  Thi|
00004e80  73 20 63 6f 6d 6d 61 6e  64 20 69 73 20 6f 6e 6c  |s command is onl|
00004e90  79 0a 70 72 65 73 65 6e  74 20 66 6f 72 20 64 6f  |y.present for do|
00004ea0  77 6e 77 61 72 64 73 20  63 6f 6d 70 61 74 69 62  |wnwards compatib|
00004eb0  69 6c 69 74 79 3a 20 79  6f 75 20 73 68 6f 75 6c  |ility: you shoul|
00004ec0  64 20 6e 6f 77 20 75 73  65 20 22 66 69 78 5f 76  |d now use "fix_v|
00004ed0  65 6c 22 20 69 6e 73 74  65 61 64 2e 20 0a 59 6f  |el" instead. .Yo|
00004ee0  75 20 63 61 6e 20 6e 6f  77 20 68 61 76 65 20 61  |u can now have a|
00004ef0  6e 79 20 6e 75 6d 62 65  72 20 6f 66 20 22 70 75  |ny number of "pu|
00004f00  6c 6c 22 20 63 6f 6d 6d  61 6e 64 73 20 66 6f 72  |ll" commands for|
00004f10  20 61 6e 20 6f 62 6a 65  63 74 2c 20 62 75 74 20  | an object, but |
00004f20  6f 6e 6c 79 20 36 33 0a  64 69 66 66 65 72 65 6e  |only 63.differen|
00004f30  74 20 70 75 6c 6c 20 76  65 6c 6f 63 69 74 69 65  |t pull velocitie|
00004f40  73 20 69 6e 20 61 20 73  63 72 69 70 74 2e 0a 0a  |s in a script...|
00004f50  54 48 45 20 52 45 50 45  4c 20 43 4f 4d 4d 41 4e  |THE REPEL COMMAN|
00004f60  44 0a 20 20 20 20 20 20  20 20 54 68 65 20 22 72  |D.        The "r|
00004f70  65 70 65 6c 22 20 63 6f  6d 6d 61 6e 64 20 63 61  |epel" command ca|
00004f80  75 73 65 73 20 73 6f 6c  69 64 20 6f 62 6a 65 63  |uses solid objec|
00004f90  74 73 20 74 6f 20 72 65  70 65 6c 20 65 61 63 68  |ts to repel each|
00004fa0  20 6f 74 68 65 72 20 77  68 65 6e 0a 74 68 65 79  | other when.they|
00004fb0  20 67 65 74 20 63 6c 6f  73 65 2e 20 20 54 68 65  | get close.  The|
00004fc0  20 70 61 72 61 6d 65 74  65 72 20 73 70 65 63 69  | parameter speci|
00004fd0  66 69 65 73 20 74 68 65  20 73 74 72 65 6e 67 74  |fies the strengt|
00004fe0  68 20 6f 66 20 74 68 65  20 72 65 70 75 6c 73 69  |h of the repulsi|
00004ff0  6f 6e 2e 20 0a 54 68 69  73 20 63 6f 6d 6d 61 6e  |on. .This comman|
00005000  64 20 77 6f 72 6b 73 20  62 79 20 6d 61 6b 69 6e  |d works by makin|
00005010  67 20 74 68 65 20 73 75  72 66 61 63 65 20 70 6f  |g the surface po|
00005020  69 6e 74 73 20 6f 66 20  73 6f 6c 69 64 73 20 72  |ints of solids r|
00005030  65 70 65 6c 20 65 61 63  68 20 6f 74 68 65 72 0a  |epel each other.|
00005040  77 68 65 6e 20 74 68 65  79 20 67 65 74 20 77 69  |when they get wi|
00005050  74 68 69 6e 20 61 20 63  65 72 74 61 69 6e 20 72  |thin a certain r|
00005060  61 6e 67 65 2e 20 20 46  6f 72 20 74 77 6f 20 73  |ange.  For two s|
00005070  6f 6c 69 64 73 20 74 6f  20 69 6e 74 65 72 61 63  |olids to interac|
00005080  74 2c 20 74 68 65 79 20  6d 75 73 74 0a 62 6f 74  |t, they must.bot|
00005090  68 20 68 61 76 65 20 61  20 22 72 65 70 65 6c 22  |h have a "repel"|
000050a0  20 63 6f 6d 6d 61 6e 64  20 69 6e 20 74 68 65 69  | command in thei|
000050b0  72 20 63 72 65 61 74 65  20 62 6c 6f 63 6b 2e 0a  |r create block..|
000050c0  20 20 20 20 20 20 20 20  54 68 65 20 72 61 6e 67  |        The rang|
000050d0  65 20 6f 66 20 74 68 65  20 72 65 70 75 6c 73 69  |e of the repulsi|
000050e0  76 65 20 66 6f 72 63 65  20 69 73 20 73 65 74 20  |ve force is set |
000050f0  74 6f 20 62 65 20 74 77  69 63 65 20 74 68 65 20  |to be twice the |
00005100  73 70 61 63 69 6e 67 20  6f 66 0a 74 68 65 20 70  |spacing of.the p|
00005110  6f 69 6e 74 73 2c 20 73  6f 20 74 68 61 74 20 74  |oints, so that t|
00005120  68 65 20 66 6f 72 63 65  20 69 73 20 6e 6f 74 20  |he force is not |
00005130  74 6f 6f 20 73 6d 61 6c  6c 20 69 6e 20 74 68 65  |too small in the|
00005140  20 67 61 70 73 20 62 65  74 77 65 65 6e 20 74 68  | gaps between th|
00005150  65 0a 70 6f 69 6e 74 73  2e 20 20 54 68 65 20 75  |e.points.  The u|
00005160  6e 66 6f 72 74 75 6e 61  74 65 20 73 69 64 65 20  |nfortunate side |
00005170  65 66 66 65 63 74 20 6f  66 20 74 68 69 73 20 69  |effect of this i|
00005180  73 20 74 68 61 74 20 6f  62 6a 65 63 74 73 20 73  |s that objects s|
00005190  74 61 72 74 20 72 65 70  65 6c 6c 69 6e 67 0a 65  |tart repelling.e|
000051a0  61 63 68 20 6f 74 68 65  72 20 62 65 66 6f 72 65  |ach other before|
000051b0  20 74 68 65 79 20 6d 65  65 74 2e 20 20 54 68 65  | they meet.  The|
000051c0  20 6f 6e 6c 79 20 77 61  79 20 72 6f 75 6e 64 20  | only way round |
000051d0  74 68 69 73 20 69 73 20  74 6f 20 72 65 64 75 63  |this is to reduc|
000051e0  65 20 74 68 65 0a 72 65  70 75 6c 73 69 6f 6e 20  |e the.repulsion |
000051f0  75 6e 74 69 6c 20 74 68  65 20 6f 62 6a 65 63 74  |until the object|
00005200  73 20 6a 75 73 74 20 74  6f 75 63 68 20 62 65 66  |s just touch bef|
00005210  6f 72 65 20 73 65 70 61  72 61 74 69 6e 67 20 61  |ore separating a|
00005220  67 61 69 6e 2c 20 62 75  74 20 74 68 65 0a 76 61  |gain, but the.va|
00005230  6c 75 65 20 79 6f 75 20  6e 65 65 64 20 74 6f 20  |lue you need to |
00005240  6d 61 6b 65 20 74 68 69  73 20 68 61 70 70 65 6e  |make this happen|
00005250  20 77 69 6c 6c 20 64 65  70 65 6e 64 20 6f 6e 20  | will depend on |
00005260  68 6f 77 20 66 61 73 74  20 74 68 65 20 6f 62 6a  |how fast the obj|
00005270  65 63 74 73 20 61 72 65  0a 6d 6f 76 69 6e 67 2c  |ects are.moving,|
00005280  20 68 6f 77 20 68 65 61  76 79 20 74 68 65 79 20  | how heavy they |
00005290  61 72 65 2c 20 65 74 63  2e 20 20 59 6f 75 20 63  |are, etc.  You c|
000052a0  61 6e 20 72 65 64 75 63  65 20 74 68 65 20 72 61  |an reduce the ra|
000052b0  6e 67 65 20 62 79 20 75  73 69 6e 67 20 6d 6f 72  |nge by using mor|
000052c0  65 0a 70 6f 69 6e 74 73  20 6f 6e 20 74 68 65 20  |e.points on the |
000052d0  73 75 72 66 61 63 65 73  20 6f 66 20 74 68 65 20  |surfaces of the |
000052e0  6f 62 6a 65 63 74 73 2c  20 62 75 74 20 74 68 69  |objects, but thi|
000052f0  73 20 6d 65 61 6e 73 20  74 68 65 72 65 20 61 72  |s means there ar|
00005300  65 20 6d 6f 72 65 20 70  6f 69 6e 74 73 0a 77 68  |e more points.wh|
00005310  69 63 68 20 68 61 76 65  20 74 6f 20 62 65 20 63  |ich have to be c|
00005320  6f 6d 70 61 72 65 64 20  77 69 74 68 20 65 61 63  |ompared with eac|
00005330  68 20 6f 74 68 65 72 2c  20 77 68 69 63 68 20 73  |h other, which s|
00005340  6c 6f 77 73 20 74 68 69  6e 67 73 20 64 6f 77 6e  |lows things down|
00005350  2e 20 20 41 0a 63 6f 6d  70 72 6f 6d 69 73 65 2c  |.  A.compromise,|
00005360  20 77 68 69 63 68 20 69  73 20 75 73 65 64 20 69  | which is used i|
00005370  6e 20 74 68 65 20 61 6e  69 6d 61 74 69 6f 6e 20  |n the animation |
00005380  22 72 65 70 65 6c 2e 42  61 6c 6c 42 6c 6f 63 6b  |"repel.BallBlock|
00005390  73 22 2c 20 69 73 20 74  6f 20 68 61 76 65 0a 6f  |s", is to have.o|
000053a0  6e 65 20 6f 62 6a 65 63  74 20 77 69 74 68 20 63  |ne object with c|
000053b0  6c 6f 73 65 6c 79 20 73  70 61 63 65 64 20 70 6f  |losely spaced po|
000053c0  69 6e 74 73 2c 20 61 6e  64 20 6f 6e 65 20 77 69  |ints, and one wi|
000053d0  74 68 20 77 69 64 65 6c  79 20 73 65 70 61 72 61  |th widely separa|
000053e0  74 65 64 20 70 6f 69 6e  74 73 2e 0a 20 54 68 65  |ted points.. The|
000053f0  20 72 65 70 75 6c 73 69  6f 6e 20 66 6f 72 63 65  | repulsion force|
00005400  20 72 61 6e 67 65 20 69  73 20 74 77 69 63 65 20  | range is twice |
00005410  74 68 65 20 73 68 6f 72  74 65 72 20 70 6f 69 6e  |the shorter poin|
00005420  74 20 73 70 61 63 69 6e  67 2c 20 61 6e 64 20 74  |t spacing, and t|
00005430  68 65 0a 6e 75 6d 62 65  72 20 6f 66 20 63 6f 6d  |he.number of com|
00005440  70 61 72 69 73 6f 6e 73  20 69 73 20 74 68 65 20  |parisons is the |
00005450  70 72 6f 64 75 63 74 20  6f 66 20 28 72 65 70 75  |product of (repu|
00005460  6c 73 69 76 65 20 70 6f  69 6e 74 73 20 6f 6e 20  |lsive points on |
00005470  66 69 72 73 74 20 6f 62  6a 65 63 74 29 0a 61 6e  |first object).an|
00005480  64 20 28 72 65 70 75 6c  73 69 76 65 20 70 6f 69  |d (repulsive poi|
00005490  6e 74 73 20 6f 6e 20 73  65 63 6f 6e 64 20 6f 62  |nts on second ob|
000054a0  6a 65 63 74 29 2c 20 73  6f 20 74 68 69 73 20 67  |ject), so this g|
000054b0  69 76 65 73 20 74 68 65  20 62 65 73 74 20 6f 66  |ives the best of|
000054c0  20 62 6f 74 68 0a 77 6f  72 6c 64 73 2e 0a 20 20  | both.worlds..  |
000054d0  20 20 20 20 20 20 54 68  65 20 73 74 72 65 6e 67  |      The streng|
000054e0  74 68 20 6f 66 20 74 68  65 20 72 65 70 75 6c 73  |th of the repuls|
000054f0  69 76 65 20 66 6f 72 63  65 20 75 73 65 64 20 77  |ive force used w|
00005500  68 65 6e 20 74 77 6f 20  6f 62 6a 65 63 74 73 20  |hen two objects |
00005510  6d 65 65 74 20 69 73 0a  74 68 65 20 70 72 6f 64  |meet is.the prod|
00005520  75 63 74 20 6f 66 20 74  68 65 20 22 72 65 70 65  |uct of the "repe|
00005530  6c 22 20 70 61 72 61 6d  65 74 65 72 20 67 69 76  |l" parameter giv|
00005540  65 6e 20 66 6f 72 20 74  68 65 20 74 77 6f 20 6f  |en for the two o|
00005550  62 6a 65 63 74 73 2e 20  0a 20 20 20 20 20 20 20  |bjects. .       |
00005560  20 41 73 20 77 65 6c 6c  20 61 73 20 6d 61 6b 69  | As well as maki|
00005570  6e 67 20 74 68 65 20 73  75 72 66 61 63 65 20 70  |ng the surface p|
00005580  6f 69 6e 74 73 20 72 65  70 75 6c 73 69 76 65 2c  |oints repulsive,|
00005590  20 74 68 65 20 70 72 6f  67 72 61 6d 20 61 6c 73  | the program als|
000055a0  6f 0a 6d 61 6b 65 73 20  74 68 65 20 22 73 65 63  |o.makes the "sec|
000055b0  6f 6e 64 20 6c 61 79 65  72 20 69 6e 22 20 70 6f  |ond layer in" po|
000055c0  69 6e 74 73 20 72 65 70  75 6c 73 69 76 65 2c 20  |ints repulsive, |
000055d0  77 69 74 68 20 66 6f 75  72 20 74 69 6d 65 73 20  |with four times |
000055e0  74 68 65 20 72 65 70 75  6c 73 69 6f 6e 0a 73 74  |the repulsion.st|
000055f0  72 65 6e 67 74 68 2e 20  20 54 68 69 73 20 69 73  |rength.  This is|
00005600  20 77 68 79 20 74 68 65  72 65 20 69 73 20 61 20  | why there is a |
00005610  70 61 75 73 65 20 64 75  72 69 6e 67 20 74 68 65  |pause during the|
00005620  20 72 65 61 64 69 6e 67  20 6f 66 20 74 68 65 20  | reading of the |
00005630  73 63 72 69 70 74 0a 77  68 65 6e 20 61 20 22 72  |script.when a "r|
00005640  65 70 65 6c 22 20 63 6f  6d 6d 61 6e 64 20 69 73  |epel" command is|
00005650  20 66 6f 75 6e 64 3a 20  74 68 65 20 70 72 6f 67  | found: the prog|
00005660  72 61 6d 20 69 73 20 77  6f 72 6b 69 6e 67 20 6f  |ram is working o|
00005670  75 74 20 77 68 69 63 68  20 70 6f 69 6e 74 73 20  |ut which points |
00005680  61 72 65 0a 69 6e 20 74  68 65 20 73 65 63 6f 6e  |are.in the secon|
00005690  64 20 6c 61 79 65 72 2e  20 20 54 68 69 73 20 69  |d layer.  This i|
000056a0  73 20 64 6f 6e 65 20 73  6f 20 74 68 61 74 20 6f  |s done so that o|
000056b0  62 6a 65 63 74 73 20 77  69 6c 6c 20 63 6f 6e 74  |bjects will cont|
000056c0  69 6e 75 65 20 74 6f 20  72 65 70 65 6c 0a 65 76  |inue to repel.ev|
000056d0  65 6e 20 69 66 20 74 68  65 79 20 70 61 73 73 20  |en if they pass |
000056e0  69 6e 74 6f 20 65 61 63  68 20 6f 74 68 65 72 20  |into each other |
000056f0  73 6c 69 67 68 74 6c 79  2e 0a 0a 0a 54 48 45 20  |slightly....THE |
00005700  43 55 42 4f 49 44 20 4f  42 4a 45 43 54 0a 0a 20  |CUBOID OBJECT.. |
00005710  20 20 20 20 20 20 20 54  6f 20 63 72 65 61 74 65  |       To create|
00005720  20 61 20 63 75 62 6f 69  64 2c 20 75 73 65 20 74  | a cuboid, use t|
00005730  68 65 20 66 6f 6c 6c 6f  77 69 6e 67 20 70 61 72  |he following par|
00005740  61 6d 65 74 65 72 73 20  69 6e 20 74 68 65 20 22  |ameters in the "|
00005750  63 72 65 61 74 65 22 0a  62 6c 6f 63 6b 3a 0a 0a  |create".block:..|
00005760  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005770  74 79 70 65 20 63 75 62  6f 69 64 0a 20 20 20 20  |type cuboid.    |
00005780  20 20 20 20 20 20 20 20  20 20 20 20 73 69 7a 65  |            size|
00005790  20 3c 78 5f 73 69 7a 65  3e 2c 3c 79 5f 73 69 7a  | <x_size>,<y_siz|
000057a0  65 3e 2c 3c 7a 5f 73 69  7a 65 3e 0a 20 20 20 20  |e>,<z_size>.    |
000057b0  20 20 20 20 20 20 20 20  20 20 20 20 70 6f 69 6e  |            poin|
000057c0  74 73 20 3c 78 5f 70 74  73 3e 2c 3c 79 5f 70 74  |ts <x_pts>,<y_pt|
000057d0  73 3e 2c 3c 7a 5f 70 74  73 3e 0a 0a 20 20 20 20  |s>,<z_pts>..    |
000057e0  20 20 20 20 54 68 65 20  6d 65 61 6e 69 6e 67 20  |    The meaning |
000057f0  6f 66 20 74 68 65 20 70  61 72 61 6d 65 74 65 72  |of the parameter|
00005800  73 20 69 73 20 68 6f 70  65 66 75 6c 6c 79 20 6f  |s is hopefully o|
00005810  62 76 69 6f 75 73 2e 20  20 49 74 20 69 73 20 61  |bvious.  It is a|
00005820  20 67 6f 6f 64 0a 69 64  65 61 20 74 6f 20 6b 65  | good.idea to ke|
00005830  65 70 20 74 68 65 20 73  65 70 61 72 61 74 69 6f  |ep the separatio|
00005840  6e 20 6f 66 20 74 68 65  20 70 6f 69 6e 74 73 20  |n of the points |
00005850  74 68 65 20 73 61 6d 65  20 69 6e 20 61 6c 6c 20  |the same in all |
00005860  74 68 72 65 65 20 64 69  72 65 63 74 69 6f 6e 73  |three directions|
00005870  2c 0a 69 65 2e 20 3c 73  69 7a 65 3e 2f 3c 70 74  |,.ie. <size>/<pt|
00005880  73 3e 20 73 68 6f 75 6c  64 20 62 65 20 73 69 6d  |s> should be sim|
00005890  69 6c 61 72 20 66 6f 72  20 78 2c 20 79 20 61 6e  |ilar for x, y an|
000058a0  64 20 7a 2e 20 20 54 68  65 20 63 75 62 6f 69 64  |d z.  The cuboid|
000058b0  20 69 73 20 63 72 65 61  74 65 64 0a 69 6e 69 74  | is created.init|
000058c0  69 61 6c 6c 79 20 77 69  74 68 20 6f 6e 65 20 63  |ially with one c|
000058d0  6f 72 6e 65 72 20 61 74  20 74 68 65 20 6f 72 69  |orner at the ori|
000058e0  67 69 6e 2c 20 77 69 74  68 20 74 68 65 20 72 65  |gin, with the re|
000058f0  73 74 20 6f 66 20 74 68  65 20 6f 62 6a 65 63 74  |st of the object|
00005900  20 69 6e 20 74 68 65 0a  2b 78 2c 20 2b 79 2c 20  | in the.+x, +y, |
00005910  2b 7a 20 6f 63 74 61 6e  74 2e 0a 0a 0a 54 48 45  |+z octant....THE|
00005920  20 43 55 42 45 20 4f 42  4a 45 43 54 0a 0a 20 20  | CUBE OBJECT..  |
00005930  20 20 20 20 20 20 54 68  65 20 73 65 74 75 70 20  |      The setup |
00005940  66 6f 72 20 61 20 63 75  62 65 20 69 73 3a 0a 0a  |for a cube is:..|
00005950  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005960  74 79 70 65 20 63 75 62  65 0a 20 20 20 20 20 20  |type cube.      |
00005970  20 20 20 20 20 20 20 20  20 20 73 69 7a 65 20 3c  |          size <|
00005980  73 69 7a 65 3e 0a 20 20  20 20 20 20 20 20 20 20  |size>.          |
00005990  20 20 20 20 20 20 70 6f  69 6e 74 73 20 3c 70 74  |      points <pt|
000059a0  73 3e 0a 0a 20 20 20 20  20 20 20 20 54 68 69 73  |s>..        This|
000059b0  20 69 73 20 62 61 73 69  63 61 6c 6c 79 20 74 68  | is basically th|
000059c0  65 20 73 61 6d 65 20 61  73 20 61 20 63 75 62 6f  |e same as a cubo|
000059d0  69 64 2c 20 65 78 63 65  70 74 20 74 68 65 20 70  |id, except the p|
000059e0  61 72 61 6d 65 74 65 72  73 20 66 6f 72 0a 74 68  |arameters for.th|
000059f0  65 20 74 68 72 65 65 20  64 69 72 65 63 74 69 6f  |e three directio|
00005a00  6e 73 20 61 72 65 20 61  6c 6c 20 73 65 74 20 74  |ns are all set t|
00005a10  6f 20 62 65 20 65 71 75  61 6c 2c 20 61 6e 64 20  |o be equal, and |
00005a20  74 68 65 20 63 75 62 65  20 69 73 20 63 72 65 61  |the cube is crea|
00005a30  74 65 64 0a 63 65 6e 74  72 65 64 20 6f 6e 20 74  |ted.centred on t|
00005a40  68 65 20 6f 72 69 67 69  6e 2e 0a 0a 0a 54 48 45  |he origin....THE|
00005a50  20 53 4f 4c 49 44 20 53  50 48 45 52 45 20 4f 42  | SOLID SPHERE OB|
00005a60  4a 45 43 54 0a 0a 20 20  20 20 20 20 20 20 20 20  |JECT..          |
00005a70  20 20 20 20 20 20 74 79  70 65 20 73 6f 6c 69 64  |      type solid|
00005a80  5f 73 70 68 65 72 65 0a  20 20 20 20 20 20 20 20  |_sphere.        |
00005a90  20 20 20 20 20 20 20 20  73 69 7a 65 20 3c 72 61  |        size <ra|
00005aa0  64 69 75 73 3e 0a 20 20  20 20 20 20 20 20 20 20  |dius>.          |
00005ab0  20 20 20 20 20 20 70 6f  69 6e 74 73 20 3c 70 74  |      points <pt|
00005ac0  73 3e 2c 3c 74 68 69 63  6b 3e 0a 0a 20 20 20 20  |s>,<thick>..    |
00005ad0  20 20 20 20 54 68 65 20  22 73 70 68 65 72 65 22  |    The "sphere"|
00005ae0  20 6f 62 6a 65 63 74 20  6a 75 73 74 20 63 72 65  | object just cre|
00005af0  61 74 65 73 20 74 68 65  20 6f 75 74 65 72 20 73  |ates the outer s|
00005b00  68 65 6c 6c 20 6f 66 20  61 20 73 70 68 65 72 65  |hell of a sphere|
00005b10  2e 20 20 54 68 65 0a 22  73 6f 6c 69 64 5f 73 70  |.  The."solid_sp|
00005b20  68 65 72 65 22 20 6f 62  6a 65 63 74 20 6d 61 6b  |here" object mak|
00005b30  65 73 20 74 68 69 73 20  6d 6f 72 65 20 73 6f 6c  |es this more sol|
00005b40  69 64 20 62 79 20 61 64  64 69 6e 67 20 63 6f 6e  |id by adding con|
00005b50  63 65 6e 74 72 69 63 20  73 70 68 65 72 65 73 20  |centric spheres |
00005b60  6f 66 0a 70 6f 69 6e 74  73 20 69 6e 73 69 64 65  |of.points inside|
00005b70  20 74 68 65 20 6f 72 69  67 69 6e 61 6c 20 73 70  | the original sp|
00005b80  68 65 72 65 2e 20 20 54  68 65 20 3c 72 61 64 69  |here.  The <radi|
00005b90  75 73 3e 20 61 6e 64 20  3c 70 74 73 3e 20 70 61  |us> and <pts> pa|
00005ba0  72 61 6d 65 74 65 72 73  20 61 72 65 0a 74 68 65  |rameters are.the|
00005bb0  20 73 61 6d 65 20 61 73  20 61 73 20 66 6f 72 20  | same as as for |
00005bc0  61 20 73 70 68 65 72 65  2c 20 61 6e 64 20 74 68  |a sphere, and th|
00005bd0  65 20 3c 74 68 69 63 6b  3e 20 70 61 72 61 6d 65  |e <thick> parame|
00005be0  74 65 72 20 73 70 65 63  69 66 69 65 73 20 68 6f  |ter specifies ho|
00005bf0  77 20 6d 61 6e 79 0a 63  6f 6e 63 65 6e 74 72 69  |w many.concentri|
00005c00  63 20 73 70 68 65 72 65  73 20 61 72 65 20 6d 61  |c spheres are ma|
00005c10  64 65 20 28 69 6e 63 6c  75 64 69 6e 67 20 74 68  |de (including th|
00005c20  65 20 6f 75 74 65 72 20  6f 6e 65 29 2e 20 20 49  |e outer one).  I|
00005c30  66 20 79 6f 75 20 73 70  65 63 69 66 79 20 6d 6f  |f you specify mo|
00005c40  72 65 0a 74 68 61 6e 20  77 69 6c 6c 20 66 69 74  |re.than will fit|
00005c50  2c 20 74 68 65 20 70 72  6f 67 72 61 6d 20 77 69  |, the program wi|
00005c60  6c 6c 20 70 75 74 20 69  6e 20 61 73 20 6d 61 6e  |ll put in as man|
00005c70  79 20 61 73 20 69 74 20  63 61 6e 2e 20 20 54 68  |y as it can.  Th|
00005c80  65 20 64 69 66 66 65 72  65 6e 63 65 20 69 6e 0a  |e difference in.|
00005c90  74 68 65 20 72 61 64 69  69 20 6f 66 20 74 68 65  |the radii of the|
00005ca0  20 63 6f 6e 63 65 6e 74  72 69 63 20 73 70 68 65  | concentric sphe|
00005cb0  72 65 73 20 69 73 20 50  49 2a 3c 72 61 64 69 75  |res is PI*<radiu|
00005cc0  73 3e 2f 3c 70 74 73 3e  2e 0a 20 20 20 20 20 20  |s>/<pts>..      |
00005cd0  20 20 0a 0a 54 48 45 20  54 55 42 45 20 4f 42 4a  |  ..THE TUBE OBJ|
00005ce0  45 43 54 0a 0a 20 20 20  20 20 20 20 20 20 20 20  |ECT..           |
00005cf0  20 20 20 20 20 74 79 70  65 20 74 75 62 65 0a 20  |     type tube. |
00005d00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 73  |               s|
00005d10  69 7a 65 20 3c 6c 65 6e  67 74 68 3e 2c 3c 72 61  |ize <length>,<ra|
00005d20  64 69 75 73 3e 2c 3c 74  68 69 63 6b 6e 65 73 73  |dius>,<thickness|
00005d30  3e 0a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |>.              |
00005d40  20 20 70 6f 69 6e 74 73  20 3c 6c 65 6e 67 74 68  |  points <length|
00005d50  5f 70 74 73 3e 2c 3c 63  69 72 63 5f 70 6f 69 6e  |_pts>,<circ_poin|
00005d60  74 73 3e 2c 3c 74 68 69  63 6b 5f 70 6f 69 6e 74  |ts>,<thick_point|
00005d70  73 3e 0a 0a 20 20 20 20  20 20 20 20 54 68 65 20  |s>..        The |
00005d80  3c 6c 65 6e 67 74 68 3e  20 70 61 72 61 6d 65 74  |<length> paramet|
00005d90  65 72 20 73 65 74 73 20  74 68 65 20 6c 65 6e 67  |er sets the leng|
00005da0  74 68 20 6f 66 20 74 68  65 20 74 75 62 65 2e 20  |th of the tube. |
00005db0  20 3c 52 61 64 69 75 73  3e 20 73 65 74 73 0a 74  | <Radius> sets.t|
00005dc0  68 65 20 64 69 73 74 61  6e 63 65 20 66 72 6f 6d  |he distance from|
00005dd0  20 74 68 65 20 61 78 69  73 20 6f 66 20 74 68 65  | the axis of the|
00005de0  20 74 75 62 65 20 74 6f  20 74 68 65 20 63 65 6e  | tube to the cen|
00005df0  74 72 65 20 6f 66 20 69  74 73 20 77 61 6c 6c 73  |tre of its walls|
00005e00  2c 20 61 6e 64 0a 3c 74  68 69 63 6b 6e 65 73 73  |, and.<thickness|
00005e10  3e 20 73 65 74 73 20 74  68 65 20 77 61 6c 6c 20  |> sets the wall |
00005e20  74 68 69 63 6b 6e 65 73  73 2e 0a 20 20 20 20 20  |thickness..     |
00005e30  20 20 20 54 68 65 20 74  68 72 65 65 20 70 6f 69  |   The three poi|
00005e40  6e 74 73 20 70 61 72 61  6d 65 74 65 72 73 20 73  |nts parameters s|
00005e50  65 74 20 74 68 65 20 6e  75 6d 62 65 72 20 6f 66  |et the number of|
00005e60  20 70 6f 69 6e 74 73 20  61 6c 6f 6e 67 20 74 68  | points along th|
00005e70  65 0a 6c 65 6e 67 74 68  2c 20 61 72 6f 75 6e 64  |e.length, around|
00005e80  20 74 68 65 20 63 69 72  63 75 6d 66 65 72 65 6e  | the circumferen|
00005e90  63 65 20 61 6e 64 20 61  63 72 6f 73 73 20 74 68  |ce and across th|
00005ea0  65 20 77 61 6c 6c 20 72  65 73 70 65 63 74 69 76  |e wall respectiv|
00005eb0  65 6c 79 2e 0a 20 20 20  20 20 20 20 20 41 73 20  |ely..        As |
00005ec0  49 20 6d 65 6e 74 69 6f  6e 65 64 20 65 61 72 6c  |I mentioned earl|
00005ed0  69 65 72 2c 20 69 74 20  69 73 20 61 20 67 6f 6f  |ier, it is a goo|
00005ee0  64 20 69 64 65 61 20 74  6f 20 6b 65 65 70 20 74  |d idea to keep t|
00005ef0  68 65 0a 22 6e 65 61 72  65 73 74 2d 6e 65 69 67  |he."nearest-neig|
00005f00  68 62 6f 75 72 22 20 64  69 73 74 61 6e 63 65 20  |hbour" distance |
00005f10  66 61 69 72 6c 79 20 63  6f 6e 73 74 61 6e 74 2c  |fairly constant,|
00005f20  20 73 6f 20 61 73 20 61  20 72 6f 75 67 68 20 67  | so as a rough g|
00005f30  75 69 64 65 2c 20 74 72  79 20 74 6f 0a 6b 65 65  |uide, try to.kee|
00005f40  70 3a 0a 20 20 20 20 20  20 20 20 20 20 20 20 20  |p:.             |
00005f50  20 20 20 3c 6c 65 6e 67  74 68 5f 70 74 73 3e 20  |   <length_pts> |
00005f60  20 20 3c 63 69 72 63 5f  70 6f 69 6e 74 73 3e 20  |  <circ_points> |
00005f70  20 20 3c 74 68 69 63 6b  5f 70 6f 69 6e 74 73 3e  |  <thick_points>|
00005f80  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00005f90  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 20 3d 20  | ------------ = |
00005fa0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 20 3d 20  |------------- = |
00005fb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0a 20  |--------------. |
00005fc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005fd0  20 3c 6c 65 6e 67 74 68  3e 20 20 20 20 20 32 2a  | <length>     2*|
00005fe0  50 49 2a 3c 72 61 64 69  75 73 3e 20 20 20 20 3c  |PI*<radius>    <|
00005ff0  74 68 69 63 6b 6e 65 73  73 3e 0a 20 20 20 20 20  |thickness>.     |
00006000  20 20 20 61 6e 64 0a 20  20 20 20 20 20 20 20 20  |   and.         |
00006010  20 20 20 20 20 20 20 3c  72 61 64 69 75 73 3e 20  |       <radius> |
00006020  3e 20 32 2a 3c 74 68 69  63 6b 6e 65 73 73 3e 0a  |> 2*<thickness>.|
00006030  20 20 20 20 20 20 20 20  54 68 65 73 65 20 61 72  |        These ar|
00006040  65 20 6f 6e 6c 79 20 61  70 70 72 6f 78 69 6d 61  |e only approxima|
00006050  74 65 20 72 75 6c 65 73  2c 20 73 6f 20 66 65 65  |te rules, so fee|
00006060  6c 20 66 72 65 65 20 74  6f 20 74 72 79 20 74 68  |l free to try th|
00006070  69 6e 67 73 20 6f 75 74  20 61 6e 64 0a 73 65 65  |ings out and.see|
00006080  20 77 68 61 74 20 68 61  70 70 65 6e 73 2e 0a 0a  | what happens...|
00006090  0a 43 4f 4d 50 4f 55 4e  44 20 4f 42 4a 45 43 54  |.COMPOUND OBJECT|
000060a0  53 0a 0a 20 20 20 20 20  20 20 20 43 6f 6d 70 6f  |S..        Compo|
000060b0  75 6e 64 20 6f 62 6a 65  63 74 73 20 6c 65 74 20  |und objects let |
000060c0  79 6f 75 20 73 74 69 63  6b 20 74 6f 67 65 74 68  |you stick togeth|
000060d0  65 72 20 61 6e 79 20 6e  75 6d 62 65 72 20 6f 66  |er any number of|
000060e0  20 6f 74 68 65 72 20 73  6f 6c 69 64 73 0a 74 6f  | other solids.to|
000060f0  20 63 72 65 61 74 65 20  61 20 6d 6f 72 65 20 63  | create a more c|
00006100  6f 6d 70 6c 65 78 20 6f  62 6a 65 63 74 2e 20 20  |omplex object.  |
00006110  48 65 72 65 20 69 73 20  61 6e 20 65 78 61 6d 70  |Here is an examp|
00006120  6c 65 20 6f 66 20 68 6f  77 20 61 20 63 6f 6d 70  |le of how a comp|
00006130  6f 75 6e 64 0a 6f 62 6a  65 63 74 20 6d 69 67 68  |ound.object migh|
00006140  74 20 6c 6f 6f 6b 3a 0a  0a 20 20 20 20 20 20 20  |t look:..       |
00006150  20 20 20 20 20 20 20 20  20 63 72 65 61 74 65 20  |         create |
00006160  7b 0a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |{.              |
00006170  20 20 20 74 79 70 65 20  63 6f 6d 70 6f 75 6e 64  |   type compound|
00006180  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00006190  20 20 70 61 72 74 20 7b  0a 20 20 20 20 20 20 20  |  part {.       |
000061a0  20 20 20 20 20 20 20 20  20 20 20 74 79 70 65 20  |           type |
000061b0  63 75 62 6f 69 64 0a 20  20 20 20 20 20 20 20 20  |cuboid.         |
000061c0  20 20 20 20 20 20 20 20  20 70 6f 69 6e 74 73 20  |         points |
000061d0  37 2c 33 2c 33 0a 20 20  20 20 20 20 20 20 20 20  |7,3,3.          |
000061e0  20 20 20 20 20 20 20 20  73 69 7a 65 20 33 69 6e  |        size 3in|
000061f0  2c 31 69 6e 2c 31 69 6e  0a 20 20 20 20 20 20 20  |,1in,1in.       |
00006200  20 20 20 20 20 20 20 20  20 20 20 6f 66 66 73 65  |           offse|
00006210  74 20 31 69 6e 2c 30 2c  30 0a 20 20 20 20 20 20  |t 1in,0,0.      |
00006220  20 20 20 20 20 20 20 20  20 20 20 7d 0a 20 20 20  |           }.   |
00006230  20 20 20 20 20 20 20 20  20 20 20 20 20 20 70 61  |              pa|
00006240  72 74 20 7b 20 74 79 70  65 20 63 75 62 6f 69 64  |rt { type cuboid|
00006250  3a 70 6f 69 6e 74 73 20  33 2c 33 2c 31 31 3a 73  |:points 3,3,11:s|
00006260  69 7a 65 20 31 69 6e 2c  31 69 6e 2c 35 69 6e 20  |ize 1in,1in,5in |
00006270  7d 0a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |}.              |
00006280  20 20 20 70 61 72 74 20  7b 20 74 79 70 65 20 63  |   part { type c|
00006290  75 62 6f 69 64 3a 70 6f  69 6e 74 73 20 33 2c 37  |uboid:points 3,7|
000062a0  2c 33 3a 73 69 7a 65 20  31 69 6e 2c 33 69 6e 2c  |,3:size 1in,3in,|
000062b0  31 69 6e 3a 6f 66 66 73  65 74 0a 30 2c 31 69 6e  |1in:offset.0,1in|
000062c0  2c 30 20 7d 0a 20 20 20  20 20 20 20 20 20 20 20  |,0 }.           |
000062d0  20 20 20 20 20 7d 0a 0a  20 20 20 20 20 20 20 20  |     }..        |
000062e0  54 68 65 20 66 69 72 73  74 20 6c 69 6e 65 20 69  |The first line i|
000062f0  6e 20 74 68 65 20 22 63  72 65 61 74 65 22 20 62  |n the "create" b|
00006300  6c 6f 63 6b 20 69 73 20  22 74 79 70 65 20 63 6f  |lock is "type co|
00006310  6d 70 6f 75 6e 64 22 2c  20 74 68 65 6e 20 74 68  |mpound", then th|
00006320  65 72 65 0a 69 73 20 61  20 6c 69 73 74 20 6f 66  |ere.is a list of|
00006330  20 22 70 61 72 74 22 20  62 6c 6f 63 6b 73 2e 20  | "part" blocks. |
00006340  20 45 61 63 68 20 6f 66  20 74 68 65 73 65 20 69  | Each of these i|
00006350  73 20 6d 75 63 68 20 6c  69 6b 65 20 61 20 22 63  |s much like a "c|
00006360  72 65 61 74 65 22 20 62  6c 6f 63 6b 20 28 69 74  |reate" block (it|
00006370  0a 68 61 73 20 74 79 70  65 2c 20 73 69 7a 65 20  |.has type, size |
00006380  61 6e 64 20 70 6f 69 6e  74 73 20 63 6f 6d 6d 61  |and points comma|
00006390  6e 64 73 29 2c 20 62 75  74 20 77 69 74 68 20 74  |nds), but with t|
000063a0  68 65 20 66 6f 6c 6c 6f  77 69 6e 67 20 64 69 66  |he following dif|
000063b0  66 65 72 65 6e 63 65 73  3a 0a 0a 31 20 20 20 20  |ferences:..1    |
000063c0  20 20 20 59 6f 75 20 63  61 6e 20 61 64 64 20 61  |   You can add a|
000063d0  6e 20 22 6f 66 66 73 65  74 22 20 63 6f 6d 6d 61  |n "offset" comma|
000063e0  6e 64 20 61 74 20 74 68  65 20 65 6e 64 0a 32 20  |nd at the end.2 |
000063f0  20 20 20 20 20 20 59 6f  75 20 63 61 6e 6e 6f 74  |      You cannot|
00006400  20 68 61 76 65 20 61 20  63 6f 6d 70 6f 75 6e 64  | have a compound|
00006410  20 74 79 70 65 20 6f 62  6a 65 63 74 20 61 73 20  | type object as |
00006420  61 20 70 61 72 74 21 0a  0a 20 20 20 20 20 20 20  |a part!..       |
00006430  20 54 68 65 20 22 6f 66  66 73 65 74 22 20 63 6f  | The "offset" co|
00006440  6d 6d 61 6e 64 20 69 73  20 65 78 61 63 74 6c 79  |mmand is exactly|
00006450  20 65 71 75 69 76 61 6c  65 6e 74 20 74 6f 20 61  | equivalent to a|
00006460  20 22 74 72 61 6e 73 6c  61 74 65 22 20 63 6f 6d  | "translate" com|
00006470  6d 61 6e 64 2c 0a 62 75  74 20 6f 6e 6c 79 20 61  |mand,.but only a|
00006480  70 70 6c 69 65 73 20 74  6f 20 74 68 65 20 70 61  |pplies to the pa|
00006490  72 74 69 63 75 6c 61 72  20 70 61 72 74 20 77 68  |rticular part wh|
000064a0  6f 73 65 20 62 6c 6f 63  6b 20 69 74 20 69 73 20  |ose block it is |
000064b0  69 6e 2e 0a 0a 20 20 20  20 20 20 20 20 49 6e 20  |in...        In |
000064c0  74 68 65 20 65 78 61 6d  70 6c 65 20 61 62 6f 76  |the example abov|
000064d0  65 2c 20 74 68 65 20 66  69 72 73 74 20 22 70 61  |e, the first "pa|
000064e0  72 74 22 20 62 6c 6f 63  6b 20 69 73 20 77 72 69  |rt" block is wri|
000064f0  74 74 65 6e 20 6f 75 74  20 77 69 74 68 20 6f 6e  |tten out with on|
00006500  65 0a 63 6f 6d 6d 61 6e  64 20 70 65 72 20 6c 69  |e.command per li|
00006510  6e 65 2c 20 62 75 74 20  74 68 65 20 72 65 73 74  |ne, but the rest|
00006520  20 61 72 65 20 63 6f 6e  74 72 61 63 74 65 64 20  | are contracted |
00006530  6f 6e 74 6f 20 6f 6e 65  20 6c 69 6e 65 20 65 61  |onto one line ea|
00006540  63 68 20 62 79 0a 72 65  70 6c 61 63 69 6e 67 20  |ch by.replacing |
00006550  6e 65 77 6c 69 6e 65 73  20 77 69 74 68 20 63 6f  |newlines with co|
00006560  6c 6f 6e 73 2e 20 20 52  65 6d 65 6d 62 65 72 20  |lons.  Remember |
00006570  74 68 61 74 20 74 68 65  20 63 75 72 6c 79 20 62  |that the curly b|
00006580  72 61 63 6b 65 74 73 20  6d 75 73 74 20 62 65 0a  |rackets must be.|
00006590  73 65 70 61 72 61 74 65  64 20 66 72 6f 6d 20 74  |separated from t|
000065a0  68 65 20 63 6f 6d 6d 61  6e 64 73 2c 20 65 6c 73  |he commands, els|
000065b0  65 20 79 6f 75 20 77 69  6c 6c 20 67 65 74 20 61  |e you will get a|
000065c0  6e 20 65 72 72 6f 72 2e  20 20 54 68 65 72 65 20  |n error.  There |
000065d0  69 73 20 6e 6f 20 6c 69  6d 69 74 0a 6f 6e 20 74  |is no limit.on t|
000065e0  68 65 20 6e 75 6d 62 65  72 20 6f 66 20 70 61 72  |he number of par|
000065f0  74 73 20 61 20 63 6f 6d  70 6f 75 6e 64 20 6f 62  |ts a compound ob|
00006600  6a 65 63 74 20 63 61 6e  20 68 61 76 65 2e 20 20  |ject can have.  |
00006610  43 6f 6d 70 6f 75 6e 64  20 73 6f 6c 69 64 73 20  |Compound solids |
00006620  77 6f 72 6b 20 62 79 0a  6c 65 74 74 69 6e 67 20  |work by.letting |
00006630  79 6f 75 20 63 72 65 61  74 65 20 73 65 76 65 72  |you create sever|
00006640  61 6c 20 6f 62 6a 65 63  74 73 20 62 65 66 6f 72  |al objects befor|
00006650  65 20 79 6f 75 20 75 73  65 20 74 68 65 20 22 6e  |e you use the "n|
00006660  65 61 72 62 6f 6e 64 73  22 20 63 6f 6d 6d 61 6e  |earbonds" comman|
00006670  64 2e 20 0a 57 68 65 6e  20 79 6f 75 20 64 6f 20  |d. .When you do |
00006680  75 73 65 20 74 68 69 73  20 63 6f 6d 6d 61 6e 64  |use this command|
00006690  2c 20 69 74 20 63 6f 6e  6e 65 63 74 73 20 74 68  |, it connects th|
000066a0  65 20 70 61 72 74 73 20  74 6f 67 65 74 68 65 72  |e parts together|
000066b0  2e 20 20 54 68 69 73 20  6d 65 74 68 6f 64 0a 6d  |.  This method.m|
000066c0  65 61 6e 73 20 74 68 61  74 20 70 61 72 74 73 20  |eans that parts |
000066d0  77 69 6c 6c 20 6e 6f 74  20 67 65 74 20 63 6f 6e  |will not get con|
000066e0  6e 65 63 74 65 64 20 69  66 20 74 68 65 79 20 61  |nected if they a|
000066f0  72 65 20 73 65 70 61 72  61 74 65 64 20 62 79 20  |re separated by |
00006700  6d 6f 72 65 20 74 68 61  6e 0a 74 68 65 20 72 61  |more than.the ra|
00006710  6e 67 65 20 6f 66 20 74  68 65 20 22 6e 65 61 72  |nge of the "near|
00006720  62 6f 6e 64 73 22 20 63  6f 6d 6d 61 6e 64 2e 20  |bonds" command. |
00006730  20 59 6f 75 20 73 68 6f  75 6c 64 20 61 6c 73 6f  | You should also|
00006740  20 6e 6f 74 20 6c 65 74  20 70 61 72 74 73 20 70  | not let parts p|
00006750  61 73 73 0a 74 68 72 6f  75 67 68 20 65 61 63 68  |ass.through each|
00006760  20 6f 74 68 65 72 2c 20  61 73 20 74 68 65 20 72  | other, as the r|
00006770  65 73 75 6c 74 69 6e 67  20 63 6f 6d 70 6f 75 6e  |esulting compoun|
00006780  64 20 6f 62 6a 65 63 74  20 69 73 20 75 6e 73 74  |d object is unst|
00006790  61 62 6c 65 2e 0a 0a 0a  47 45 54 54 49 4e 47 20  |able....GETTING |
000067a0  53 43 52 45 45 4e 53 48  4f 54 53 0a 0a 20 20 20  |SCREENSHOTS..   |
000067b0  20 20 20 20 20 54 68 65  72 65 20 69 73 20 6e 6f  |     There is no|
000067c0  20 62 75 69 6c 74 2d 69  6e 20 66 61 63 69 6c 69  | built-in facili|
000067d0  74 79 20 66 6f 72 20 6f  62 74 61 69 6e 69 6e 67  |ty for obtaining|
000067e0  20 73 63 72 65 65 6e 73  68 6f 74 73 2c 20 62 75  | screenshots, bu|
000067f0  74 20 69 74 20 69 73 0a  73 69 6d 70 6c 65 20 74  |t it is.simple t|
00006800  6f 20 64 6f 20 74 68 69  73 20 62 79 20 61 64 64  |o do this by add|
00006810  69 6e 67 20 61 20 6c 69  6e 65 20 74 6f 20 50 52  |ing a line to PR|
00006820  4f 43 66 72 61 6d 65 5f  61 63 74 69 6f 6e 73 20  |OCframe_actions |
00006830  69 6e 20 74 68 65 20 70  72 6f 67 72 61 6d 2e 20  |in the program. |
00006840  0a 54 68 69 73 20 70 72  6f 63 65 64 75 72 65 20  |.This procedure |
00006850  69 73 20 63 61 6c 6c 65  64 20 61 66 74 65 72 20  |is called after |
00006860  65 61 63 68 20 66 72 61  6d 65 20 68 61 73 20 62  |each frame has b|
00006870  65 65 6e 20 64 72 61 77  6e 2c 20 77 69 74 68 20  |een drawn, with |
00006880  74 68 65 20 66 72 61 6d  65 0a 6e 75 6d 62 65 72  |the frame.number|
00006890  20 70 61 73 73 65 64 20  69 6e 20 66 72 61 6d 65  | passed in frame|
000068a0  25 2e 20 20 54 6f 20 73  61 76 65 20 61 20 70 69  |%.  To save a pi|
000068b0  63 74 75 72 65 20 6f 66  20 66 72 61 6d 65 20 33  |cture of frame 3|
000068c0  30 2c 20 61 64 64 20 61  20 6c 69 6e 65 20 61 74  |0, add a line at|
000068d0  20 74 68 65 0a 62 65 67  69 6e 6e 69 6e 67 20 6f  | the.beginning o|
000068e0  66 20 50 52 4f 43 66 72  61 6d 65 5f 61 63 74 69  |f PROCframe_acti|
000068f0  6f 6e 73 20 77 68 69 63  68 20 73 61 79 73 3a 0a  |ons which says:.|
00006900  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00006910  20 49 46 20 66 72 61 6d  65 25 3d 33 30 20 54 48  | IF frame%=30 TH|
00006920  45 4e 20 2a 53 63 72 65  65 6e 53 61 76 65 20 46  |EN *ScreenSave F|
00006930  45 4d 53 70 69 63 33 30  0a 0a 20 20 20 20 20 20  |EMSpic30..      |
00006940  20 20 59 6f 75 20 63 6f  75 6c 64 20 61 6c 73 6f  |  You could also|
00006950  20 6d 61 6b 65 20 74 68  65 20 53 63 72 65 65 6e  | make the Screen|
00006960  53 61 76 65 20 63 6f 6e  64 69 74 69 6f 6e 61 6c  |Save conditional|
00006970  20 6f 6e 20 74 68 65 20  41 6c 74 20 6b 65 79 20  | on the Alt key |
00006980  62 65 69 6e 67 0a 68 65  6c 64 20 64 6f 77 6e 2c  |being.held down,|
00006990  20 66 6f 72 20 65 78 61  6d 70 6c 65 2e 0a 0a 0a  | for example....|
000069a0  46 41 43 45 54 20 4f 55  54 50 55 54 0a 0a 20 20  |FACET OUTPUT..  |
000069b0  20 20 20 20 20 20 49 20  68 61 76 65 20 69 6e 63  |      I have inc|
000069c0  6c 75 64 65 64 20 69 6e  20 74 68 65 20 70 72 6f  |luded in the pro|
000069d0  67 72 61 6d 20 61 20 66  61 63 69 6c 69 74 79 20  |gram a facility |
000069e0  74 6f 20 6f 75 74 70 75  74 20 74 68 65 20 63 6f  |to output the co|
000069f0  6f 72 64 69 6e 61 74 65  73 0a 6f 66 20 61 6c 6c  |ordinates.of all|
00006a00  20 74 68 65 20 74 72 69  61 6e 67 75 6c 61 72 20  | the triangular |
00006a10  22 66 61 63 65 74 73 22  20 77 68 69 63 68 20 6d  |"facets" which m|
00006a20  61 6b 65 20 75 70 20 74  68 65 20 73 75 72 66 61  |ake up the surfa|
00006a30  63 65 73 20 6f 66 20 74  68 65 20 6f 62 6a 65 63  |ces of the objec|
00006a40  74 73 2e 20 0a 59 6f 75  20 63 6f 75 6c 64 20 75  |ts. .You could u|
00006a50  73 65 20 74 68 69 73 20  64 61 74 61 20 74 6f 20  |se this data to |
00006a60  63 72 65 61 74 65 20 61  6e 20 69 6e 70 75 74 20  |create an input |
00006a70  66 69 6c 65 20 66 6f 72  20 61 20 72 61 79 20 74  |file for a ray t|
00006a80  72 61 63 65 72 20 6f 72  20 6f 74 68 65 72 20 33  |racer or other 3|
00006a90  44 0a 72 65 6e 64 65 72  69 6e 67 20 70 72 6f 67  |D.rendering prog|
00006aa0  72 61 6d 2e 20 20 41 73  20 66 6f 72 20 73 63 72  |ram.  As for scr|
00006ab0  65 65 6e 73 68 6f 74 73  2c 20 79 6f 75 20 6a 75  |eenshots, you ju|
00006ac0  73 74 20 61 64 64 20 61  20 6c 69 6e 65 20 74 6f  |st add a line to|
00006ad0  0a 50 52 4f 43 66 72 61  6d 65 5f 61 63 74 69 6f  |.PROCframe_actio|
00006ae0  6e 73 20 6c 69 6b 65 3a  0a 0a 20 20 20 20 20 20  |ns like:..      |
00006af0  20 20 20 20 20 20 20 20  20 20 49 46 20 66 72 61  |          IF fra|
00006b00  6d 65 25 3d 33 30 20 54  48 45 4e 20 50 52 4f 43  |me%=30 THEN PROC|
00006b10  6f 75 74 70 75 74 5f 66  61 63 65 74 73 28 22 24  |output_facets("$|
00006b20  2e 54 65 6d 70 2e 66 61  63 65 74 73 33 30 22 29  |.Temp.facets30")|
00006b30  0a 0a 20 20 20 20 20 20  20 20 77 68 69 63 68 20  |..        which |
00006b40  77 69 6c 6c 20 63 72 65  61 74 65 20 61 20 64 61  |will create a da|
00006b50  74 61 20 66 69 6c 65 20  77 68 65 6e 20 74 68 65  |ta file when the|
00006b60  20 70 72 6f 67 72 61 6d  20 72 65 61 63 68 65 73  | program reaches|
00006b70  20 74 68 65 20 33 30 74  68 0a 66 72 61 6d 65 2e  | the 30th.frame.|
00006b80  20 20 54 68 65 20 64 61  74 61 20 66 69 6c 65 20  |  The data file |
00006b90  63 6f 6e 73 69 73 74 73  20 6f 66 20 61 20 6c 69  |consists of a li|
00006ba0  73 74 20 6f 66 20 6e 75  6d 62 65 72 73 20 77 68  |st of numbers wh|
00006bb0  69 63 68 20 63 61 6e 20  74 68 65 20 72 65 61 64  |ich can the read|
00006bc0  20 62 79 20 61 0a 0a 20  20 20 20 20 20 20 20 20  | by a..         |
00006bd0  20 20 20 20 20 20 20 49  4e 50 55 54 23 63 68 61  |       INPUT#cha|
00006be0  6e 25 2c 41 25 0a 0a 20  20 20 20 20 20 20 20 74  |n%,A%..        t|
00006bf0  79 70 65 20 42 41 53 49  43 20 73 74 61 74 65 6d  |ype BASIC statem|
00006c00  65 6e 74 2e 20 20 59 6f  75 20 63 61 6e 20 72 65  |ent.  You can re|
00006c10  61 64 20 74 68 65 20 66  69 6c 65 20 77 69 74 68  |ad the file with|
00006c20  20 61 20 70 72 6f 67 72  61 6d 20 77 68 69 63 68  | a program which|
00006c30  0a 6c 6f 6f 6b 73 20 73  6f 6d 65 74 68 69 6e 67  |.looks something|
00006c40  20 6c 69 6b 65 20 74 68  69 73 3a 0a 0a 20 20 20  | like this:..   |
00006c50  20 20 20 20 20 20 20 20  20 20 20 20 20 52 45 50  |             REP|
00006c60  45 41 54 0a 20 20 20 20  20 20 20 20 20 20 20 20  |EAT.            |
00006c70  20 20 20 20 20 49 4e 50  55 54 23 63 68 61 6e 25  |     INPUT#chan%|
00006c80  2c 41 25 0a 20 20 20 20  20 20 20 20 20 20 20 20  |,A%.            |
00006c90  20 20 20 20 20 49 46 20  41 25 3c 3e 31 20 54 48  |     IF A%<>1 TH|
00006ca0  45 4e 20 45 52 52 4f 52  20 31 2c 22 42 61 64 20  |EN ERROR 1,"Bad |
00006cb0  66 69 6c 65 22 0a 20 20  20 20 20 20 20 20 20 20  |file".          |
00006cc0  20 20 20 20 20 20 20 49  4e 50 55 54 23 63 68 61  |       INPUT#cha|
00006cd0  6e 25 2c 4e 25 0a 20 20  20 20 20 20 20 20 20 20  |n%,N%.          |
00006ce0  20 20 20 20 20 20 20 46  4f 52 20 69 25 3d 31 20  |       FOR i%=1 |
00006cf0  54 4f 20 4e 25 0a 20 20  20 20 20 20 20 20 20 20  |TO N%.          |
00006d00  20 20 20 20 20 20 20 20  49 4e 50 55 54 23 63 68  |        INPUT#ch|
00006d10  61 6e 25 2c 58 31 25 2c  59 31 25 2c 5a 31 25 0a  |an%,X1%,Y1%,Z1%.|
00006d20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006d30  20 20 49 4e 50 55 54 23  63 68 61 6e 25 2c 58 32  |  INPUT#chan%,X2|
00006d40  25 2c 59 32 25 2c 5a 32  25 0a 20 20 20 20 20 20  |%,Y2%,Z2%.      |
00006d50  20 20 20 20 20 20 20 20  20 20 20 20 49 4e 50 55  |            INPU|
00006d60  54 23 63 68 61 6e 25 2c  58 33 25 2c 59 33 25 2c  |T#chan%,X3%,Y3%,|
00006d70  5a 33 25 0a 20 20 20 20  20 20 20 20 20 20 20 20  |Z3%.            |
00006d80  20 20 20 20 20 20 52 45  4d 20 64 6f 20 73 6f 6d  |      REM do som|
00006d90  65 74 68 69 6e 67 20 77  69 74 68 20 74 68 65 20  |ething with the |
00006da0  64 61 74 61 20 68 65 72  65 0a 20 20 20 20 20 20  |data here.      |
00006db0  20 20 20 20 20 20 20 20  20 20 20 4e 45 58 54 0a  |           NEXT.|
00006dc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006dd0  55 4e 54 49 4c 20 45 4f  46 23 63 68 61 6e 25 0a  |UNTIL EOF#chan%.|
00006de0  0a 20 20 20 20 20 20 20  20 54 68 65 20 63 6f 6f  |.        The coo|
00006df0  72 64 69 6e 61 74 65 73  20 6f 66 20 74 68 65 20  |rdinates of the |
00006e00  74 68 72 65 65 20 63 6f  72 6e 65 72 73 20 6f 66  |three corners of|
00006e10  20 65 61 63 68 20 66 61  63 65 74 20 61 72 65 20  | each facet are |
00006e20  67 69 76 65 6e 20 69 6e  0a 75 6e 69 74 73 20 6f  |given in.units o|
00006e30  66 20 31 2f 36 34 30 74  68 20 6f 66 20 61 20 70  |f 1/640th of a p|
00006e40  6f 69 6e 74 2c 20 69 6e  20 6f 74 68 65 72 20 77  |oint, in other w|
00006e50  6f 72 64 73 20 31 2f 26  42 34 30 30 20 6f 66 20  |ords 1/&B400 of |
00006e60  61 6e 20 69 6e 63 68 2e  0a 0a 20 20 20 20 20 20  |an inch...      |
00006e70  20 20 48 61 76 65 20 66  75 6e 21 0a              |  Have fun!.|
00006e7c