 
 
 
 
 
 
 
 
 
 
Definition
An instance l of the data type 
rat line is a directed straight line
in the two-dimensional plane.
line is a directed straight line
in the two-dimensional plane. 
#include < LEDA/geo/rat_line.h >
Types
| rat_line::coord_type | the coordinate type (rational). | 
| rat_line::point_type | the point type (rat_point). | 
| rat_line::float_type | the corresponding floatin-point type (line). | 
Creation
| rat_line | l(const rat_point& p, const rat_point& q) | |
| introduces a variable l of type rat_line. l is initialized to the 
line passing through points p and q directed form p to q. Precondition p  q. | ||
| rat_line | l(const rat_segment& s) | introduces a variable l of type rat_line. l is initialized to the 
line supporting segment s. Precondition s is nontrivial. | 
| rat_line | l(const rat_point& p, const rat_vector& v) | |
| introduces a variable l of type rat_line. l is initialized to the 
line passing through points p and p + v. Precondition v is a nonzero vector. | ||
| rat_line | l(const rat_ray& r) | introduces a variable l of type rat_line. l is initialized to the line supporting ray r. | 
| rat_line | l | introduces a variable l of type rat_line. | 
| rat_line | l(const line& l1, int prec = rat_point::default_precision) | |
| introduces a variable l of type rat_line. l is initialized to the line obtained by approximating the two defining points of l1. | ||
Operations
| line | l.to_float() | returns a floating point approximation of l. | 
| void | l.normalize() | simplifies the homogenous representation by calling point1().normalize() and point2().normlize(). | 
| rat_point | l.point1() | returns a point on l. | 
| rat_point | l.point2() | returns a second point on l. | 
| rat_segment | l.seg() | returns a segment on l. | 
| bool | l.is_vertical() | decides whether l is vertical. | 
| bool | l.is_horizontal() | decides whether l is horizontal. | 
| rational | l.slope() | returns the slope of s. Precondition l is not vertical. | 
| rational | l.x_proj(rational y) | returns p.xcoord(), where 
p  line(l) with 
            p.ycoord() = y. Precondition l is not horizontal. | 
| rational | l.y_proj(rational x) | returns p.ycoord(), where 
p  line(l) with 
            p.xcoord() = x. Precondition l is not vertical. | 
| rational | l.y_abs() | returns the y-abscissa of line(l ), i.e., l.y_proj(0). Precondition l is not vertical. | 
| bool | l.intersection(const rat_line& g, rat_point& inter) | |
| returns true if l and g intersect. In case of intersection a common point is returned in inter. | ||
| bool | l.intersection(const rat_segment& s, rat_point& inter) | |
| returns true if l and s intersect. In case of intersection a common point is returned in inter. | ||
| bool | l.intersection(const rat_segment& s) | |
| returns true, if l and s intersect, false otherwise. | ||
| rat_line | l.translate(const rational& dx, const rational& dy) | |
| returns l translated by vector (dx, dy). | ||
| rat_line | l.translate(integer dx, integer dy, integer dw) | |
| returns l translated by vector (dx/dw, dy/dw). | ||
| rat_line | l.translate(const rat_vector& v) | |
| returns l translated by vector v. Precondition v.dim() = 2. | ||
| rat_line | l + const rat_vector& v | returns l translated by vector v. | 
| rat_line | l - const rat_vector& v | returns l translated by vector - v. | 
| rat_line | l.rotate90(const rat_point& q, int i=1) | |
| returns l rotated about q by an angle of i x 90 degrees. If i > 0 the rotation is counter-clockwise otherwise it is clockwise. | ||
| rat_line | l.reflect(const rat_point& p, const rat_point& q) | |
| returns l reflected across the straight line passing through p and q. | ||
| rat_line | l.reflect(const rat_point& p) | |
| returns l reflected across point p. | ||
| rat_line | l.reverse() | returns l reversed. | 
| rational | l.sqr_dist(const rat_point& q) | |
| returns the square of the distance between l and q. | ||
| rat_segment | l.perpendicular(const rat_point& p) | |
| returns the segment perpendicular to l with source p and target on l. | ||
| rat_point | l.dual() | returns the point dual to l. Precondition l is not vertical. | 
| int | l.orientation(const rat_point& p) | |
| computes orientation(a, b, p), where a  b
and a and b appear in this order on line l. | ||
| int | l.side_of(const rat_point& p) | |
| computes orientation(a, b, p), where a  b
and a and b appear in this order on line l. | ||
| bool | l.contains(const rat_point& p) | |
| returns true if p lies on l. | ||
| bool | l.clip(rat_point p, rat_point q, rat_segment& s) | |
| clips l at the rectangle R defined by p and q. Returns true if the intersection of R and l is non-empty and returns false otherwise. If the intersection is non-empty the intersection is assigned to s; It is guaranteed that the source node of s is no larger than its target node. | ||
| bool | l == const rat_line& g | returns true if the l and g are equal as oriented lines. | 
| bool | equal_as_sets(const rat_line& l, const rat_line& g) | |
| returns true if the l and g are equal as unoriented lines. | ||
Non-Member Functions
| int | orientation(const rat_line& l, const rat_point& p) | |
| computes orientation(a, b, p), where a  b
               and a and b appear in this order on line l. | ||
| int | cmp_slopes(const rat_line& l1, const rat_line& l2) | |
| returns compare(slope(l1), slope(l2)). | ||
| rat_line | p_bisector(const rat_point& p, const rat_point& q) | |
| returns the perpendicular bisector of p and q. The bisector has p on its left. Precondition p  q. | ||
 
 
 
 
 
 
 
 
