Path: blob/devel/ElmerGUI/netgen/libsrc/geom2d/spline2d.hpp
3206 views
1234das File sollte nicht mehr verwendet werden ---> spline.hpp56789101112#ifndef FILE_SPLINE2D13#define FILE_SPLINE2D1415/**************************************************************************/16/* File: spline2d.hh */17/* Author: Joachim Schoeberl */18/* Date: 24. Jul. 96 */19/**************************************************************************/202122/*23Spline curves for 2D mesh generation24*/2526#include "spline.hpp"272829//#define OLDSPLINEVERSION30#ifdef OLDSPLINEVERSION3132/// Geometry point33class GeomPoint2d : public Point<2>34{35public:36/// refinement to point37double refatpoint;38bool hpref;3940GeomPoint2d ()41{ ; }4243///44GeomPoint2d (double ax, double ay, double aref = 1)45: Point<2> (ax, ay), refatpoint(aref) { ; }46};47484950/// base class for 2d - segment51class SplineSegment52{53public:54/// left domain55int leftdom;56/// right domain57int rightdom;58/// refinement at line59double reffak;60/// boundary condition number61int bc;62/// copy spline mesh from other spline (-1.. do not copy)63int copyfrom;64/// perfrom anisotropic refinement (hp-refinement) to edge65bool hpref_left;66bool hpref_right;67/// calculates length of curve68virtual double Length () const;69/// returns point at curve, 0 <= t <= 170virtual Point<2> GetPoint (double t) const = 0;71/// partitionizes curve72void Partition (double h, double elto0,73Mesh & mesh, Point3dTree & searchtree, int segnr) const;74/// returns initial point on curve75virtual const GeomPoint2d & StartPI () const = 0;76/// returns terminal point on curve77virtual const GeomPoint2d & EndPI () const = 0;78/** writes curve description for fepp:79for implicitly given quadratic curves, the 6 coefficients of80the polynomial81$$ a x^2 + b y^2 + c x y + d x + e y + f = 0 $$82are written to ost */83void PrintCoeff (ostream & ost) const;8485virtual void GetCoeff (Vector & coeffs) const = 0;8687virtual void GetPoints (int n, ARRAY<Point<2> > & points);8889/** calculates lineintersections:90for lines $$ a x + b y + c = 0 $$ the interecting points are calculated91and stored in points */92virtual void LineIntersections (const double a, const double b, const double c,93ARRAY < Point<2> > & points, const double eps) const94{points.SetSize(0);}9596virtual double MaxCurvature(void) const = 0;9798virtual string GetType(void) const {return "splinebase";}99};100101102/// Straight line form p1 to p2103class LineSegment : public SplineSegment104{105///106const GeomPoint2d &p1, &p2;107public:108///109LineSegment (const GeomPoint2d & ap1, const GeomPoint2d & ap2);110///111virtual double Length () const;112///113virtual Point<2> GetPoint (double t) const;114///115virtual const GeomPoint2d & StartPI () const { return p1; };116///117virtual const GeomPoint2d & EndPI () const { return p2; }118///119//virtual void PrintCoeff (ostream & ost) const;120virtual void GetCoeff (Vector & coeffs) const;121122virtual string GetType(void) const {return "line";}123124virtual void LineIntersections (const double a, const double b, const double c,125ARRAY < Point<2> > & points, const double eps) const;126127virtual double MaxCurvature(void) const {return 0;}128};129130131/// curve given by a rational, quadratic spline (including ellipses)132class SplineSegment3 : public SplineSegment133{134///135const GeomPoint2d &p1, &p2, &p3;136public:137///138SplineSegment3 (const GeomPoint2d & ap1,139const GeomPoint2d & ap2,140const GeomPoint2d & ap3);141///142virtual Point<2> GetPoint (double t) const;143///144virtual const GeomPoint2d & StartPI () const { return p1; };145///146virtual const GeomPoint2d & EndPI () const { return p3; }147///148//virtual void PrintCoeff (ostream & ost) const;149virtual void GetCoeff (Vector & coeffs) const;150151virtual string GetType(void) const {return "spline3";}152153const GeomPoint2d & TangentPoint (void) const { return p2; }154155virtual void LineIntersections (const double a, const double b, const double c,156ARRAY < Point<2> > & points, const double eps) const;157158virtual double MaxCurvature(void) const;159};160161162// Gundolf Haase 8/26/97163/// A circle164class CircleSegment : public SplineSegment165{166///167private:168const GeomPoint2d &p1, &p2, &p3;169Point<2> pm;170double radius, w1,w3;171public:172///173CircleSegment (const GeomPoint2d & ap1,174const GeomPoint2d & ap2,175const GeomPoint2d & ap3);176///177virtual Point<2> GetPoint (double t) const;178///179virtual const GeomPoint2d & StartPI () const { return p1; }180///181virtual const GeomPoint2d & EndPI () const { return p3; }182///183//virtual void PrintCoeff (ostream & ost) const;184virtual void GetCoeff (Vector & coeffs) const;185///186double Radius() const { return radius; }187///188double StartAngle() const { return w1; }189///190double EndAngle() const { return w3; }191///192const Point<2> & MidPoint(void) const {return pm; }193194virtual string GetType(void) const {return "circle";}195196virtual void LineIntersections (const double a, const double b, const double c,197ARRAY < Point<2> > & points, const double eps) const;198199virtual double MaxCurvature(void) const {return 1./radius;}200};201202203204205206207///208class DiscretePointsSegment : public SplineSegment209{210ARRAY<Point<2> > pts;211GeomPoint2d p1, p2;212public:213///214DiscretePointsSegment (const ARRAY<Point<2> > & apts);215///216virtual ~DiscretePointsSegment ();217///218virtual Point<2> GetPoint (double t) const;219///220virtual const GeomPoint2d & StartPI () const { return p1; };221///222virtual const GeomPoint2d & EndPI () const { return p2; }223///224//virtual void PrintCoeff (ostream & /* ost */) const { ; }225virtual void GetCoeff (Vector & coeffs) const {;}226227virtual double MaxCurvature(void) const {return 1;}228};229230231#endif232233#endif234235236