Coverage for pyxfem/core/geometry.py: 0%

16 statements  

« prev     ^ index     » next       coverage.py v7.17.0, created at 2026-10-24 07:17 +0000

1import numpy as np 

2 

3def cross2d(a, b): 

4 return a[..., 0] * b[..., 1] - a[..., 1] * b[..., 0] 

5 

6def is_left_to_line(a, b, c) : 

7 ''' given three point a, b, c return true if c is on the right of segment ab ''' 

8 return cross2d(b-a, c-a) >= 0. 

9 

10def is_in_triangle(t, a) : 

11 ''' return true if point a is in triangle t ''' 

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

13 

14if __name__ == "__main__": 

15 print(is_left_to_line(np.array([0.1,0]),np.array([1., 0.]), np.array([0.,1.]))) 

16 t1 = np.array([[0.1,0.],[1.,0.],[0.,1.]]) 

17 t2 = np.array([[1.1,0.],[2.,0.],[1.,1.]]) 

18 tris = np.array([t1, t2]) 

19 print(is_left_to_line(t1[0], t1[1], np.array([[1.,0.3], [0.1, -0.3]]) )) 

20 

21 print(t2) 

22 

23 print(is_in_triangle(t1, np.array([[1.,0.3], [0.1, 0.3]]))) 

24 print(is_in_triangle(tris, np.array([[1.,0.3], [0.1, 0.3]]))) 

25