tests/quadrilaterals.py

changeset 26
7c263b864371
parent 22
9bb00170780b
child 27
3089611c99d1
equal deleted inserted replaced
25:8990ac138cc2 26:7c263b864371
5 def sign_consistency(container): 5 def sign_consistency(container):
6 # Returns whether all elements in container have the same sign 6 # Returns whether all elements in container have the same sign
7 return min(container) * max(container) >= 0 7 return min(container) * max(container) >= 0
8 8
9 def concave_test(model): 9 def concave_test(model):
10 ''' Checks that all quadrilaterals are convex. '''
10 for quadrilateral in model.quadrilaterals: 11 for quadrilateral in model.quadrilaterals:
11 geometry = transform_to_xy(quadrilateral.geometry) 12 geometry = transform_to_xy(quadrilateral.geometry)
12 z_scores = [ 13 z_scores = [
13 cross_product(v2 - v1, v3 - v1).z 14 cross_product(v2 - v1, v3 - v1).z
14 for v1, v2, v3 in pairs(geometry.vertices, count = 3) 15 for v1, v2, v3 in pairs(geometry.vertices, count = 3)
15 ] 16 ]
16 if not sign_consistency(z_scores): 17 if not sign_consistency(z_scores):
17 yield error(quadrilateral, 'concave-error') 18 yield error(quadrilateral, 'concave-error')
18 19
19 def skew_test(model): 20 def skew_test(model):
20 ''' Test for non-coplanar quadrilaterals. ''' 21 ''' Checks that all quadrilaterals are coplanar. '''
21 for quadrilateral in model.quadrilaterals: 22 for quadrilateral in model.quadrilaterals:
22 for triangles in split_quadrilateral(quadrilateral.geometry): 23 for triangles in split_quadrilateral(quadrilateral.geometry):
23 plane_1 = triangle_plane_normal(triangles[0]) 24 plane_1 = triangle_plane_normal(triangles[0])
24 plane_2 = triangle_plane_normal(triangles[1]) 25 plane_2 = triangle_plane_normal(triangles[1])
25 skew_angle = vector_angle(plane_1, plane_2, normalized = True) 26 skew_angle = vector_angle(plane_1, plane_2, normalized = True)

mercurial