Angle Calculations
The telemetry types in the Telemetry Module sometimes include information about angles from the camera to one or more tracked objects in the scene. The angles provide information about the objects’ location in relation to the camera. This page covers the details of how those angles are computed.
As briefly mentioned in the Angle Calculation Mode telemetry type on the general telemetry types page, there are two different angle calculation modes: Horizontal and Circular. The mode can be set in the OpenSpace user interface, and which mode to use depends on the type of display and/or sound environment used, as well as the use case. For example, in the sonification, the angles map sounds to positions in a surround sound system. Depending on the setup of the speakers in a surround sound system, the angle may need to be computed differently. This is why there are two modes. The Horizontal mode is tailored for display environments with a forward-facing direction, such as the Visualization Center dome theater in Norrköping, Sweden, while the Circular mode is designed for omnidirectional planetariums, such as the Hayden Planetarium at the American Museum of Natural History in New York, USA. For an overview of these surround sound configurations, see Surround Sound Configurations. Each angle calculation mode and its respective use case are explained in more detail below.
Both angle calculation modes will always compute an angle from the camera to the object within a horizontal plane of reference in relation to the camera. However, both modes may also include an optional elevation angle that provides information about the objects’ vertical height in relation to the horizontal reference plane.
Important
In a multiple-node display system, where several computers work together to create an immersive display (such as a dome theater or a planetarium), the angles are only calculated on the main display (often the display used by the pilot). Therefore, to ensure that the angles match the surround sound system, it is important that the main display is configured to align with the surround system. For example, if the immersive display has a forward direction at the center of the entire display, then the main display should also have its center as the forward direction. This ensures that the angles calculated for the main display correspond to the object’s position in the larger immersive environment, aligning with the surround sound configuration.
Note
Note that in the figures below, none of the vectors that are shown are normalized.
Horizontal
This angle calculation mode is suitable for flat displays or forward-facing immersive environments. For more information about surround sound configurations, see Surround Sound Configurations. This angle determines where the object is placed within a horizontal plane of reference in relation to the camera. How this angle is computed is explained below.
The angle \(\theta\) is here defined as the angle from the camera to the object within a horizontal plane of reference, \(R\). The reference plane \(R\) is the plane spanned by the \(Camera_{View}\) vector and the left direction of the camera (i.e. the negative \(Camera_{Right}\) vector), with the \(Camera_{Up}\) vector as the normal. The image below shows a figure of these objects and the computations.

The \(CameraToObject\) vector points from the \(Camera\) to the \(Object\) (not shown in the figure above). \(P_{R}(Object)\) is \(CameraToObject\) projected onto the reference plane \(R\). \(P_{Up}(Object)\) is \(CameraToObject\) projected onto \(Camera_{Up}\) (i.e. the normal of plane \(R\)). This gives the formula to calculate \(P_{R}(Object)\) as follows:
Then the angle, \(\theta\), between \(Camera_{View}\) and \(P_{R}(Object)\) is calculated with \(Camera_{Up}\) (i.e. the normal of the plane \(R\)) as the reference axis. The angle ranges from \(-\pi\) to \(\pi\) radians, with zero pointing in the \(Camera_{View}\) direction. If the object is to the left of this direction, the angle is positive; if it’s to the right (as in the example above), the angle is negative.
Additional Elevation Angle
This angle is optional and is only calculated if a setting in the Telemetry Module is enabled. If this setting is not enabled, then this angle is always set to 0.0
. This angle determines where the object is placed within a vertical plane of reference in relation to the camera, i.e the height in relation to the horizontal plane of reference mentioned in the previous section. How this angle is computed is explained below.
The elevation angle \(\phi\) is here defined as the angle from the camera to the object within a vertical plane of reference, \(R\). The reference plane \(R\) is the plane spanned by the \(Camera_{View}\) vector and the \(Camera_{Up}\) vector, with the \(Camera_{Right}\) vector as the normal. The image below shows a figure of these objects and the computations.

