\( \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.8 - 2D and 3D Linear Geometry Kernel

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
List of all members
CGAL::Line_2< Kernel > Class Template Reference
2D Kernel Objects

`#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< Kernel > | point (int i) const
| returns an arbitrary point on `l`. More...
Point_2< Kernel > | projection (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< Kernel > | to_vector () const
| returns a vector having the direction of `l`.
Direction_2< Kernel > | direction () const
| returns the direction of `l`.
Line_2< Kernel > | opposite () const
| returns the line with opposite direction.
Line_2< Kernel > | perpendicular (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< Kernel > | transform (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.