Classes | Defines | Functions
core/vgl/vgl_vector_2d.h File Reference

direction vector in Euclidean 2D space More...

#include <vcl_iosfwd.h>

Go to the source code of this file.

Classes

class  vgl_vector_2d< T >
 Direction vector in Euclidean 2D space, templated by type of element. More...

Defines

#define v   vgl_vector_2d<T>
#define VGL_VECTOR_2D_INSTANTIATE(T)   extern "please include vgl/vgl_vector_2d.txx first"

Functions

template<class T >
vcl_ostream & operator<< (vcl_ostream &s, v const &p)
 Write "<vgl_vector_2d x,y> " to stream.
template<class T >
vcl_istream & operator>> (vcl_istream &s, v &p)
 Read from stream, possibly with formatting.
template<class T >
double length (v const &a)
 Return the length of a vector.
template<class T >
sqr_length (v const &a)
 Return the squared length of a vector.
template<class T >
operator+ (v const &a, v const &b)
 c=a+b: add two vectors.
template<class T >
operator- (v const &a, v const &b)
 c=a-b: subtract two vectors.
template<class T >
v & operator+= (v &a, v const &b)
 a+=b: add b to a and return a.
template<class T >
v & operator-= (v &a, v const &b)
 a-=b: subtract b from a and return a.
template<class T >
operator+ (v const &b)
 +b: unary plus operator (no-op).
template<class T >
operator- (v const &b)
template<class T >
operator* (double s, v const &b)
 c=f*b: return a scaled version of the vector.
template<class T >
operator* (v const &a, double s)
 c=a*f: return a scaled version of the vector.
template<class T >
operator/ (v const &a, double s)
 c=b/f: return an inversely scaled version of the vector (scale must be nonzero).
template<class T >
v & operator*= (v &a, double s)
 a*=f: scale the vector.
template<class T >
v & operator/= (v &a, double s)
 a/=f: inversely scale the vector (scale must be nonzero).
template<class T >
dot_product (v const &a, v const &b)
 dot product or inner product of two vectors.
template<class T >
inner_product (v const &a, v const &b)
 dot product or inner product of two vectors.
template<class T >
cross_product (v const &a, v const &b)
 cross product of two vectors (area of enclosed parallellogram).
template<class T >
double cos_angle (v const &a, v const &b)
 cosine of the angle between two vectors.
template<class T >
double angle (v const &a, v const &b)
 smallest angle between two vectors (in radians, between 0 and Pi).
template<class T >
double signed_angle (v const &a, v const &b)
 signed angle between two vectors (in radians, between -Pi and Pi).
template<class T >
bool orthogonal (v const &a, v const &b, double eps=0.0)
 are two vectors orthogonal, i.e., is their dot product zero?.
template<class T >
bool parallel (v const &a, v const &b, double eps=0.0)
 are two vectors parallel, i.e., is one a scalar multiple of the other?.
template<class T >
double operator/ (v const &a, v const &b)
 f=a/b: return the ratio of two vectors, if they are parallel.
template<class T >
v & normalize (v &a)
 Normalise by dividing through by the length, thus returning a length 1 vector.
template<class T >
normalized (v const &a)
 Return a normalised version of a.
template<class T >
rotated (v const &a, double angle)
 Return a CCW rotated version of a (angle in radian).

Detailed Description

direction vector in Euclidean 2D space

Author:
Peter Vanroose
Date:
27 June, 2001
   Modifications
   2001-07-05 Peter Vanroose  Added orthogonal(); operator* now accepts double
   2009-05-21 Peter Vanroose  istream operator>> re-implemented
   

Definition in file vgl_vector_2d.h.


Define Documentation

#define v   vgl_vector_2d<T>

Definition at line 74 of file vgl_vector_2d.h.

#define VGL_VECTOR_2D_INSTANTIATE (   T)    extern "please include vgl/vgl_vector_2d.txx first"

Definition at line 207 of file vgl_vector_2d.h.


Function Documentation

template<class T >
double angle ( v const &  a,
v const &  b 
)

smallest angle between two vectors (in radians, between 0 and Pi).

template<class T >
double cos_angle ( v const &  a,
v const &  b 
) [inline]

cosine of the angle between two vectors.

Definition at line 160 of file vgl_vector_2d.h.

template<class T >
v cross_product ( v const &  a,
v const &  b 
) [inline]

cross product of two vectors (area of enclosed parallellogram).

cross product of two vectors (is orthogonal to both).

Definition at line 156 of file vgl_vector_2d.h.

template<class T >
T dot_product ( v const &  a,
v const &  b 
) [inline]

dot product or inner product of two vectors.

Definition at line 148 of file vgl_vector_2d.h.

template<class T >
T inner_product ( v const &  a,
v const &  b 
) [inline]

dot product or inner product of two vectors.

