tests/quadrilaterals.py

changeset 30
0d9ca37901ed
parent 28
5933250813a3
child 32
75f44d3063da
equal deleted inserted replaced
29:db6ca177c6c4 30:0d9ca37901ed
49 intersection = line_segment_intersection_xy(line_1, line_2) 49 intersection = line_segment_intersection_xy(line_1, line_2)
50 if intersection: 50 if intersection:
51 yield error(quadrilateral, 'self-intersecting') 51 yield error(quadrilateral, 'self-intersecting')
52 break 52 break
53 53
54 def collinear_test(model):
55 for element in model.body:
56 if hasattr(element, 'geometry') and len(element.geometry.vertices) >= 3:
57 for a, b, c in pairs(element.geometry.vertices, count = 3):
58 if cross_product(b - a, c - a).length() < 1e-5:
59 yield error(element, 'collinearity-error')
60
54 manifest = { 61 manifest = {
55 'tests': { 62 'tests': {
56 'skew': skew_test, 63 'skew': skew_test,
57 'concave': concave_test, 64 'concave': concave_test,
58 'bowtie': bowtie_test, 65 'bowtie': bowtie_test,
66 'collinearity': collinear_test,
59 }, 67 },
60 'messages': { 68 'messages': {
61 'skew-error': lambda skew_angle: 69 'skew-error': lambda skew_angle:
62 str.format('skew quadrilateral (plane angle {})', 70 str.format('skew quadrilateral (plane angle {})',
63 degree_rep(skew_angle), 71 degree_rep(skew_angle),
66 str.format('slightly skew quadrilateral (plane angle {})', 74 str.format('slightly skew quadrilateral (plane angle {})',
67 degree_rep(skew_angle), 75 degree_rep(skew_angle),
68 ), 76 ),
69 'concave-error': 'concave quadrilateral', 77 'concave-error': 'concave quadrilateral',
70 'self-intersecting': 'bowtie quadrilateral', 78 'self-intersecting': 'bowtie quadrilateral',
79 'collinearity-error': 'collinear polygon',
71 }, 80 },
72 } 81 }

mercurial