## Name

anim_cascade — evaluates movement of an object relative to a moving frame of reference

## Synopsis

`anim_cascade` [-s] [-o(`f`|`r`|`a`)] [-(`f`|`r`|`a`)(`c`|`y`) # # #] `input.table` `output.table`

## DESCRIPTION

Anim_cascade is designed to enable the user to control the movement of objects relative to other objects. In the normal mode of operation, the user supplies the position and orientation of a (possibly moving) frame of reference and the position and orientation of an object relative to the frame of reference, and anim_cascade produces the absolute position and orientation of the object at each point in time. All orientations are specified as yaw, pitch, and roll. The columns of the input table are:

time fx fy fz fyaw fpitch froll rx ry rz ryaw rpitch rroll

and the columns of the output table are:

time ax ay az ayaw apitch aroll

Here "f" refers to the frame of reference, "r" refers to the position and orientation of the object relative to the frame, and "a" refers to the absolute position and orientation of the object.

## OPTIONS

`-or`

  Output the relative position and orientation. If this option is specified, anim_cascade will expect the absolute position and orientation of the frame of reference and the object as input, and will produce the position and orientation or the object relative to the frame as output. The input columns should be:

  time fx fy fz fyaw fpitch froll ax ay az ayaw apitch aroll

  and the output columns will be:

  time rx ry rz ryaw rpitch rroll

`-of`

  Output the frame of reference. If this option is specified, anim_cascade will expect the absolute and relative positions and orientations of the object as input, and will produce the corresponding frame of reference as output. The input columns should be:

  time ax ay az ayaw apitch aroll rx ry rz ryaw rpitch rroll

  and the output columns will be:

  time fx fy fz fyaw fpitch froll

`-fc # # #`

  Specify a constant position for the frame of reference. The columns fx, fy, and fz should be omitted from the input table, and the command-line arguments will be used instead. This has no effect if used in conjunction with `-of`.

`-fy # # #`

  Specify a constant orientation for the frame of reference. The columns fyaw, fpitch, and froll should be omitted from the input table, and the command-line arguments will be used instead. This has no effect if used in conjunction with `-of`.

`-rc # # #`

  Specify a constant position of the object relative to the frame of reference. The columns rx, ry, and rz should be omitted from the input table, and the command-line arguments will be used instead. This has no effect if used in conjunction with `-or`.

`-ry # # #`

  Specify a constant orientation of the object relative to the frame of reference. The columns ryaw, rpitch, and rroll should be omitted from the input table, and the command-line arguments will be used instead. This has no effect if used in conjunction with `-or`.

`-ac # # #`

  Specify a constant absolute position for the object. The columns ax, ay, and az should be omitted from the input table, and the command-line arguments will be used instead. This has no effect unless used in conjunction with `-or` or `-of`.

`-ay # # #`

  Specify a constant absolute orientation for the object. The columns ayaw, apitch, and aroll should be omitted from the input table, and the command-line arguments will be used instead. This has no effect unless used in conjunction with `-or` or `-of`.

`-s`

  Suppress time column. No time column is read or written.

  Note: When all of the input columns are specified with command-line arguments, then standard input is not read and only one line of output is produced. The time value will be set to zero, unless it is suppressed.

## EXAMPLES

Example 1. Circular pan around a moving vehicle

Suppose that you want the virtual camera to pan in a circle around a moving vehicle, always staying a fixed distance from the vehicle. There should already exist an animation table with the time, position, and orientation of the vehicle in each frame. This will be the moving frame of reference. Next, you should create an animation table which describes how the camera would need to move if the vehicle stood still at the origin. The columns of the second animation table should be appended to the columns of the first table (using paste, for example), to create the input table. Anim_cascade will produce an absolute animation table for the camera, suitable to use as input to anim_script:

`anim_cascade < input.table | anim_script -v500 > view.script`

Example 2. Determine time of place crossing

Suppose that you have an animation path for an object and you want to know when it crosses a given oblique plane. You can use the `-or` option to find out what the position of the object is relative to the frame of reference of the plane. Suppose that the plane is defined by the equation:

x + z = 0

In a frame of reference located at the origin with a pitch of 45 degrees, the x-axis is perpendicular to the given plane. To convert the absolute animation path into this frame of reference, the command would be:

`anim_cascade -or -fc 0 0 0 -fy 0 45 0 < absolute.table >; \ relative.table`

Wherever the x coordinate in the output table is positive, the object lies above the plane.

Example 3. Camera positioning relative to objects

Suppose that one object is situated at the point (1,2,3) with a yaw, pitch, and roll of (45, 25, 10). Suppose further that you want to position a camera so that to the camera, the first object seems to be 10 units straight ahead, facing to the right. You could find the required position and orientation of the camera with the following command:

`anim_cascade -s -of -ac 1 2 3 -ay 45 25 10 -rc 10 0 0 -ry -90 0 0`

## COPYRIGHT

This software is Copyright (c) 1993-2012 by the United States Government as represented by the U.S. Army Research Laboratory. All rights reserved.

## BUG REPORTS

Reports of bugs or problems should be submitted via electronic mail to <devs@brlcad.org>.