Definition at line 152 of file vgl_vector_2d.h.

template<class T >
double length ( v const &  a) [inline]

Return the length of a vector.

Definition at line 94 of file vgl_vector_2d.h.

template<class T >
v & normalize ( v &  a) [inline]

Normalise by dividing through by the length, thus returning a length 1 vector.

If a is zero length, return (0,0).

Definition at line 194 of file vgl_vector_2d.h.

template<class T >
v normalized ( v const &  a) [inline]

Return a normalised version of a.

If a is zero length, return (0,0).

Definition at line 199 of file vgl_vector_2d.h.

template<class T >
v operator* ( double  s,
v const &  b 
) [inline]

c=f*b: return a scaled version of the vector.

Definition at line 126 of file vgl_vector_2d.h.

template<class T >
v operator* ( v const &  a,
double  s 
) [inline]

c=a*f: return a scaled version of the vector.

Definition at line 130 of file vgl_vector_2d.h.

template<class T >
v & operator*= ( v &  a,
double  s 
) [inline]

a*=f: scale the vector.

Definition at line 140 of file vgl_vector_2d.h.

template<class T >
v operator+ ( v const &  a,
v const &  b 
) [inline]

c=a+b: add two vectors.

Definition at line 102 of file vgl_vector_2d.h.

template<class T >
v operator+ ( v const &  b) [inline]

+b: unary plus operator (no-op).

Definition at line 118 of file vgl_vector_2d.h.

template<class T >
v & operator+= ( v &  a,
v const &  b 
) [inline]

a+=b: add b to a and return a.

Definition at line 110 of file vgl_vector_2d.h.

template<class T >
v operator- ( v const &  a,
v const &  b 
) [inline]

c=a-b: subtract two vectors.

Definition at line 106 of file vgl_vector_2d.h.

template<class T >
v operator- ( v const &  b) [inline]

-a: unary minus operator (additive inverse).

Definition at line 122 of file vgl_vector_2d.h.

template<class T >
v & operator-= ( v &  a,
v const &  b 
) [inline]

a-=b: subtract b from a and return a.

Definition at line 114 of file vgl_vector_2d.h.

template<class T >
v operator/ ( v const &  a,
double  s 
) [inline]

c=b/f: return an inversely scaled version of the vector (scale must be nonzero).

Note that the argument type is double, not T, to avoid rounding errors when type T has no multiplicative inverses (like T=int).

Definition at line 136 of file vgl_vector_2d.h.

template<class T >
double operator/ ( v const &  a,
v const &  b 
) [inline]

f=a/b: return the ratio of two vectors, if they are parallel.

(If not, return a "least squares" approximation.) Note that the return type is double, not T, since the ratio of e.g. two vgl_vector_2d<int> need not be an int.

(If not, return a "least squares" approximation.) Note that the return type is double, not T, since the ratio of e.g. two vgl_vector_3d<int> need not be an int.

Definition at line 188 of file vgl_vector_2d.h.

template<class T >
v & operator/= ( v &  a,
double  s 
) [inline]

a/=f: inversely scale the vector (scale must be nonzero).

Definition at line 144 of file vgl_vector_2d.h.

template<class T >
vcl_ostream & operator<< ( vcl_ostream &  s,
v const &  p 
)

Write "<vgl_vector_2d x,y> " to stream.

Write "<vgl_vector_3d x,y,z> " to stream.

template<class T >
vcl_istream & operator>> ( vcl_istream &  s,
v &  p 
)

Read from stream, possibly with formatting.

Either just reads two blank-separated numbers, or reads two comma-separated numbers, or reads two numbers in parenthesized form "(123, 321)"

Either just reads three blank-separated numbers, or reads three comma-separated numbers, or reads three numbers in parenthesized form "(123, 321, 567)"

template<class T >
bool orthogonal ( v const &  a,
v const &  b,
double  eps = 0.0 
)

are two vectors orthogonal, i.e., is their dot product zero?.

If the third argument is specified, it is taken as the "tolerance", i.e. in that case this function returns true if the vectors are almost orthogonal.

template<class T >
bool parallel ( v const &  a,
v const &  b,
double  eps = 0.0 
)

are two vectors parallel, i.e., is one a scalar multiple of the other?.

If the third argument is specified, it is taken as the "tolerance", i.e. in that case this function returns true if the vectors are almost parallel.

template<class T >
v rotated ( v const &  a,
double  angle 
)

Return a CCW rotated version of a (angle in radian).

template<class T >
double signed_angle ( v const &  a,
v const &  b 
)

signed angle between two vectors (in radians, between -Pi and Pi).

return the rotation angle to go from `a' to `b'

template<class T >
T sqr_length ( v const &  a) [inline]

Return the squared length of a vector.

Definition at line 98 of file vgl_vector_2d.h.