## The SkyFrame Model

A SkyFrameSkyFrame is, of course, a FrameFrame (§7) and also a MappingMapping (§5), so it inherits all the properties and behaviour of these two ancestral classes. When used as a Mapping, a SkyFrame implements a unit transformation, exactly like a basic Frame (§7.3) or a UnitMapUnitMap, so this aspect of its behaviour is not of great importance.

When used as a Frame, however, a SkyFrame represents a 2-dimensional spherical coordinate system, in which the shortest distance between two points is a great circle. A SkyFrame therefore always has exactly two axes which represent the longitude and latitude of a coordinate system residing on the celestial sphere. Many such coordinate systems can be represented by a SkyFrame, as we will see shortly.

A SkyFrame can represent any of the commonly used celestial coordinate systems. Optionally, the origin of the longitude/latitude system can be moved to any specified point in the standard celestial system, allowing a SkyFrame to represent offsets from a specified sky position.

When it is first created, a SkyFrame's axes are always in the order (longitude, latitude) but this can be changed, if required, by using the astPermAxesastPermAxes function (§7.9). The order of the axes can be determined at any time using the LatAxisLatAxis and LonAxisLonAxis attributes. A SkyFrame's coordinate values are always stored as angles in (double precision) radians, regardless of the setting of the Unit attribute .