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

📄 fig_stream_conic_arc_2.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2006 Tel-Aviv University (Israel).// All rights reserved.//// This file is part of CGAL (www.cgal.org); you may redistribute it under// the terms of the Q Public License version 1.0.// See the file LICENSE.QPL 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/Arrangement_2/include/CGAL/IO/Fig_stream_Conic_arc_2.h $// $Id: Fig_stream_Conic_arc_2.h 36312 2007-02-15 16:08:11Z efif $// // Author(s)     : Ron Wein           <wein@post.tau.ac.il>#ifndef CGAL_FIG_STREAM_CONIC_ARC_2_H#define CGAL_FIG_STREAM_CONIC_ARC_2_H#include <CGAL/IO/Fig_stream.h>#include <list>/*! * Write an x-monotone conic arc to a FIG stream. */template <class Conic_traits>static void _write_x_monotone_conic_arc    (CGAL::Fig_stream<typename Conic_traits::Alg_kernel>& fs,    const typename Conic_traits::X_monotone_curve_2&     cv){  typedef typename Conic_traits::Alg_kernel  Alg_kernel;  typedef typename Conic_traits::Algebraic   Algebraic;  typedef typename Conic_traits::Point_2     Alg_point_2;  typedef typename Alg_kernel::Segment_2     Alg_segment_2;    if (cv.orientation() == CGAL::COLLINEAR)  {    // In case of a linear segment:    Alg_segment_2   seg = Alg_segment_2 (cv.source(), cv.target());    fs << seg;  }   else if (CGAL::compare (cv.r(), cv.s()) == CGAL::EQUAL &&	   CGAL::sign (cv.t()) == CGAL::ZERO)  {    // In case of a circular arc:    Algebraic    x_mid = (cv.source().x() + cv.target().x()) / 2;    Alg_point_2  q = Alg_point_2(x_mid, 0);    Alg_point_2  p = cv.get_point_at_x (q);    fs.write_circular_arc (cv.source(), p, cv.target());  }  else  {    // Represent the arc as a spline with 5 control points.    Algebraic   x;    Alg_point_2 q;    Alg_point_2 cps[5];    int         i;    cps[0] = cv.source();    for (i = 1; i <= 3; i++)    {      x = (cv.source().x()*(4 - i) + cv.target().x()*i) / 4;            q = Alg_point_2(x, 0);      cps[i] = cv.get_point_at_x (q);          }    cps[4] = cv.target();    fs.write_spline (cps + 0, cps + 5, 1.0);  }  return;}/*! * Write a conic arc to a FIG stream. */template <class Conic_traits>void write_conic_arc   (CGAL::Fig_stream<typename Conic_traits::Alg_kernel>& fs,    const typename Conic_traits::Curve_2&                cv){  typedef typename Conic_traits::X_monotone_curve_2   Conic_arc_2;  // Subdivide the arc into x-monotone sub-arcs.  Conic_traits           traits;  std::list<Conic_arc_2> xcvs;  traits.make_x_monotone_2_object() (cv,				     std::back_inserter(xcvs));  // Write the x-monotone sub-arcs.  typename std::list<Conic_arc_2>::iterator xit;      for (xit = xcvs.begin(); xit != xcvs.end(); ++xit)    _write_x_monotone_conic_arc<Conic_traits> (fs, *xit);  return;}#endif

⌨️ 快捷键说明

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