FORMAT OF WORLD & SEQUENCE FILES
--------------------------------
AERO data files are user-readable ASCII files. Comments start with a 
hash mark ("#") and extend to the end of the line. Lower case characters 
denote an optional value and need not be specified - in this case the 
default values (often 0) are used.

STATE FORMAT

Z                             # begin of a new state
t <starttime:real>
g <gravity:vector>
s <seed value for random value generation:integer>

# any number of bodies
K<bodynr:+integer> <bodytype> <body geometry> <material>
m <mass:real>                 # mass in kg
p <position:vector>           # position of the center of gravity in meter
v <velocity:vector>           # in meter per second
a <acceleration:vector>       # [m/s^2]
q <quaternion>                #
w <vektor>                    # rotary velocity [rad/s]
u <vektor>                    # rotary acceleration [rad/s^2]
c <red:ushort> <green:0-65535> <blue:ushort>                 # color 
n <transparency:real> <reflexion:real> <roughness:real>      # for ray tracer
b -[g][m][k]                  # type of movement: no gravity, 
                              #      no mass, no collision check
i <idnr:long>                 # identification nummber

 
For a "composed" body, the corresponding embedded bodies with their 
parameters should be following the body definition.
The position of the composed object is computed as the center of gravity of
the embedded bodies!

E <bodytype> <geometry> <material>  # only cuboid, sphere and cylinder are allowed
m <mass:real>                       # mass [kg]
p <position:vektor>                 # position [m]
q <quaternion>                      # quaternion ref. Inertialsystem
c <red:ushort> <green:ushort> <blue:ushort>   # color
X                                   # end marker of a composed object

 
Links are entered as follows:

V<linknr> K<nr1> K<nr2> <linktype> <linkparameters>  # any number of links
a <linkpoint1:vektor>       # position of connection at body <nr1>
b <linkpoint2:vektor>       # and at body <nr2>


A constant force of <strength> is applied at a point of a body during the 
time intervall t0 and t1. 

F <t0:real> <t1:real> K<bodynr> [<point:vektor>] <forceparameter>

Q                           # denotes the end of the current state


For all definitions above, the following types apply:

 long   = 0..2^31
 ushort = 0..65535
 vector = <real> <real> <real>
 quaternion = <real> <real> <real> <real>
 bodytype = sphere | box | cylinder | plane | nail | mpoint | point | composed
 bodygeometry of "sphere"  = <radius:real>
 bodygeometry of "cylinder" = <radius:real> <height:real>
 bodygeometry of "box" = <xyz-dimensions:vector>
 
 <material> = material name from the material table e.g.: iron, plastic, ..
   # this is only set for sphere, box, cylinder und plane !

 <linktype> = spring | damper | joint | rod
 linkparameter for "spring" = <resting length:real> <spring constant:real>
 linkparameter for "damper" = <damping constant:real>
 linkparameter for "rod" = <length:real>

 <forceparameter> = inertial <force:vektor>  # const. force in inertial system [N]
 <forceparameter> = local <force':vektor>    # force ref to body coord. system
 <forceparameter> = guided <force:real> K<targetbody> [<target position:vektor>] 
             # constant force in [N] directed always to a point at the target body


The following samples show erroneous entries, which will be checked
when read by AERO:
 * Z
 * g 0 -9.81 0                       # negative gravity
 *
 * K1 box 0.1 0.2 0.3 iron           # iron cuboid falls down to nowhere
 * v -1.0 0 0
 *
 * K2 sphere 0.05 plastic            # plastic sphere as pendulum
 * p -2.0 10.0 0
 *
 * K3 nail
 * p 0.0 10.0 0.0
 *
 * V1 K2 K3 rod 2.0
 *
 * F1 K1 0 1 0 0 0 inertial 10 0 0   # force in the center of K1 in x-diection with
 *                                   # strength 10N is applied during time 0s <= t <= 1s
 * Q


MATERIAL FORMAT:

# this is an remark
M <maximum number of materials:Integer>
m <name:string> <density:real> <dynamic friction constant:real> 
  <static friction constant:real> 
  <impact value:real> <spring value:real> <damping value:real>
  [<default_red:ushort> <default_green:ushort> <default_blue:ushort> 
   <transparency:real> <reflexion:real> <roughness:real>]
# density in [kg/m^3]
# transparency in the interval 0..1
Q



CONFIGURATION FORMAT

P
h <integration step width:real> <min> <max>
e (Y|N) <eps:real>                  # error control Y(es) or N(o)
k (Y|N) <collision step width:real> # collision activated Y(es) or N(o)
b <max. resting speed:real> <min. penetration depth:real>
u <min. sliding speed:real> <min. rolling speed:real>
g (Y|N) <random gravity in %:real>
r <rod spring constant:real> <rod damping constant:real>   
j <joint spring constant:real> <joint damper constant:real>
m <minimal srping stretching:real>
q <maximal cuboid-collision diagonal depth:real>
s (Y|N)                             # spring impact YES, NO
a (Y|N) <cw-value of sphere:real> <cw-value of cuboid:real> <cw-value of cylinder:real>
Q


The AERO internal format is now described by using an example.
Sample world (state) file:

W              # start world file
M 32           # material table, may contain 32 entries
               # two materials, "iron" and "wood" are entered
m iron 7.8000e+03 1.0000e+00 1.3000e+00 9.0000e-01 5.0000e+04 5.0000e+02
m wood 6.0000e+02 5.0000e-01 6.5000e-01 7.0000e-01 5.0000e+04 5.0000e+02
Q              # end of material table


Z              # start description of current state: objects, forces, and links
t 1            # time of state description
g 0 -9.81 0    # gravitation vector

               # object definitions start with letter "K" plus a number
               # "K1" is the first object: sphere, radius 5cm, material iron
K1 sphere 5.00000000e-02 iron
               # mass
m 4.08398627e+00 
               # position
p -2.14595881e-01 8.11705112e-02 0.00000000e+00
               # orientation
q 6.61532809e-01 0.00000000e+00 0.00000000e+00 -7.49916216e-01
               # velocity
v -1.54115612e-03 1.68088549e-03 0.00000000e+00
               # rotary velocity
w 0.00000000e+00 0.00000000e+00 1.72884763e-02

 
K2 nail        # object labelled "K2": immmovable point (nail)
p 0.00000000e+00 4.00000000e-01 0.00000000e+00


               # link definitions start with letter "V" plus a number
               # "V1" links objects K1 and K2 with a rod of specified length
V1 K1 K2 rod 3.26810113e-01
               # the following line(s) denotes the link's fixture point for
               # the first and/or second object (marked "a" or "b"), in case
               # it is not identical to an object's center.
a 3.75000000e-02 -4.00000000e-02 0.00000000e+00


V2 K1 K2 rod 4.12310563e-01
               # the second link "V2" is again between object K1 and K2
a 3.00000000e-02 4.00000000e-02 0.00000000e+00
b -5.50000000e-01 -3.12250226e-17 0.00000000e+00


               # force definitions start with letter "F"
               # next params: start and termination time for applying force
               # next params: object (here "K1"), force type (guided, 
               #  inertial, or local), force attack vector (includes strength)
F 1 1.01 K1 inertial 0 0 4

Q              # end description of current state
               # end of world file


Sequence files are similar to world files, however, they may conatain several
"world" states. For these, a mark "X" has to be placed before the first state,
and a mark "Y" has to be placed after the last state.