![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2012 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00009 00010 #pragma once 00011 00012 #include <vrvUtil/vrvUtil.h> 00013 00014 #include <matrix/vlVector.h> 00015 #include <vector> 00016 00017 class DtReferenceEllipsoid; 00018 00019 namespace makVrv 00020 { 00021 00029 class DT_DLL_VRVUTIL DtGreatCircleCurveGenerator 00030 { 00031 public: 00035 typedef std::vector<DtVector> GreatCircleCurve; 00036 00039 DtGreatCircleCurveGenerator( const DtVector& startGeod ); 00040 00042 DtGreatCircleCurveGenerator( const DtGreatCircleCurveGenerator& orig ); 00043 00045 DtGreatCircleCurveGenerator& operator=(const DtGreatCircleCurveGenerator&); 00046 00048 virtual ~DtGreatCircleCurveGenerator(); 00049 00052 virtual void setRadius( double radius ); 00053 00055 virtual double radius() const; 00056 00058 virtual const GreatCircleCurve& generateCurve( const DtVector& endGeod, 00059 double heightScale=0., int maxSegments=500., 00060 double preferredSegmentSize=1000. ); 00061 00063 virtual const GreatCircleCurve& curve() const; 00064 00067 virtual double arcLengthTo( const DtVector& endGeod ) const; 00068 00070 virtual double initialBearingTo( const DtVector& endGeod ) const; 00071 00075 virtual DtVector calcPercentAlongGreatCircle( const DtVector& endGeod, 00076 double percentage, double heightScale=0. ); 00077 00083 virtual double altitudeForPoint( const DtVector& endGeod, 00084 double percent, double heightScale ) const; 00085 00088 virtual double radiusAtLatitude( const DtReferenceEllipsoid& ellipsoid, 00089 double lat ) const; 00090 00091 protected: 00092 00095 virtual void generateMeridionalCurve( const DtVector& endGeod, 00096 int numSegments, double heightScale ); 00097 00099 virtual void generateNonmeridionalCurve( const DtVector& endGeod, 00100 int numSegments, double heightScale ); 00101 00102 private: 00103 00105 DtGreatCircleCurveGenerator(); 00106 00107 protected: 00108 00109 GreatCircleCurve myCurve; 00110 DtVector myStartGeod; 00111 double myRadius; 00112 }; 00113 00114 } 00115 00116