\begin{ccRefClass} {Ray_3} \ccDefinition An object \ccStyle{r} of the data type \ccRefName\ is a directed straight ray in the three-dimensional Euclidean space $\E^3$. It starts in a point called the {\em source} of \ccStyle{r} and it goes to infinity. \ccCreation \ccCreationVariable{r} \ccHidden \ccConstructor{Ray_3();} {introduces an uninitialized variable \ccVar.} \ccHidden \ccConstructor{Ray_3(const Ray_3 &s);} {copy constructor.} \ccConstructor{Ray_3(const Point_3 &p, const Point_3 &q);} {introduces a ray \ccVar\ with source $p$ and passing through point $q$.} \ccConstructor{Ray_3(const Point_3 &p, const Direction_3 &d)} {introduces a ray \ccVar\ with source $p$ and with direction $d$.} \ccConstructor{Ray_3(const Point_3 &p, const Vector_3 &v)} {introduces a ray \ccVar\ with source $p$ and with a direction given by $v$.} \ccConstructor{Ray_3(const Point_3 &p, const Line_3 &l)} {introduces a ray \ccVar\ starting at source $p$ with the same direction as $l$.} \ccOperations \ccHidden \ccMethod{Ray_3 &operator=(const Ray_3 &s);} {Assignment.} \ccMethod{bool operator==(const Ray_3 &h) const;} {Test for equality: two rays are equal, iff they have the same source and the same direction.} \ccMethod{bool operator!=(const Ray_3 &h) const;} {Test for inequality.} \ccMethod{Point_3 source() const;} {returns the source of \ccVar} \ccMethod{Point_3 point(int i) const;} {returns a point on \ccVar. \ccStyle{point(0)} is the source. \ccStyle{point(i)}, with $i>0$, is different from the source. \ccPrecond $i \geq 0$.} \ccMethod{Direction_3 direction() const;} {returns the direction of \ccVar.} \ccMethod{Vector_3 to_vector() const;} {returns a vector giving the direction of \ccVar.} \ccMethod{Line_3 supporting_line() const;} {returns the line supporting \ccVar\ which has the same direction.} \ccMethod{Ray_3 opposite() const;} {returns the ray with the same source and the opposite direction.} \ccMethod{bool is_degenerate() const;} {ray \ccVar\ is degenerate, if the source and the second defining point fall together (that is if the direction is degenerate).} \ccMethod{bool has_on(const Point_3 &p) const;} {A point is on \ccVar, iff it is equal to the source of \ccVar, or if it is in the interior of \ccVar.} % % \ccMethod{bool collinear_has_on(const Point_3 &p) const;} % {checks if point $p$ is on ray \ccVar. This function is faster % than function \ccStyle{has_on()}. % \ccPrecond{$p$ is collinear to \ccVar.}} % \ccMethod{Ray_3 transform(const Aff_transformation_3 &t) const;} {returns the ray obtained by applying $t$ on the source and on the direction of \ccVar.} \ccSeeAlso \ccRefConceptPage{Kernel::Ray_3} \end{ccRefClass}