Public Member Functions | Private Attributes | Related Functions | List of all members
vgl_homg_point_2d< T > Class Template Reference

Represents a homogeneous 2D point. More...

#include <vgl_fwd.h>

Inheritance diagram for vgl_homg_point_2d< T >:
Inheritance graph
[legend]

Public Member Functions

 vgl_homg_point_2d ()
 Default constructor with (0,0,1). More...
 
 vgl_homg_point_2d (T px, T py, T pw=(T) 1)
 Construct from two (nonhomogeneous) or three (homogeneous) Types. More...
 
 vgl_homg_point_2d (const T v[3])
 Construct from homogeneous 3-array. More...
 
 vgl_homg_point_2d (vgl_vector_2d< T >const &v)
 Construct point at infinity from direction vector. More...
 
 vgl_homg_point_2d (vgl_point_2d< T > const &p)
 Construct from (non-homogeneous) vgl_point_2d<T>. More...
 
 vgl_homg_point_2d (vgl_homg_line_2d< T > const &l1, vgl_homg_line_2d< T > const &l2)
 Construct from 2 lines (intersection). More...
 
bool operator== (vgl_homg_point_2d< T > const &p) const
 the comparison operator. More...
 
bool operator!= (vgl_homg_point_2d< T > const &other) const
 
x () const
 
y () const
 
w () const
 
void set (T px, T py, T pw=(T) 1)
 Set x,y,w. More...
 
void set (T const p[3])
 
bool ideal (T tol=(T) 0) const
 Return true iff the point is at infinity (an ideal point). More...
 

Private Attributes

x_
 
y_
 
w_
 

Related Functions

(Note that these are not member functions.)

template<class T >
vgl_homg_point_2d< T > operator * (vnl_matrix_fixed< T, 3, 3 > const &m, vgl_homg_point_2d< T > const &p)
 Transform a point through a 3x3 projective transformation matrix. More...
 
template<class T >
vgl_homg_point_2d< T > vgl_closest_point_origin (vgl_homg_line_2d< T > const &l)
 Return the point on the given line closest to the origin. More...
 
template<class T >
double vgl_distance (vgl_homg_point_2d< T >const &p1, vgl_homg_point_2d< T >const &p2)
 return the distance between two points. More...
 
template<class T >
std::ostream & operator<< (std::ostream &s, vgl_homg_point_2d< T > const &p)
 Write "<vgl_homg_point_2d (x,y,w) >" to stream. More...
 
template<class T >
std::istream & operator>> (std::istream &s, vgl_homg_point_2d< T > &p)
 Read x y w from stream. More...
 
template<class T >
bool is_ideal (vgl_homg_point_2d< T > const &p, T tol=(T) 0)
 Return true iff the point is at infinity (an ideal point). More...
 
template<class T >
vgl_vector_2d< T > operator- (vgl_homg_point_2d< T > const &p1, vgl_homg_point_2d< T > const &p2)
 The difference of two points is the vector from second to first point. More...
 
template<class T >
vgl_homg_point_2d< T > operator+ (vgl_homg_point_2d< T > const &p, vgl_vector_2d< T > const &v)
 Adding a vector to a point gives a new point at the end of that vector. More...
 
template<class T >
vgl_homg_point_2d< T > & operator+= (vgl_homg_point_2d< T > &p, vgl_vector_2d< T > const &v)
 Adding a vector to a point gives the point at the end of that vector. More...
 
template<class T >
vgl_homg_point_2d< T > operator- (vgl_homg_point_2d< T > const &p, vgl_vector_2d< T > const &v)
 Subtracting a vector from a point is the same as adding the inverse vector. More...
 
template<class T >
vgl_homg_point_2d< T > & operator-= (vgl_homg_point_2d< T > &p, vgl_vector_2d< T > const &v)
 Subtracting a vector from a point is the same as adding the inverse vector. More...
 
template<class T >
double cross_ratio (vgl_homg_point_2d< T >const &p1, vgl_homg_point_2d< T >const &p2, vgl_homg_point_2d< T >const &p3, vgl_homg_point_2d< T >const &p4)
 cross ratio of four collinear points. More...
 
template<class T >
bool collinear (vgl_homg_point_2d< T > const &p1, vgl_homg_point_2d< T > const &p2, vgl_homg_point_2d< T > const &p3)
 Are three points collinear, i.e., do they lie on a common line?. More...
 
template<class T >
double ratio (vgl_homg_point_2d< T > const &p1, vgl_homg_point_2d< T > const &p2, vgl_homg_point_2d< T > const &p3)
 Return the relative distance to p1 wrt p1-p2 of p3. More...
 
template<class T >
vgl_homg_point_2d< T > centre (vgl_homg_point_2d< T > const &p1, vgl_homg_point_2d< T > const &p2)
 Return the point at the centre of gravity of two given points. More...
 
template<class T >
vgl_homg_point_2d< T > centre (std::vector< vgl_homg_point_2d< T > > const &v)
 Return the point at the centre of gravity of a set of given points. More...
 

Detailed Description

template<class T>
class vgl_homg_point_2d< T >

