#### Description:

This class is used to represent coordinate systems. It does this in rather the same way that a frame around a graph describes the coordinate space in which data are plotted. Consequently, a Frame has a Title (string) attribute, which describes the coordinate space, and contains axes which in turn hold information such as Label and Units strings which are used for labelling (e.g.) graphical output. In general, however, the number of axes is not restricted to two.

Functions are available for converting Frame coordinate values into a form suitable for display, and also for calculating distances and offsets between positions within the Frame.

Frames may also contain knowledge of how to transform to and from related coordinate systems.

#### Constructor Function

astFrame

#### Notes:

- When used as a Mapping, a Frame implements a unit (null) transformation in both the forward and inverse directions (equivalent to a UnitMap). The Nin and Nout attribute values are both equal to the number of Frame axes.

#### Inheritance

The Frame class inherits from the Mapping class.

#### Attributes

In addition to those attributes common to all Mappings, every Frame also has the following attributes (if the Frame has only one axis, the axis specifier can be omited from the following attribute names):

- AlignSystem: Coordinate system used to align Frames

- Bottom(axis): Lowest axis value to display

- Digits/Digits(axis): Number of digits of precision

- Direction(axis): Display axis in conventional direction?

- Domain: Coordinate system domain

- Dtai: Difference between the TAI and UTC timescale

- Dut1: Difference between the UT1 and UTC timescale

- Epoch: Epoch of observation

- Format(axis): Format specification for axis values

- InternalUnit(axis): Physical units for unformated axis values

- Label(axis): Axis label

- MatchEnd: Match trailing axes?

- MaxAxes: Maximum number of Frame axes to match

- MinAxes: Minimum number of Frame axes to match

- Naxes: Number of Frame axes

- NormUnit(axis): Normalised physical units for formatted axis values

- ObsAlt: Geodetic altitude of observer

- ObsLat: Geodetic latitude of observer

- ObsLon: Geodetic longitude of observer

- Permute: Permute axis order?

- PreserveAxes: Preserve axes?

- Symbol(axis): Axis symbol

- System: Coordinate system used to describe the domain

- Title: Frame title

- Top(axis): Highest axis value to display

- Unit(axis): Physical units for formatted axis values

#### Functions

In addition to those functions applicable to all Mappings, the following functions may also be applied to all Frames:

- astAngle: Calculate the angle subtended by two points at a third point

- astAxAngle: Find the angle from an axis, to a line through two points

- astAxDistance: Calculate the distance between two axis values

- astAxNorm: Normalises an array of axis values

- astAxOffset: Calculate an offset along an axis

- astConvert: Determine how to convert between two coordinate systems

- astDistance: Calculate the distance between two points in a Frame

- astFindFrame: Find a coordinate system with specified characteristics

- astFormat: Format a coordinate value for a Frame axis

- astGetActiveUnit: Determines how the Unit attribute will be used

- astIntersect: Find the intersection between two geodesic curves

- astMatchAxes: Find any corresponding axes in two Frames

- astNorm: Normalise a set of Frame coordinates representing one point

- astNormPoints: Normalise a collection of points

- astOffset: Calculate an offset along a geodesic curve

- astOffset2: Calculate an offset along a geodesic curve in a 2D Frame

- astPermAxes: Permute the order of a Frame`’` s axes

- astPickAxes: Create a new Frame by picking axes from an existing one

- astResolve: Resolve a vector into two orthogonal components

- astSetActiveUnit: Specify how the Unit attribute should be used

- astUnformat: Read a formatted coordinate value for a Frame axis

- AST_NORMPOINTS: Normalise a collection of points

Copyright (C) 2021 East Asian Observatory