Lang:Python2
Edit12345678910111213141516171819202122232425262728293031# -*- coding: utf-8 -*-import mathdef distance_point(a, b):return math.sqrt(float(a[0] - b[0])**2 + float(a[1] - b[1])**2)def get_line(linep1, linep2):A = linep2[1] - linep1[1]B = linep1[0] - linep2[0]C = -(A * linep1[0] + B * linep1[1])return A, B, Cdef distance_line(a, linep1, linep2):A, B, C = get_line(linep1, linep2)if A == B == 0:return distance_point(a, linep1)dis = abs(A * a[0] + B * a[1] + C) / math.sqrt(A**2 + B**2)return disdef p_in_tri(p, t):dis_p2ts = map(lambda x: distance_point(p, x), t)bianchang = [distance_point(t[0], t[1]), distance_point(t[0], t[2]),distance_point(t[1], t[2])]areas = [0.5 * bianchang[0] * distance_line(p, t[0], t[1]),0.5 * bianchang[1] * distance_line(p, t[0], t[2]),0.5 * bianchang[2] * distance_line(p, t[1], t[2])]if sum(areas) <= 0.5 * bianchang[0] * distance_line(t[2], t[0], t[1]):