|
@ -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 |