Source code for pyxfem.core.geometry

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]])))