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;
78 if ((k < 0) || (k >= nCoastSize))
81 dWindowTot +=
m_VCoast[nCoast].dGetDetailedCurvature(k);
85 m_VCoast[nCoast].SetSmoothCurvature(i, dWindowTot /
static_cast<double>(nTmpWindow));
89 vector<double> *pVDetailed =
m_VCoast[nCoast].pVGetDetailedCurvature();
91 double dSum = accumulate(pVDetailed->begin(), pVDetailed->end(), 0.0);
92 double dMean = dSum /
static_cast<double>(pVDetailed->size());
94 m_VCoast[nCoast].SetDetailedCurvatureMean(dMean);
96 double dSquareSum = inner_product(pVDetailed->begin(), pVDetailed->end(), pVDetailed->begin(), 0.0);
97 double dSTD = sqrt(dSquareSum /
static_cast<double>(pVDetailed->size()) - dMean * dMean);
99 m_VCoast[nCoast].SetDetailedCurvatureSTD(dSTD);
101 vector<double> *pVSmooth =
m_VCoast[nCoast].pVGetSmoothCurvature();
102 dSum = accumulate(pVSmooth->begin(), pVSmooth->end(), 0.0),
103 dMean = dSum /
static_cast<double>(pVSmooth->size());
105 m_VCoast[nCoast].SetSmoothCurvatureMean(dMean);
107 dSquareSum = inner_product(pVSmooth->begin(), pVSmooth->end(), pVSmooth->begin(), 0.0), dSTD = sqrt(dSquareSum /
static_cast<double>(pVSmooth->size()) - dMean * dMean);
108 m_VCoast[nCoast].SetSmoothCurvatureSTD(dSTD);
110 double dMaxConvexDetailed = DBL_MAX;
111 double dMaxConvexSmoothed = DBL_MAX;
113 for (
int mm = 0; mm < nCoastSize; mm++)
115 if (
m_VCoast[nCoast].dGetDetailedCurvature(mm) < dMaxConvexDetailed)
117 dMaxConvexDetailed =
m_VCoast[nCoast].dGetDetailedCurvature(mm);
120 if (
m_VCoast[nCoast].dGetSmoothCurvature(mm) < dMaxConvexSmoothed)
122 dMaxConvexSmoothed =
m_VCoast[nCoast].dGetSmoothCurvature(mm);
133 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...