Calculate curvature for 3 Points (x,y)

后端 未结 4 1250
礼貌的吻别
礼貌的吻别 2021-01-13 12:22

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         


        
4条回答
  •  轮回少年
    2021-01-13 12:47

    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;
    }
    

提交回复
热议问题