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

point in projective 2D space More...

#include <vgl/vgl_vector_2d.h>
#include <vgl/vgl_point_2d.h>
#include <vgl/vgl_fwd.h>
#include <vcl_iosfwd.h>
#include <vcl_cassert.h>

Go to the source code of this file.

Classes

class  vgl_homg_point_2d< T >
 Represents a homogeneous 2D point. More...

Defines

#define vgl_Abs(x)   (x<0?-x:x)
#define VGL_HOMG_POINT_2D_INSTANTIATE(T)   extern "please include vgl/vgl_homg_point_2d.txx first"

Functions

template<class T >
vcl_ostream & operator<< (vcl_ostream &s, vgl_homg_point_2d< T > const &p)
 Write "<vgl_homg_point_2d (x,y,w) >" to stream.
template<class T >
vcl_istream & operator>> (vcl_istream &s, vgl_homg_point_2d< T > &p)
 Read x y w from stream.
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).
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.
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.
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.
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.
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.
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.
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?.
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.
template<class T >
vgl_homg_point_2d< T > midpoint (vgl_homg_point_2d< T > const &p1, vgl_homg_point_2d< T > const &p2, T f=(T) 0.5)
 Return the point at a given ratio wrt two other points.
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.
template<class T >
vgl_homg_point_2d< T > centre (vcl_vector< vgl_homg_point_2d< T > > const &v)
 Return the point at the centre of gravity of a set of given points.

Detailed Description

point in projective 2D space

Author:
Don HAMILTON, Peter TU
    Modifications
     Peter Vanroose -  4 July 2001 - Added geometric interface like vgl_point_2d
     Peter Vanroose -  1 July 2001 - Renamed data to x_ y_ w_, inlined constructors
     Peter Vanroose - 27 June 2001 - Added operator==
   

Definition in file vgl_homg_point_2d.h.


Define Documentation

#define vgl_Abs (   x)    (x<0?-x:x)
#define VGL_HOMG_POINT_2D_INSTANTIATE (   T)    extern "please include vgl/vgl_homg_point_2d.txx first"

Definition at line 260 of file vgl_homg_point_2d.h.


Function Documentation

template<class T >
vgl_homg_point_2d< T > centre ( vgl_homg_point_2d< T > const &  p1,
vgl_homg_point_2d< T > const &  p2 
) [inline]

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.

template<class T >
vgl_homg_point_2d< T > centre ( vcl_vector< vgl_homg_point_2d< T > > const &  v) [inline]

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.

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 
) [inline]

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

Definition at line 198 of file vgl_homg_point_2d.h.

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.

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.

Definition at line 20 of file vgl_homg_point_2d.txx.

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

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.

template<class T >
vgl_homg_point_2d<T> midpoint ( vgl_homg_point_2d< T > const &  p1,
vgl_homg_point_2d< T > const &  p2,
f = (T)0.5 
) [inline]

Return the point at a given ratio wrt two other points.

By default, the mid point (ratio=0.5) is returned. Note that the third argument is T, not double, so the midpoint of e.g. two vgl_homg_point_2d<int> is not a valid concept. But the reflection point of p2 wrt p1 is: in that case f=-1.

Definition at line 227 of file vgl_homg_point_2d.h.

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

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.

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

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.

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

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.

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

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.

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

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.

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

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

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

Read x y w from stream.

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 
) [inline]

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.