\(CameraToObject\) is the vector from the \(Camera\) to the \(Object\) (not shown in the figure above). \(P_{R}(Object)\) is then \(CameraToObject\) projected onto the reference plane \(R\). \(P_{Right}(Object)\) is \(CameraToObject\) projected onto \(Camera_{Right}\) (i.e. the normal of the plane \(R\)). This gives the formula to calculate \(P_{R}(Object)\) as follows:
Then the elevation angle, \(\phi\), between \(Camera_{View}\) and \(P_{R}(Object)\) is calculated with \(Camera_{Right}\) (i.e. the normal of plane \(R\)) used as the reference axis. The elevation angle ranges from \(-\frac{\pi}{2}\) to \(\frac{\pi}{2}\) radians, with zero pointing in the \(Camera_{View}\) direction. If the object is located above the \(Camera_{View}\) vector (as shown in the figure above), the elevation angle is positive; if it’s instead located below, the elevation angle will be negative.
Moon Angle
This angle is only calculated for the specialized Planets Sonification telemetry type. It is the angle from the planet, \(A\), to one of its moons, \(B\), within a horizontal plane of reference in relation to the camera.
The angle \(\theta\) is here defined as the angle from object \(A\) (the planet) to object \(B\) (the moon) within a horizontal plane of reference, \(R\). The reference plane \(R\) is the plane spanned by the \(Camera_{View}\) vector and the left direction of the camera (i.e. the negative \(Camera_{Right}\) vector), with the \(Camera_{Up}\) vector as the normal. The image below shows a figure of these objects and the computations.

\(AToB\) is the vector from the object \(A\) to object \(B\). \(P_{R}(AToB)\) is then \(AToB\) projected onto the reference plane \(R\). \(M(Camera_{View})\) is \(Camera_{View}\) that has been moved (without changing its direction) to the projected position of \(A\) onto the reference plane \(R\).
Then the angle, \(\theta\), between \(M(Camera_{View})\) and \(P_{R}(AToB)\) is calculated with \(Camera_{Up}\) (i.e. the normal of the plane \(R\)) as the reference axis. The angle ranges from \(-\pi\) to \(\pi\) radians, with zero pointing in the \(M(Camera_{View})\) direction. If the object is located to the left of this direction, the angle is positive; if to the right (as shown in the figure above), it is negative.
Moon Additional Elevation Angle
This angle is only calculated for the specialized Planets Sonification telemetry type. This angle is also optional and only calculated if a setting in the Telemetry Module is enabled. If this setting is not enabled, then this angle is always set to 0.0
. This angle is the elevation angle from the planet, \(A\), to one of its moons, \(B\), within a vertical plane of reference in relation to the camera, i.e the height in relation to the horizontal plane of reference mentioned in the previous section. How this angle is computed is explained below.
The elevation angle \(\phi\) is here defined as the angle from object \(A\) (the planet) to object \(B\) (the moon) within a vertical plane of reference, \(R\). The reference plane \(R\) is the plane spanned by the \(Camera_{View}\) vector and the \(Camera_{Up}\) vector, with the \(Camera_{Right}\) vector as the normal. The image below shows a figure of these objects and the computations.

\(AToB\) is the vector from the object \(A\) to object \(B\). \(P_{R}(AToB)\) is then \(AToB\) projected onto the reference plane \(R\). \(M(Camera_{View})\) is \(Camera_{View}\) that has been moved (without changing its direction) to the projected position of \(A\) onto the reference plane \(R\).
Then the elevation angle, \(\phi\), between \(M(Camera_{View})\) and \(P_{R}(AToB)\) is calculated with \(Camera_{Right}\) (i.e. the normal of plane \(R\)) as the reference axis. The elevation angle ranges from \(-\frac{\pi}{2}\) to \(\frac{\pi}{2}\) radians, with zero pointing in the \(M(Camera_{View})\) direction. If the object is located above this direction (as shown in the figure above), the elevation angle is positive, and if below, it is negative.
Circular
This angle calculation mode is suitable for centered fisheye displays or omnidirectional immersive environments. For more information about surround sound configurations, see Surround Sound Configurations. The computed angle determines the object’s position in a circular space around the center of the screen. Compared to the horizontal mode, this mode calculates the angles in a circular (or radial) manner around the center point instead of the deviation from the camera view direction. The angle calculation is explained below.
The angle \(\theta\) is here defined as the angle to the object in a circular space around the center of the screen within a plane of reference, \(R\). The reference plane \(R\) is the plane spanned by the \(Camera_{Up}\) vector and the left direction of the camera (i.e. the negative \(Camera_{Right}\) vector), with the negative \(Camera_{View}\) vector as the normal. The image below shows a figure of these objects and the computations.

