I have a two dimensional euclidean space. Three points are given.
For example (p2 is the middle point):
Point2D p1 = new Point2D.Double(177, 289);
Po
C/C++
// https://www.mathopenref.com/coordtrianglearea.html
float getAreaOfTriangle(Point2f A, Point2f B, Point2f C)
{
return fabs(
(A.x * (B.y - C.y) + B.x * (C.y - A.y) + C.x * (A.y - B.y)) / 2);
}
float getDistFromPtToPt(Point2f pt1, Point2f pt2)
{
return sqrt((pt2.x - pt1.x) * (pt2.x - pt1.x) +
(pt2.y - pt1.y) * (pt2.y - pt1.y));
}
// https://en.wikipedia.org/wiki/Menger_curvature
float
getCurvatureUsingTriangle(Point2f pt1, Point2f pt2, Point2f pt3, bool bDebug)
{
float fAreaOfTriangle = getAreaOfTriangle(pt1, pt2, pt3);
float fDist12 = getDistFromPtToPt(pt1, pt2);
float fDist23 = getDistFromPtToPt(pt2, pt3);
float fDist13 = getDistFromPtToPt(pt1, pt3);
float fKappa = 4 * fAreaOfTriangle / (fDist12 * fDist23 * fDist13);
return fKappa;
}