MVDirection.h

Classes

MVDirection -- Vector of three direction cosines (full description)

class MVDirection : public MVPosition

Interface

Public Members
MVDirection()
MVDirection(const MVPosition &other)
MVDirection(Double in0)
MVDirection(const Quantity &angle0)
MVDirection(Double in0, Double in1, Double in2)
MVDirection(Double angle0, Double angle1)
MVDirection(const Quantity &angle0, const Quantity &angle1)
MVDirection(const Quantum<Vector<Double> > &angle)
MVDirection(const Vector<Double> &other)
MVDirection(const Vector<Quantity> &other)
MVDirection &operator=(const MVDirection &other)
~MVDirection()
MVDirection &operator+=(const MVDirection &right)
MVDirection operator+(const MVDirection &right) const
MVDirection &operator-=(const MVDirection &right)
MVDirection operator-(const MVDirection &right) const
virtual uInt type() const
static void assure(const MeasValue &in)
virtual void adjust()
virtual void adjust(Double &res)
virtual MeasValue *clone() const
Vector<Double> get() const
Double getLat() const
Quantity getLat(const Unit &unit) const
Double positionAngle(const MVPosition &other) const
Double positionAngle(const MVDirection &other) const
Quantity positionAngle(const MVPosition &other, const MVPosition &unit) const
Quantity positionAngle(const MVDirection &other, const Unit &unit) const
Double separation(const MVPosition &other) const
Double separation(const MVDirection &other) const
Quantity separation(const MVPosition &other, const MVPosition &unit) const
Quantity separation(const MVDirection &other, const Unit &unit) const
MVDirection crossProduct(const MVDirection &other) const
virtual Vector<Quantum<Double> > getRecordValue() const
virtual Vector<Quantum<Double> > getXRecordValue() const
virtual Vector<Quantum<Double> > getTMRecordValue() const
virtual Bool putValue(const Vector<Quantum<Double> > &in)
void setAngle(Double angle0, Double angle1)
void shift(const Quantum<Double> &lng, const Quantum<Double> &lat, Bool trueAngle=False)
void shift(Double lng, Double lat, Bool trueAngle=False)
void shiftLongitude(const Quantity &lng, Bool trueAngle=False)
void shiftLongitude(Double lng, Bool trueAngle=False)
void shiftLatitude(const Quantum<Double> &lat, Bool trueAngle=False)
void shiftLatitude(Double lat, Bool trueAngle=False)
void shift(const MVDirection &shft, Bool trueAngle=False)
void shiftAngle(const Quantum<Double> &off, const Quantum<Double> &pa)
void shiftAngle(Double off, Double pa)

Description

Review Status

Reviewed By:
tcornwel
Date Reviewed:
1996/02/22
Programs:
Tests:

Prerequisite

Etymology

From Measure, Value and Direction

Synopsis

An MVDirection is a 3-vector of direction cosines. It is based on the MVposition class. The main difference is that the length of the vector will be adjusted (normalised) to a length of 1 in all operations. It can be constructed with: A void adjust() function normalises the vector to a length of 1; a get() returns as a Double 2-vector the angles of the direction cosines; a getAngle() returns a Quantum 2-vector, (uInt) returns the indicated element, and getValue returns the direction cosine vector.
Direction cosines can be added and subtracted: the result will be adjusted to a length of 1.
The multiplication of two direction cosines produces the inner product.
shift() methods are available to shift in angular coordinates. E.g. shift(Quantity(5, "arcsec"), Quantity(-7, "arcsec")) will shift 5 arcsec in longitude, and -7 arcsec in latitude. They have a trueAngle switch to shift in latitude and perpendicular (along a great circle) to it.

Example

See MDirection

Motivation

To aid coordinate transformations

To Do

Member Description

MVDirection()

Default constructor generates a direction to the pole (i.e. (0,0,1))

MVDirection(const MVPosition &other)

Copy constructor

MVDirection(Double in0)
MVDirection(const Quantity &angle0)

