// Copyright (c) 1997-2000 // Utrecht University (The Netherlands), // ETH Zurich (Switzerland), // INRIA Sophia-Antipolis (France), // Max-Planck-Institute Saarbruecken (Germany), // and Tel-Aviv University (Israel). All rights reserved. // // This file is part of CGAL (www.cgal.org) // // $URL: https://github.com/CGAL/cgal/blob/v5.1/Kernel_d/include/CGAL/Kernel_d/Pair_d.h $ // $Id: Pair_d.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial // // // Author(s) : Michael Seel #ifndef CGAL_PAIR_D_H #define CGAL_PAIR_D_H #include #include namespace CGAL { template class Segment_d; template class Ray_d; template class Line_d; template class Pair_d { typedef Pair_d Self; typedef typename R::Point_d Point_d; typedef typename R::Vector_d Vector_d; typedef typename R::Direction_d Direction_d; Point_d _p[2]; friend class Line_d; friend class Ray_d; friend class Segment_d; /* Any line object in $d$ - space is defined by two points |_p1| and |_p2| respectively. There exists an orientation from _p1 to _p2. */ public: Pair_d(int d = 0) { _p[0]=_p[1]=Point_d(d); } Pair_d(const Point_d& p, const Point_d& q) { CGAL_assertion_msg((p.dimension() == q.dimension()), "Pair_d::constructor: source and target must have the same dimension."); _p[0]=p; _p[1]=q; } bool is_degenerate() const { return (_p[0] == _p[1]); } Vector_d vector() const { return (_p[1] - _p[0]); } Direction_d direction() const { return vector().direction(); } void read(std::istream& is) { switch( get_mode(is) ) { case CGAL::IO::ASCII : is >> _p[0] >> _p[1]; break; case CGAL::IO::BINARY : CGAL::read(is, _p[0]); CGAL::read(is, _p[1]); break; default: CGAL_error_msg("\nStream must be in ascii or binary mode\n"); } } void print(std::ostream& os, const char* _name) const { switch( get_mode(os) ) { case CGAL::IO::ASCII : os << _p[0] << " " << _p[1]; break; case CGAL::IO::BINARY : CGAL::write(os, _p[0]); CGAL::write(os, _p[1]); break; default : os << _name << "(" << _p[0] << ", " << _p[1] << ")"; break; } } }; // Pair_d } //namespace CGAL #endif //CGAL_PAIR_D_H