Represents a homogeneous 2D point.

Definition at line 8 of file vgl_fwd.h.

Constructor & Destructor Documentation

◆ vgl_homg_point_2d() [1/6]

template<class T>
vgl_homg_point_2d< T >::vgl_homg_point_2d ( )
inline

Default constructor with (0,0,1).

Definition at line 39 of file vgl_homg_point_2d.h.

◆ vgl_homg_point_2d() [2/6]

template<class T>
vgl_homg_point_2d< T >::vgl_homg_point_2d ( px,
py,
pw = (T)1 
)
inline

Construct from two (nonhomogeneous) or three (homogeneous) Types.

Definition at line 42 of file vgl_homg_point_2d.h.

◆ vgl_homg_point_2d() [3/6]

template<class T>
vgl_homg_point_2d< T >::vgl_homg_point_2d ( const T  v[3])
inline

Construct from homogeneous 3-array.

Definition at line 46 of file vgl_homg_point_2d.h.

◆ vgl_homg_point_2d() [4/6]

template<class T>
vgl_homg_point_2d< T >::vgl_homg_point_2d ( vgl_vector_2d< T >const &  v)
inline

Construct point at infinity from direction vector.

Definition at line 49 of file vgl_homg_point_2d.h.

◆ vgl_homg_point_2d() [5/6]

template<class T>
vgl_homg_point_2d< T >::vgl_homg_point_2d ( vgl_point_2d< T > const &  p)
inlineexplicit

Construct from (non-homogeneous) vgl_point_2d<T>.

Definition at line 52 of file vgl_homg_point_2d.h.

◆ vgl_homg_point_2d() [6/6]

template<class T>
vgl_homg_point_2d< T >::vgl_homg_point_2d ( vgl_homg_line_2d< T > const &  l1,
vgl_homg_line_2d< T > const &  l2 
)

Construct from 2 lines (intersection).

Member Function Documentation

◆ ideal()

template<class T>
bool vgl_homg_point_2d< T >::ideal ( tol = (T)0) const
inline

Return true iff the point is at infinity (an ideal point).

The method checks whether |w| <= tol * max(|x|,|y|)

Definition at line 99 of file vgl_homg_point_2d.h.

◆ operator!=()

template<class T>
bool vgl_homg_point_2d< T >::operator!= ( vgl_homg_point_2d< T > const &  other) const
inline

Definition at line 82 of file vgl_homg_point_2d.h.

◆ operator==()

template<class T>
bool vgl_homg_point_2d< T >::operator== ( vgl_homg_point_2d< T > const &  p) const
inline

the comparison operator.

Definition at line 76 of file vgl_homg_point_2d.h.

◆ set() [1/2]

template<class T>
void vgl_homg_point_2d< T >::set ( px,
py,
pw = (T)1 
)
inline

Set x,y,w.

Note that it does not make sense to set x, y or w individually.

Definition at line 92 of file vgl_homg_point_2d.h.

◆ set() [2/2]

template<class T>
void vgl_homg_point_2d< T >::set ( T const  p[3])
inline

Definition at line 95 of file vgl_homg_point_2d.h.

◆ w()

template<class T>
T vgl_homg_point_2d< T >::w ( ) const
inline

Definition at line 88 of file vgl_homg_point_2d.h.

◆ x()

template<class T>
T vgl_homg_point_2d< T >::x ( ) const
inline

Definition at line 86 of file vgl_homg_point_2d.h.

◆ y()

template<class T>
T vgl_homg_point_2d< T >::y ( ) const
inline

Definition at line 87 of file vgl_homg_point_2d.h.

Friends And Related Function Documentation

◆ centre() [1/2]

template<class T >
vgl_homg_point_2d< T > centre ( vgl_homg_point_2d< T > const &  p1,
vgl_homg_point_2d< T > const &  p2 
)
related

Return the point at the centre of gravity of two given points.

Identical to midpoint(p1,p2). Invalid when both points are at infinity. If only one point is at infinity, that point is returned.

Definition at line 239 of file vgl_homg_point_2d.h.

◆ centre() [2/2]

template<class T >
vgl_homg_point_2d< T > centre ( std::vector< vgl_homg_point_2d< T > > const &  v)
related

Return the point at the centre of gravity of a set of given points.

There are no rounding errors when T is e.g. int, if all w() are 1.

Definition at line 251 of file vgl_homg_point_2d.h.

◆ collinear()

template<class T >
bool collinear ( vgl_homg_point_2d< T > const &  p1,
vgl_homg_point_2d< T > const &  p2,
vgl_homg_point_2d< T > const &  p3 
)
related

Are three points collinear, i.e., do they lie on a common line?.

Definition at line 198 of file vgl_homg_point_2d.h.

◆ cross_ratio()

template<class T >
double cross_ratio ( vgl_homg_point_2d< T >const &  p1,
vgl_homg_point_2d< T >const &  p2,
vgl_homg_point_2d< T >const &  p3,
vgl_homg_point_2d< T >const &  p4 
)
related

cross ratio of four collinear points.

