function onTriangle(p_1, p_2, p_3, p): for i, j in {1,2,3}, i < j: if (p_j-p_i) x (p-p_i) = 0: return |p_j-p_i| <= |p-p_i| and <p_j-p_i, p-p_i> > 0 // check that point is in line segment return false
function inTriangle(p_1, p_2, p_3, p): if sign(<p_2 - p_1, p_1 - p>) != sign(<p_3 - p_1, p_1 - p>): return false if sign(<p_3 - p_2, p_2 - p>) != sign(<p_1 - p_2, p_2 - p>): return false if sign(<p_1 - p_3, p_3 - p>) != sign(<p_2 - p_3, p_3 - p>): return false return true
x= (x1*(y2-y3) + x2*(y3-y1)+x3*(y1-y2))/2.0)}
areaABC= area(x1,y1,x2,y2,x3,y3) areaABP=area(x1,y1,x2,y2,x,y) areaPBC=area(x,y,x2,y2,x3,y3) areaBCP=area(x2,y2,x3,y3,x,y)
return (areaABC==areaABP+areaPBC+areaBCP)}
# Point class has x and y fields return ((a.x - b.x) ** 2 + (a.y - b.y) ** 2) ** (1/2)
# Point class has x and y fields sideA = findSide(a, b) sideB = findSide(b, c) sideC = findSide(a, c) s = (sideA + side B + side C)/2 return (s*(s-a)*(s-b)*(s-c)) ** 0.5;
# Point class has x and y fields areaABP = findArea(a, b, test) areaACP = findArea(b, c, test) areaBCP = findArea(a, c, test)
return (areaABP == 0 || areaACP == 0 || areaBCP == 0)
# Point class has x and y fields areaABP = findArea(a, b, test) areaACP = findArea(b, c, test) areaBCP = findArea(a, c, test) return ((area(a, b, c)) == (areaABP + areaACP + areaBCP))