⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ray_3.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2000  Utrecht University (The Netherlands),// ETH Zurich (Switzerland), Freie Universitaet Berlin (Germany),// INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg// (Germany), Max-Planck-Institute Saarbruecken (Germany), RISC Linz (Austria),// and Tel-Aviv University (Israel).  All rights reserved.//// This file is part of CGAL (www.cgal.org); you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public License as// published by the Free Software Foundation; version 2.1 of the License.// See the file LICENSE.LGPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.3-branch/Cartesian_kernel/include/CGAL/Cartesian/Ray_3.h $// $Id: Ray_3.h 33071 2006-08-06 16:37:35Z spion $// //// Author(s)     : Andreas Fabri#ifndef CGAL_CARTESIAN_RAY_3_H#define CGAL_CARTESIAN_RAY_3_H#include <CGAL/Twotuple.h>#include <CGAL/Handle_for.h>CGAL_BEGIN_NAMESPACEtemplate < class R_ >class RayC3{  typedef typename R_::FT                   FT;  typedef typename R_::Point_3              Point_3;  typedef typename R_::Direction_3          Direction_3;  typedef typename R_::Vector_3             Vector_3;  typedef typename R_::Line_3               Line_3;  typedef typename R_::Ray_3                Ray_3;  typedef Twotuple<Point_3>                        Rep;  typedef typename R_::template Handle<Rep>::type  Base;  Base base;public:  typedef R_                                     R;  RayC3() {}  RayC3(const Point_3 &sp, const Point_3 &secondp)    : base(sp, secondp) {}  RayC3(const Point_3 &sp, const Vector_3 &v)    : base(sp, sp + v) {}  RayC3(const Point_3 &sp, const Direction_3 &d)    : base(sp, sp + d.to_vector()) {}  RayC3(const Point_3 &sp, const Line_3 &l)    : base(sp, sp + l.to_vector()) {}  bool        operator==(const RayC3 &r) const;  bool        operator!=(const RayC3 &r) const;  const Point_3 &   source() const  {      return get(base).e0;  }  const Point_3 &   second_point() const  {      return get(base).e1;  }  Point_3     point(int i) const;  Direction_3 direction() const;  Vector_3    to_vector() const;  Line_3      supporting_line() const;  Ray_3       opposite() const;  bool        is_degenerate() const;  bool        has_on(const Point_3 &p) const;  bool        collinear_has_on(const Point_3 &p) const;};template < class R >inlineboolRayC3<R>::operator==(const RayC3<R> &r) const{    if (CGAL::identical(base, r.base))	return true;    return source() == r.source() && direction() == r.direction();}template < class R >inlineboolRayC3<R>::operator!=(const RayC3<R> &r) const{  return !(*this == r);}template < class R >CGAL_KERNEL_INLINEtypename RayC3<R>::Point_3RayC3<R>::point(int i) const{  CGAL_kernel_precondition( i >= 0 );  if (i == 0) return source();  if (i == 1) return second_point();  return source() + FT(i) * (second_point() - source());}template < class R >inlinetypename RayC3<R>::Vector_3RayC3<R>::to_vector() const{  return second_point() - source();}template < class R >inlinetypename RayC3<R>::Direction_3RayC3<R>::direction() const{  return Direction_3( second_point() - source() );}template < class R >inlinetypename RayC3<R>::Line_3RayC3<R>::supporting_line() const{  return Line_3(*this);}template < class R >inlinetypename RayC3<R>::Ray_3RayC3<R>::opposite() const{  return RayC3<R>( source(), - direction() );}template < class R >boolRayC3<R>::has_on(const typename RayC3<R>::Point_3 &p) const{  return (p == source()) ||         ( collinear(source(), p, second_point())           && ( Direction_3(p - source()) == direction() ));}template < class R >inlineboolRayC3<R>::is_degenerate() const{  return source() == second_point();}template < class R >inlineboolRayC3<R>::collinear_has_on(const typename RayC3<R>::Point_3 &p) const{  CGAL_kernel_exactness_precondition( collinear(source(), p, second_point()) );  Comparison_result cx = compare_x(source(), second_point());  if (cx != EQUAL)    return cx != compare_x(p, source());  Comparison_result cy = compare_y(source(), second_point());  if (cy != EQUAL)    return cy != compare_y(p, source());  Comparison_result cz = compare_z(source(), second_point());  if (cz != EQUAL)    return cz != compare_z(p, source());  return true; // p == source()}CGAL_END_NAMESPACE#endif // CGAL_CARTESIAN_RAY_3_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -