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

📄 segment3d.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
/***************************************************************** * File: segment3d.h * Synopsis: *      Basic 3-dimensional geometry * Author: Shubin Zhao (shubinz@cs.nyu.edu), 2001. * ***************************************************************** * CORE Library Version 1.4 (July 2001) *       Chee Yap <yap@cs.nyu.edu> *       Chen Li <chenli@cs.nyu.edu> *       Zilin Du <zilin@cs.nyu.edu> * * Copyright (c) 1995, 1996, 1998, 1999, 2000, 2001 Exact Computation Project * * WWW URL: http://cs.nyu.edu/exact/ * Email: exact@cs.nyu.edu * * $Id: segment3d.h 37060 2007-03-13 18:10:39Z reichel $ *****************************************************************/#ifndef _SEGMENT3D_H_#define _SEGMENT3D_H_#include <CGAL/CORE/geom3d/point3d.h>#include <CGAL/CORE/geom3d/line3d.h>/************************************************************ *  Class Segment3d: * *  An instance s of Segment3d is a finite or infinite line segment *  in the three dimensional plane, defined by a start point *  s.startPt() and a stop point s.stopPt().  It can be regarded *  as an open or a closed segment (default: open), and directed *  or not (default: directed). * *  We do not necessarily assume that startPt() != stopPt(). ************************************************************/#define S_TYPE_FINITE 0#define S_TYPE_RAY    1#define S_TYPE_LINE   2class Plane3d;class Segment3d : public GeomObj{private:  Point3d p0;  Point3d p1;  bool directed;     // segments can be directed or not (default is directed)  bool open;        // segments can be open or closed (default is open)  //int finite;     // 0=finite, 1=ray, 2=line (default is 0)public:  /************************************************************   *   constructors   ************************************************************/  Segment3d(const Segment3d &s);  Segment3d(const Point3d &p, const Point3d &q);  	//finite segment with endpoints p and q  Segment3d(const Point3d & p, const Vector & v);	//ray segment  Segment3d();  	//trivial segment from (0,0) to (0,0)   virtual ~Segment3d() {}  /*************************************************************   *   member functions   *************************************************************/    virtual int dim() const { return 1; }  Point3d startPt() const { return p0; }    Point3d stopPt()  const { return p1; }  Vector direction() const { return p1 - p0; }  void reverse();  //  reverses the direction of the segment  void setDirected( bool beDirected ) { directed = beDirected; }  void setOpen(  bool beOpen ) { open = beOpen; }    void setStartPt( Point3d& p ) { p0 = p; }  void setStopPt ( Point3d& p ) { p1 = p; }  double length() const { return p0.distance(p1); }    //length of segment      Line3d toLine() const { return Line3d(p0,p1); }   double distance( const Point3d& p ) const;  // returns the Euclidean distance between this segment and point q  Point3d nearPt( const Point3d& q ) const;   // returns the point on segment closest to q;  /*************************************************************   *   predicates   *************************************************************/  bool isDirected() const { return directed; }  bool isOpen() const {return open; }  bool isTrivial() const {return p0 == p1; }    bool isCollinear( const Point3d& p ) const {return toLine().contains(p); }  bool contains( const Segment3d& s ) const { return contains(s.startPt()) && contains(s.stopPt()); }  bool isCoincident( const Segment3d& s) const;    bool isCoplanar( const Line3d& s) const;  bool isCoplanar( const Segment3d& s) const;    bool contains( const Point3d& p ) const;    bool operator==( const Segment3d& s ) { return isCoincident( s ); }  bool operator!=( const Segment3d& s ) { return !operator==(s); }  /*************************************************************   *   intersection   *************************************************************/  int intersects( const Line3d& l ) const;  //decides whether *this and t intersect in one point  // return dim of intersetion    int intersects( const Segment3d& s ) const;  //decides whether *this and t intersect in one point  // return dim of intersetion  GeomObj* intersection( const Line3d& l ) const;  // return intersection point if this segment and l intersect at a single point  // the intersection point is returned     GeomObj* intersection( const Segment3d& s ) const;  // return intersection point if this segment and s intersect at a single point  // the intersection point is returned    Plane3d bisect_plane() const;   // return bisector plane     /*************************************************************   *   I/O   *************************************************************/  friend std::istream& operator>>(std::istream& in, Segment3d& l);  friend std::ostream& operator<<(std::ostream& out, const Segment3d& l);}; //class Segment3d#endif

⌨️ 快捷键说明

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