This number is projectively invariant, and it is the coordinate of p4 in the reference frame where p2 is the origin (coordinate 0), p3 is the unity (coordinate 1) and p1 is the point at infinity. This cross ratio is often denoted as ((p1, p2; p3, p4)) (which also equals ((p3, p4; p1, p2)) or ((p2, p1; p4, p3)) or ((p4, p3; p2, p1)) ) and is calculated as

                      p1 - p3   p2 - p3      (p1-p3)(p2-p4)
                      ------- : --------  =  --------------
                      p1 - p4   p2 - p4      (p1-p4)(p2-p3)

If three of the given points coincide, the cross ratio is not defined.

In this implementation, a least-squares result is calculated when the points are not exactly collinear.

◆ is_ideal()

template<class T >
bool is_ideal ( vgl_homg_point_2d< T > const &  p,
tol = (T)0 
)
related

Return true iff the point is at infinity (an ideal point).

The method checks whether |w| <= tol * max(|x|,|y|)

Definition at line 126 of file vgl_homg_point_2d.h.

◆ operator *()

template<class T >
vgl_homg_point_2d< T > operator * ( vnl_matrix_fixed< T, 3, 3 > const &  m,
vgl_homg_point_2d< T > const &  p 
)
related

Transform a point through a 3x3 projective transformation matrix.

Definition at line 898 of file vgl_homg_operators_2d.hxx.

◆ operator+()

template<class T >
vgl_homg_point_2d< T > operator+ ( vgl_homg_point_2d< T > const &  p,
vgl_vector_2d< T > const &  v 
)
related

Adding a vector to a point gives a new point at the end of that vector.

If the point is at infinity, nothing happens. Note that vector + point is not defined! It's always point + vector.

Definition at line 145 of file vgl_homg_point_2d.h.

◆ operator+=()

template<class T >
vgl_homg_point_2d< T > & operator+= ( vgl_homg_point_2d< T > &  p,
vgl_vector_2d< T > const &  v 
)
related

Adding a vector to a point gives the point at the end of that vector.

If the point is at infinity, nothing happens.

Definition at line 153 of file vgl_homg_point_2d.h.

◆ operator-() [1/2]

template<class T >
vgl_vector_2d< T > operator- ( vgl_homg_point_2d< T > const &  p1,
vgl_homg_point_2d< T > const &  p2 
)
related

The difference of two points is the vector from second to first point.

This function is only valid if the points are not at infinity.

Definition at line 132 of file vgl_homg_point_2d.h.

◆ operator-() [2/2]

template<class T >
vgl_homg_point_2d< T > operator- ( vgl_homg_point_2d< T > const &  p,
vgl_vector_2d< T > const &  v 
)
related

Subtracting a vector from a point is the same as adding the inverse vector.

Definition at line 160 of file vgl_homg_point_2d.h.

◆ operator-=()

template<class T >
vgl_homg_point_2d< T > & operator-= ( vgl_homg_point_2d< T > &  p,
vgl_vector_2d< T > const &  v 
)
related

Subtracting a vector from a point is the same as adding the inverse vector.

Definition at line 167 of file vgl_homg_point_2d.h.

◆ operator<<()

template<class T >
std::ostream & operator<< ( std::ostream &  s,
vgl_homg_point_2d< T > const &  p 
)
related

Write "<vgl_homg_point_2d (x,y,w) >" to stream.

◆ operator>>()

template<class T >
std::istream & operator>> ( std::istream &  s,
vgl_homg_point_2d< T > &  p 
)
related

Read x y w from stream.

◆ ratio()

template<class T >
double ratio ( vgl_homg_point_2d< T > const &  p1,
vgl_homg_point_2d< T > const &  p2,
vgl_homg_point_2d< T > const &  p3 
)
related

Return the relative distance to p1 wrt p1-p2 of p3.

The three points should be collinear and p2 should not equal p1. This is the coordinate of p3 in the affine 1D reference frame (p1,p2). If p3=p1, the ratio is 0; if p1=p3, the ratio is 1. The mid point of p1 and p2 has ratio 0.5. 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.

Definition at line 216 of file vgl_homg_point_2d.h.

◆ vgl_closest_point_origin()

template<class T >
vgl_homg_point_2d< T > vgl_closest_point_origin ( vgl_homg_line_2d< T > const &  l)
related

Return the point on the given line closest to the origin.

◆ vgl_distance()

template<class T >
double vgl_distance ( vgl_homg_point_2d< T >const &  p1,
vgl_homg_point_2d< T >const &  p2 
)
related

return the distance between two points.

Definition at line 122 of file vgl_distance.h.

Member Data Documentation

◆ w_

template<class T>
T vgl_homg_point_2d< T >::w_
private

Definition at line 32 of file vgl_homg_point_2d.h.

◆ x_

template<class T>
T vgl_homg_point_2d< T >::x_
private

Definition at line 30 of file vgl_homg_point_2d.h.

◆ y_

template<class T>
T vgl_homg_point_2d< T >::y_
private

Definition at line 31 of file vgl_homg_point_2d.h.


The documentation for this class was generated from the following files: