geometry.py

changeset 12
eb74680a5e43
parent 9
fea8e9ae6f29
child 13
12d4ddc4bfd8
equal deleted inserted replaced
11:b42788f5d0a9 12:eb74680a5e43
186 @property 186 @property
187 def perimeter_lines(self): 187 def perimeter_lines(self):
188 for v1, v2 in pairs(self.vertices): 188 for v1, v2 in pairs(self.vertices):
189 yield LineSegment(v1, v2) 189 yield LineSegment(v1, v2)
190 @property 190 @property
191 def smallest_angle(self): 191 def angles(self):
192 from math import acos, inf 192 from math import acos
193 min_angle = inf
194 for v1, v2, v3 in pairs(self.vertices, count = 3): 193 for v1, v2, v3 in pairs(self.vertices, count = 3):
195 vec1 = (position_vector(v3) - position_vector(v2)).normalized() 194 vec1 = (position_vector(v3) - position_vector(v2)).normalized()
196 vec2 = (position_vector(v1) - position_vector(v2)).normalized() 195 vec2 = (position_vector(v1) - position_vector(v2)).normalized()
197 cosine = dot_product(vec1, vec2) / vec1.length() / vec2.length() 196 cosine = dot_product(vec1, vec2) / vec1.length() / vec2.length()
198 min_angle = min(min_angle, angle_magnitude_key(acos(cosine))) 197 yield acos(cosine)
199 return min_angle 198 @property
199 def smallest_angle(self):
200 return min(
201 angle_magnitude_key(angle)
202 for angle in self.angles)
200 @property 203 @property
201 def hairline_ratio(self): 204 def hairline_ratio(self):
202 lengths = [line.length for line in self.perimeter_lines] 205 lengths = [line.length for line in self.perimeter_lines]
203 return max(lengths) / min(lengths) 206 return max(lengths) / min(lengths)
204 207

mercurial