\(CameraToObject\) is the vector from the \(Camera\) to the \(Object\) (not shown in the figure above). \(P_{R}(Object)\) is then \(CameraToObject\) projected onto the reference plane \(R\). \(P_{View}(Object)\) (not shown in the figure above) is \(CameraToObject\) projected onto \(Camera_{View}\) (i.e. the negative normal of plane \(R\)). This gives the formula to calculate \(P_{R}(Object)\) as follows:
Then the angle, \(\theta\), between \(Camera_{Up}\) and \(P_{R}(Object)\) is calculated with the negative \(Camera_{View}\) vector (i.e. the normal of the plane \(R\)) used as the reference axis. The angle ranges from \(-\pi\) to \(\pi\) radians, with zero pointing in the \(Camera_{View}\) direction. If the object is to the left of this direction, the angle is positive; if it is to the right (as in the figure above), the angle is negative.
Additional Elevation Angle
This angle determines how far away from the center of the screen the object is located. It is optional and only calculated if a setting in the Telemetry Module is enabled. If this setting is not enabled, the angle will always be 0.0
. The angle calculation is explained below.
The elevation angle, \(\phi\), is in this case defined as the angle from the camera to the object within a vertical plane of reference, \(R\). The reference plane \(R\) is the plane spanned by \(Camera_{View}\) and \(Camera_{Up}\) with \(Camera_{Right}\) as the normal. The plane \(A\) is also gonna be needed and is the plane spanned by \(Camera_{Up}\) and \(Camera_{Right}\) with \(Camera_{View}\) as the normal. The image below shows a figure of these objects and the computations.

Calculating the elevation angle \(\phi\) in the circular mode is done in multiple steps. First, \(CameraToObject\), which is the vector from the \(Camera\) to the \(Object\) (not shown in the figure above), is projected onto the plane \(A\), creating the vector \(P_{A}(Object)\). \(P_{View}(Object)\) is \(CameraToObject\) projected onto \(Camera_{View}\) (which is the normal of the plane \(A\)). This gives the formula to calculate \(P_{A}(Object)\) as follows:
Next, the angle \(\theta\) between \(Camera_{Up}\) and \(P_{A}(Object)\) is calculated, with \(Camera_{View}\) (i.e. the normal of the plane \(A\)) as the reference axis. Then, \(CameraToObject\) is rotated by this angle (\(\theta\)) to align with \(Camera_{Up}\). The resulting \(R_{R}(P_{A}(Object))\) is now located within the reference plane \(R\).
Lastly, the elevation angle, \(\phi\), between \(Camera_{View}\) and \(R_{R}(P_{A}(Object))\) is calculated with \(Camera_{Right}\) (i.e. the normal of the reference plane \(R\)) used as the reference axis. The elevation angle ranges from \(-\frac{\pi}{2}\) to \(\frac{\pi}{2}\) radians, with zero pointing in the \(Camera_{View}\) direction. If the object is located above this direction (as in the figure above), the elevation angle is positive; if below, the angle is negative.
Moon Angle
This angle is only calculated for the specialized Planets Sonification telemetry type. It is the angle from the planet, \(A\), to one of its moons, \(B\), within a circular space around the center of the screen, how this angle is computed is explained below.
The angle \(\theta\) is here defined as the angle from object \(A\) (the planet) to object \(B\) (the moon) within a plane of reference, \(R\), with respect to a direction in relation to the camera. The reference plane \(R\) is the plane spanned by the \(Camera_{Up}\) vector and \(Camera_{Right}\) vector, with the \(Camera_{View}\) vector as the normal. The image below shows a figure of these objects and the computations.

