QGISAlgorithmLib.h
上传用户:oybseng
上传日期:2015-04-27
资源大小:7831k
文件大小:3k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1. // QGISAlgorithmLib.h: interface for the CQGISAlgorithmLib class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_QGISALGORITHMLIB_H__F7E0915B_63B3_49A4_8022_E92A2AC2EBDA__INCLUDED_)
  5. #define AFX_QGISALGORITHMLIB_H__F7E0915B_63B3_49A4_8022_E92A2AC2EBDA__INCLUDED_
  6. #include "....QObjectsincludeQBaseObj.h"
  7. #include "....QObjectsincludeQPointObj.h"
  8. #include "....QObjectsincludeQPointArray.h"
  9. #if _MSC_VER > 1000
  10. #pragma once
  11. #endif // _MSC_VER > 1000
  12. //GIS常用算法库
  13. //////////////////////////////////////////
  14. ///***************CQGIS****************///
  15. ///类    名:CQGISAlgorithmLib
  16. ///基    型:无
  17. ///说    明:GIS常用算法库
  18. ///***************CQGIS****************///
  19. //////////////////////////////////////////
  20. class AFX_EXT_CLASS CQGISAlgorithmLib  
  21. {
  22. public:
  23. CQGISAlgorithmLib();
  24. virtual ~CQGISAlgorithmLib();
  25. public:
  26. // 判断两条直线是否相交
  27. static BOOL IsLineCross(CQPoint p1,CQPoint p2,CQPoint q1,CQPoint q2);
  28. //计算两条线段的交点
  29. static void CalLineCrossPoint(CQPoint pp1,CQPoint pp2,CQPoint qq1,CQPoint qq2,CQPointArray * pResult);
  30. static double RadianToDegree(double fRadian);
  31. static double DegreeToRadian(double fDegree);
  32. //线条光滑及线条数据压缩算法处理
  33. //1-插值曲线; 2-二次B样条; 3-三次B样条
  34. //1-插值曲线就是线性插值 两个 重载函数
  35. static void Interpolation_curve(double * FromX,double * FromY,double * ToX,double * ToY,int nBegin,int nEnd);
  36. static void Interpolation_curve(float * FromX,float * FromY,float * ToX,float * ToY,int nBeign,int nEnd);
  37. //二次B样条
  38. //(二次B样条曲线)
  39. static void B2_curves(float * x, float * y, float * tx, float * ty, int n, int m);
  40. static void B2_curves(double * x, double * y, double * tx, double * ty, int n, int m);
  41. //(三次B样条曲线)
  42. static void B3_curves(float * x, float * y, float * tx, float * ty, int n, int m);
  43. static void B3_curves(double * x, double * y, double * tx, double * ty, int n, int m);
  44. //三次样条函数插值(第二种边界条件)
  45. // 三次样条函数插值(第二种边界条件)
  46. static float Spline2D(float * x, float * y, float * tx, float * ty, int N, int k);
  47. static double Spline2D(double * x, double * y, double * tx, double * ty, int N, int k);
  48. static void SplineClean2D(float * x, float * y, float * tx, float * ty, int n, int m);
  49. static void SplineClean2D(double * x, double * y, double * tx, double * ty, int n, int m);
  50. //线条抽稀
  51. static BOOL PtListBeThin(CQPointArray & ptArray,double beThinElem = 0.0001f);  
  52. //道格拉斯-普克法算法描述 
  53. //首先,将一条曲线首、末点连一条直线,求出其余各点到该直线的距离
  54. //选其最大者与规定的临界值相比较,若大于临界值,则离该直线距离最
  55. //大的点保留,否则将直线两端间各点全部舍去
  56. static void PtListLess(CQPointArray & ptArray,double beThin = 0.0001f);
  57. static double ConvertFontPttoMM(double pt);
  58. protected:
  59. //限制内部使用
  60. static void CalSameLineCrossPoint(CQPoint pp1,CQPoint pp2,CQPoint qq1,CQPoint qq2,CQPointArray * pResult);
  61. };
  62. #endif // !defined(AFX_QGISALGORITHMLIB_H__F7E0915B_63B3_49A4_8022_E92A2AC2EBDA__INCLUDED_)