45 int nCoastSize =
m_VCoast[nCoast].nGetCoastlineSize();
48 for (
int nThisCoastPoint = 1; nThisCoastPoint < (nCoastSize-1); nThisCoastPoint++)
51 double dCurvature =
dCalcCurvature(nHandedness,
m_VCoast[nCoast].pPtGetCoastlinePointExtCRS(nThisCoastPoint-1),
m_VCoast[nCoast].pPtGetCoastlinePointExtCRS(nThisCoastPoint),
m_VCoast[nCoast].pPtGetCoastlinePointExtCRS(nThisCoastPoint+1));
54 m_VCoast[nCoast].SetDetailedCurvature(nThisCoastPoint, dCurvature);
58 double dTemp =
m_VCoast[nCoast].dGetDetailedCurvature(1);
59 m_VCoast[nCoast].SetDetailedCurvature(0, dTemp);
61 dTemp =
m_VCoast[nCoast].dGetDetailedCurvature(nCoastSize-2);
62 m_VCoast[nCoast].SetDetailedCurvature(nCoastSize-1, dTemp);
68 for (
int i = 0; i < nCoastSize; i++)
71 double dWindowTot = 0;
77 if ((k < 0) || (k >= nCoastSize))
80 dWindowTot +=
m_VCoast[nCoast].dGetDetailedCurvature(k);
84 m_VCoast[nCoast].SetSmoothCurvature(i, dWindowTot /
static_cast<double>(nTmpWindow));
88 vector<double>* pVDetailed =
m_VCoast[nCoast].pVGetDetailedCurvature();
90 double dSum = accumulate(pVDetailed->begin(), pVDetailed->end(), 0.0);
91 double dMean = dSum /
static_cast<double>(pVDetailed->size());
93 m_VCoast[nCoast].SetDetailedCurvatureMean(dMean);
95 double dSquareSum = inner_product(pVDetailed->begin(), pVDetailed->end(), pVDetailed->begin(), 0.0);
96 double dSTD = sqrt(dSquareSum /
static_cast<double>(pVDetailed->size()) - dMean * dMean);
98 m_VCoast[nCoast].SetDetailedCurvatureSTD(dSTD);
100 vector<double>* pVSmooth =
m_VCoast[nCoast].pVGetSmoothCurvature();
101 dSum = accumulate(pVSmooth->begin(), pVSmooth->end(), 0.0),
102 dMean = dSum /
static_cast<double>(pVSmooth->size());
104 m_VCoast[nCoast].SetSmoothCurvatureMean(dMean);
106 dSquareSum = inner_product(pVSmooth->begin(), pVSmooth->end(), pVSmooth->begin(), 0.0), dSTD = sqrt(dSquareSum /
static_cast<double>(pVSmooth->size()) - dMean * dMean);
107 m_VCoast[nCoast].SetSmoothCurvatureSTD(dSTD);
109 double dMaxConvexDetailed = DBL_MAX;
110 double dMaxConvexSmoothed = DBL_MAX;
111 for (
int mm = 0; mm < nCoastSize; mm++)
113 if (
m_VCoast[nCoast].dGetDetailedCurvature(mm) < dMaxConvexDetailed)
115 dMaxConvexDetailed =
m_VCoast[nCoast].dGetDetailedCurvature(mm);
118 if (
m_VCoast[nCoast].dGetSmoothCurvature(mm) < dMaxConvexSmoothed)
120 dMaxConvexSmoothed =
m_VCoast[nCoast].dGetSmoothCurvature(mm);
131 int nMaxConvexCoastPoint = nCoastSize / 2;
static double dCalcCurvature(int const, CGeom2DPoint const *, CGeom2DPoint const *, CGeom2DPoint const *)
Calculates signed Menger curvature (https://en.wikipedia.org/wiki/Menger_curvature#Definition) from t...