\(AToB\) is the vector from the object \(A\) to object \(B\). \(P_{R}(AToB)\) is then \(AToB\) projected onto the reference plane \(R\).
Note
Note that in the case shown in the figure above, both objects \(A\) and \(B\) are already located within the reference plane \(R\). Therefore \(P_{R}(AToB) = AToB\).
Then the angle, \(\theta\), between \(Camera_{Up}\) and \(P_{R}(AToB)\) is calculated with \(Camera_{View}\) (i.e. the normal of the plane \(R\)) used as the reference axis. The angle ranges from \(-\pi\) to \(\pi\) radians, with zero radians pointing in the \(Camera_{Up}\) direction from point \(A\). If the object is to the left of this direction from point \(A\), the angle is positive; if to the right (as shown in the figure above), the angle is negative.
Moon Additional Elevation Angle
This angle is only calculated for the specialized Planets Sonification telemetry type. It is the elevation angle from the planet, \(A\), to one of its moons, \(B\), which determines how far away from the planet, \(A\), the moon, \(B\), is located in a circular space around the planet, \(A\). This angle is also optional and only calculated if a setting in the Telemetry Module is enabled. If this setting is not enabled, then this angle is always set to 0.0
. The angle calculation is explained below.
The elevation angle, \(\phi\), is here defined as the angle from object \(A\) (the planet) to object \(B\) (the moon) within a plane of reference, \(R\), spanned by the \(Camera_{View}\) vector and the \(Camera_{Up}\) vector, with the \(Camera_{Right}\) vector as the normal. Specifically, for this computation, the position for the moon (which is orbiting point \(A\)) used is the one which is parallel to the reference plane \(R\), no matter the current position of object \(B\). This transformation requires information about what is here called plane \(C\), which is the plane spanned by the \(Camera_{Up}\) vector and the \(Camera_{Right}\) vector, with the \(Camera_{View}\) vector as the normal. The image below shows a figure of these objects and the computations.

Calculating the elevation angle, \(\phi\), from the object \(A\) to object \(B\) in this case again requires several steps. First, \(AToB\), which is the vector from the object \(A\) to object \(B\), is projected onto the plane \(C\), creating \(P_{C}(AToB)\). \(M(Camera_{Up})\) is \(Camera_{Up}\) that has been moved (without changing its direction) to the projected position of \(A\) onto the plane \(C\). Also, \(M(Camera_{View})\) is \(Camera_{View}\) that has been moved (without changing its direction) to end at the projected position of \(A\) onto the reference plane \(R\).
Note
Note that in the case shown in the figure above, both objects \(A\) and \(B\) are already located within the plane \(C\). Therefore \(P_{C}(AToB) = AToB\).
In the next step, the angle \(\theta\), between \(M(Camera_{Up})\) and \(P_{C}(AToB)\) is calculated with \(Camera_{View}\) (i.e. the normal of the plane \(C\)) used as the reference axis. The next step is to rotate \(AToB\) with this angle \(\theta\) to align with \(M(Camera_{Up})\), resulting in \(R_{Up}(AToB)\). This resulting vector is then projected onto \(Camera_{Up}\). \(P_{R}(R_{Up}(AToB))\) is then the vector from the start of \(M(Camera_{View})\) to the end of \(R_{Up}(AToB)\).
Then the elevation angle, \(\phi\), between \(M(Camera_{View})\) and \(P_{R}(R_{Up}(AToB))\) is calculated with \(Camera_{Right}\) (i.e. the normal of plane \(R\)) used as the reference axis. The elevation angle goes from \(-\frac{\pi}{2}\) to \(\frac{\pi}{2}\) in radians, and zero radians would be directly in the \(M(Camera_{View})\) direction. When the object is located above the \(M(Camera_{View})\) vector (as shown in the figure above), then the elevation angle will be possitive. If instead, the object is located below, the elevation angle is negative.