43 int const nCoastSize =
m_VCoast[nCoast].nGetCoastlineSize();
46 for (
int nThisCoastPoint = 1; nThisCoastPoint < (nCoastSize - 1); nThisCoastPoint++)
49 double const dCurvature =
dCalcCurvature(nHandedness,
m_VCoast[nCoast].pPtGetCoastlinePointExtCRS(nThisCoastPoint - 1),
m_VCoast[nCoast].pPtGetCoastlinePointExtCRS(nThisCoastPoint),
m_VCoast[nCoast].pPtGetCoastlinePointExtCRS(nThisCoastPoint + 1));
52 m_VCoast[nCoast].SetDetailedCurvature(nThisCoastPoint, dCurvature);
56 double dTemp =
m_VCoast[nCoast].dGetDetailedCurvature(1);
57 m_VCoast[nCoast].SetDetailedCurvature(0, dTemp);
59 dTemp =
m_VCoast[nCoast].dGetDetailedCurvature(nCoastSize - 2);
60 m_VCoast[nCoast].SetDetailedCurvature(nCoastSize - 1, dTemp);
66 for (
int i = 0; i < nCoastSize; i++)
69 double dWindowTot = 0;
76 if ((k < 0) || (k >= nCoastSize))
79 dWindowTot +=
m_VCoast[nCoast].dGetDetailedCurvature(k);
83 m_VCoast[nCoast].SetSmoothCurvature(i, dWindowTot /
static_cast<double>(nTmpWindow));
87 vector<double>* pVDetailed =
m_VCoast[nCoast].pVGetDetailedCurvature();
89 double dSum = accumulate(pVDetailed->begin(), pVDetailed->end(), 0.0);
90 double dMean = dSum /
static_cast<double>(pVDetailed->size());
92 m_VCoast[nCoast].SetDetailedCurvatureMean(dMean);
94 double dSquareSum = inner_product(pVDetailed->begin(), pVDetailed->end(), pVDetailed->begin(), 0.0);
95 double dSTD = sqrt(dSquareSum /
static_cast<double>(pVDetailed->size()) - dMean * dMean);
97 m_VCoast[nCoast].SetDetailedCurvatureSTD(dSTD);
99 vector<double>* pVSmooth =
m_VCoast[nCoast].pVGetSmoothCurvature();
100 dSum = accumulate(pVSmooth->begin(), pVSmooth->end(), 0.0),
101 dMean = dSum /
static_cast<double>(pVSmooth->size());
103 m_VCoast[nCoast].SetSmoothCurvatureMean(dMean);
105 dSquareSum = inner_product(pVSmooth->begin(), pVSmooth->end(), pVSmooth->begin(), 0.0), dSTD = sqrt(dSquareSum /
static_cast<double>(pVSmooth->size()) - dMean * dMean);
106 m_VCoast[nCoast].SetSmoothCurvatureSTD(dSTD);
108 double dMaxConvexDetailed = DBL_MAX;
109 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);
130 int const 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...