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 |