\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)
CGAL 4.5 - 2D and 3D Linear Geometry Kernel
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
CGAL::Line_2< Kernel > Class Template Reference

#include <CGAL/Line_2.h>

Definition

An object l of the data type Line_2 is a directed straight line in the two-dimensional Euclidean plane \( \E^2\).

It is defined by the set of points with Cartesian coordinates \( (x,y)\) that satisfy the equation

\[ l:\; a\, x +b\, y +c = 0. \]

The line splits \( \E^2\) in a positive and a negative side. A point p with Cartesian coordinates \( (px, py)\) is on the positive side of l, iff \( a\, px + b\, py +c > 0\), it is on the negative side of l, iff \( a\, px + b\, py +c < 0\). The positive side is to the left of l.

Example

Let us first define two Cartesian two-dimensional points in the Euclidean plane \( \E^2\). Their dimension and the fact that they are Cartesian is expressed by the suffix _2 and the representation type Cartesian.

Point_2< Cartesian<double> > p(1.0,1.0), q(4.0,7.0);

To define a line l we write:

Line_2< Cartesian<double> > l(p,q);
See Also
Kernel::Line_2

Creation

 Line_2 (const Kernel::RT &a, const Kernel::RT &b, const Kernel::RT &c)
 introduces a line l with the line equation in Cartesian coordinates \( ax +by +c = 0\).
 
 Line_2 (const Point_2< Kernel > &p, const Point_2< Kernel > &q)
 introduces a line l passing through the points p and q. More...
 
 Line_2 (const Point_2< Kernel > &p, const Direction_2< Kernel > &d)
 introduces a line l passing through point p with direction d.
 
 Line_2 (const Point_2< Kernel > &p, const Vector_2< Kernel > &v)
 introduces a line l passing through point p and oriented by v.
 
 Line_2 (const Segment_2< Kernel > &s)
 introduces a line l supporting the segment s, oriented from source to target.
 
 Line_2 (const Ray_2< Kernel > &r)
 introduces a line l supporting the ray r, with same orientation.
 

Operations

bool operator== (const Line_2< Kernel > &h) const
 Test for equality: two lines are equal, iff they have a non empty intersection and the same direction.
 
bool operator!= (const Line_2< Kernel > &h) const
 Test for inequality.
 
Kernel::RT a () const
 returns the first coefficient of l.
 
Kernel::RT b () const
 returns the second coefficient of l.
 
Kernel::RT c () const
 returns the third coefficient of l.
 
Point_2< Kernelpoint (int i) const
 returns an arbitrary point on l. More...
 
Point_2< Kernelprojection (const Point_2< Kernel > &p) const
 returns the orthogonal projection of p onto l.
 
Kernel::FT x_at_y (const Kernel::FT &y) const
 returns the \( x\)-coordinate of the point at l with given \( y\)-coordinate. More...
 
Kernel::FT y_at_x (const Kernel::FT &x) const
 returns the \( y\)-coordinate of the point at l with given \( x\)-coordinate. More...
 

Predicates

bool is_degenerate () const
 line l is degenerate, if the coefficients a and b of the line equation are zero.
 
bool is_horizontal () const
 
bool is_vertical () const
 
Oriented_side oriented_side (const Point_2< Kernel > &p) const
 returns ON_ORIENTED_BOUNDARY, ON_NEGATIVE_SIDE, or the constant ON_POSITIVE_SIDE, depending on the position of p relative to the oriented line l.
 

Convenience Boolean Functions

bool has_on (const Point_2< Kernel > &p) const
 
bool has_on_positive_side (const Point_2< Kernel > &p) const
 
bool has_on_negative_side (const Point_2< Kernel > &p) const
 

Miscellaneous

Vector_2< Kernelto_vector () const
 returns a vector having the direction of l.
 
Direction_2< Kerneldirection () const
 returns the direction of l.
 
Line_2< Kernelopposite () const
 returns the line with opposite direction.
 
Line_2< Kernelperpendicular (const Point_2< Kernel > &p) const
 returns the line perpendicular to l and passing through p, where the direction is the direction of l rotated counterclockwise by 90 degrees.
 
Line_2< Kerneltransform (const Aff_transformation_2< Kernel > &t) const
 returns the line obtained by applying t on a point on l and the direction of l.
 

Constructor & Destructor Documentation

template<typename Kernel >
CGAL::Line_2< Kernel >::Line_2 ( const Point_2< Kernel > &  p,
const Point_2< Kernel > &  q 
)

introduces a line l passing through the points p and q.

Line l is directed from p to q.

Member Function Documentation

template<typename Kernel >
Point_2<Kernel> CGAL::Line_2< Kernel >::point ( int  i) const

returns an arbitrary point on l.

It holds point(i) == point(j), iff i==j. Furthermore, l is directed from point(i) to point(j), for all i \( <\) j.

template<typename Kernel >
Kernel::FT CGAL::Line_2< Kernel >::x_at_y ( const Kernel::FT y) const

returns the \( x\)-coordinate of the point at l with given \( y\)-coordinate.

Precondition
l is not horizontal.
template<typename Kernel >
Kernel::FT CGAL::Line_2< Kernel >::y_at_x ( const Kernel::FT x) const

returns the \( y\)-coordinate of the point at l with given \( x\)-coordinate.

Precondition
l is not vertical.