Constructs with elevation = 0.

MVDirection(Double in0, Double in1, Double in2)

Creates a specified vector

MVDirection(Double angle0, Double angle1)

Creates the direction cosines from specified angles along equator (azimuth) and towards pole (,elevation).

MVDirection(const Quantum<Vector<Double> > &angle)

Creates the direction cosines from specified angles

Thrown Exceptions

If not enough angles: pole (=(0,0,1)) assumed (if none), or elevation =0 (if 1); direction cosines assumed (if 3).

Thrown Exceptions

MVDirection(const Quantity &angle0, const Quantity &angle1)

Creates the direction cosines from specified angles

Thrown Exceptions

MVDirection(const Vector<Double> &other)
MVDirection(const Vector<Quantity> &other)

Create from Vector. Assumes angles if less than or equal than 2 elements. Assumes direction cosines if 3 elements.

Thrown Exceptions

MVDirection &operator=(const MVDirection &other)

Copy assignment

~MVDirection()

Destructor

MVDirection &operator+=(const MVDirection &right)
MVDirection operator+(const MVDirection &right) const
MVDirection &operator-=(const MVDirection &right)
MVDirection operator-(const MVDirection &right) const

Addition and subtraction

virtual uInt type() const
static void assure(const MeasValue &in)

Tell me your type

virtual void adjust()

Adjust the direction cosines to a length of 1

virtual void adjust(Double &res)

Adjust the direction cosines to a length of 1 and return the length value

virtual MeasValue *clone() const

Re-adjust : taken from MVPosition.

Clone data

Vector<Double> get() const

Generate a 2-vector of angles (in rad)

Double getLat() const

Get the latitude angle (rad)

Quantity getLat(const Unit &unit) const

and with specified units

Double positionAngle(const MVPosition &other) const
Double positionAngle(const MVDirection &other) const
Quantity positionAngle(const MVPosition &other, const MVPosition &unit) const
Quantity positionAngle(const MVDirection &other, const Unit &unit) const

Get the position angle between the directions. I.e. the angle between the direction from one to the pole, and from one to the other.

Double separation(const MVPosition &other) const
Double separation(const MVDirection &other) const
Quantity separation(const MVPosition &other, const MVPosition &unit) const
Quantity separation(const MVDirection &other, const Unit &unit) const

Get the angular separation between two directions.

MVDirection crossProduct(const MVDirection &other) const

Produce the cross product

virtual Vector<Quantum<Double> > getRecordValue() const
virtual Vector<Quantum<Double> > getXRecordValue() const
virtual Vector<Quantum<Double> > getTMRecordValue() const

Get the internal value as a Vector<Quantity>. Usable in records. The getXRecordValue() gets additional information for records. Note that the Vectors could be empty.

virtual Bool putValue(const Vector<Quantum<Double> > &in)

Set the internal value if correct values and dimensions

void setAngle(Double angle0, Double angle1)

Set the internal value, using the longitude and latitude (in rad) given

void shift(const Quantum<Double> &lng, const Quantum<Double> &lat, Bool trueAngle=False)
void shift(Double lng, Double lat, Bool trueAngle=False)
void shiftLongitude(const Quantity &lng, Bool trueAngle=False)
void shiftLongitude(Double lng, Bool trueAngle=False)
void shiftLatitude(const Quantum<Double> &lat, Bool trueAngle=False)
void shiftLatitude(Double lat, Bool trueAngle=False)
void shift(const MVDirection &shft, Bool trueAngle=False)

Shift the direction in longitude (radians if Double) and/or latitude. If the trueAngle switch is True, the longitude shift will be in angular units perpendicular to the direction to the pole at the shifted latitude, along a great circle.

void shiftAngle(const Quantum<Double> &off, const Quantum<Double> &pa)
void shiftAngle(Double off, Double pa)

Shift over an angle off in the direction pa. pa is measured from North, in the direction of increasing longitude.