MVDirection.h
Classes
- MVDirection -- Vector of three direction cosines (full description)
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)
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:
- MVDirection() creates direction cosines for pole: (0,0,1)
- MVDirection(MVDirection) creates a copy
- MVDirection(Double, Double, Double) creates with
specified values and adjust to length of 1.
- MVDirection(Double, Double) creates a MVDirection assuming that the two
values are (in radians) angle along 'equator' and towards 'pole'.
- MVDirection(Quantity, Quantity) creates a MVDirection assuming angles
as in previous
- MVDirection(Quantum<Vector<Double> >) creates an MVDirection
from angle vector, assuming
second as zero if not present, and pole if length 0. Assumes
a direction cosine if 3 elements
- MVDirection(Vector<Double>) creates an MVDirection with
the same restrictions as previous one
- MVDirection(Vector<Quantum<Double> >) creates an
MVDirection with the same rstrictions as previous one; but
with unit check.
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
- check if true shifts can be done faster
Member Description
Default constructor generates a direction to the pole (i.e. (0,0,1))
Copy constructor
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).
Creates the direction cosines from specified angles
Thrown Exceptions
- AipsError if quantities not in angle format
If not enough angles: pole (=(0,0,1)) assumed (if none), or elevation =0 (if 1);
direction cosines assumed (if 3).
Thrown Exceptions
- AipsError if more than 3 values or incorrect units
MVDirection(const Quantity &angle0, const Quantity &angle1)
Creates the direction cosines from specified angles
Thrown Exceptions
- AipsError if quantities not in angle format
Create from Vector. Assumes angles if less than or equal than 2 elements.
Assumes direction cosines if 3 elements.
Thrown Exceptions
- AipsError if more than 3 elements
MVDirection &operator=(const MVDirection &other)
Copy assignment
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
Re-adjust : taken from MVPosition.
Clone data
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
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.
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.