import numpy as np
[docs]
def cross2d(a, b):
return a[..., 0] * b[..., 1] - a[..., 1] * b[..., 0]
[docs]
def is_left_to_line(a, b, c) :
''' given three point a, b, c return true if c is on the right of segment ab '''
return cross2d(b-a, c-a) >= 0.
[docs]
def is_in_triangle(t, a) :
''' return true if point a is in triangle t '''
return is_left_to_line(t[0], t[1], a) & is_left_to_line(t[1], t[2], a) & is_left_to_line(t[2], t[0], a)
if __name__ == "__main__":
print(is_left_to_line(np.array([0.1,0]),np.array([1., 0.]), np.array([0.,1.])))
t1 = np.array([[0.1,0.],[1.,0.],[0.,1.]])
t2 = np.array([[1.1,0.],[2.,0.],[1.,1.]])
tris = np.array([t1, t2])
print(is_left_to_line(t1[0], t1[1], np.array([[1.,0.3], [0.1, -0.3]]) ))
print(t2)
print(is_in_triangle(t1, np.array([[1.,0.3], [0.1, 0.3]])))
print(is_in_triangle(tris, np.array([[1.,0.3], [0.1, 0.3]])))