| @ -0,0 +1,51 @@ | |||||
| import math | |||||
| # version with 2 separate functions | |||||
| def distance(p1, p2): | |||||
| return math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2) | |||||
| def perimeter(polygon): | |||||
| perimeter = 0 | |||||
| points = polygon + [polygon[0]] | |||||
| for i in range(len(polygon)): | |||||
| perimeter += distance(points[i], points[i + 1]) | |||||
| return perimeter | |||||
| # oop version with classes | |||||
| class Point: | |||||
| def __init__(self, x, y): | |||||
| self.x = x | |||||
| self.y = y | |||||
| def distance(self, p2): | |||||
| return math.sqrt((self.x - p2.x) ** 2 + (self.y - p2.y) ** 2) | |||||
| class Polygon: | |||||
| def __init__(self, points = []): | |||||
| self.vertices = [] | |||||
| for point in points: | |||||
| if isinstance(point, tuple): | |||||
| # *point splits point into 2 parameters for Point.__init__() | |||||
| point = Point(*point) | |||||
| self.vertices.append(point) | |||||
| def add_point(self, point): | |||||
| self.vertices.append((point)) | |||||
| def perimeter(self): | |||||
| perimeter = 0 | |||||
| try: | |||||
| points = self.vertices + [self.vertices[0]] | |||||
| except IndexError: | |||||
| print("The polygon has no points.") | |||||
| else: | |||||
| for i in range(len(self.vertices)): | |||||
| perimeter += points[i].distance(points[i + 1]) | |||||
| return perimeter | |||||