algorithmmathgeometry

How to determine if a point is in a 2D triangle?


What is the simplest algorithm to determine if a point is inside a 2d triangle?


Solution

  • In general, the simplest (and quite optimal) algorithm is checking on which side of the half-plane created by the edges the point is.

    Here's some high quality info in this topic on GameDev, including performance issues.

    And here's some code to get you started:

    float sign (fPoint p1, fPoint p2, fPoint p3)
    {
        return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);
    }
    
    bool PointInTriangle (fPoint pt, fPoint v1, fPoint v2, fPoint v3)
    {
        float d1, d2, d3;
        bool has_neg, has_pos;
    
        d1 = sign(pt, v1, v2);
        d2 = sign(pt, v2, v3);
        d3 = sign(pt, v3, v1);
    
        has_neg = (d1 < 0) || (d2 < 0) || (d3 < 0);
        has_pos = (d1 > 0) || (d2 > 0) || (d3 > 0);
    
        return !(has_neg && has_pos);
    }