# Procedural approach
import math
def perimeter(polygon):
"""Given a list of vector vertices (in proper order),
returns the perimeter for the associated polygon."""
total = 0
for i in range(len(polygon)):
vertex1 = polygon[i]
vertex2 = polygon[(i+1) % len(polygon)]
distance = math.sqrt((vertex2[0] - vertex1[0]) ** 2
+ (vertex2[1] - vertex1[1]) ** 2)
total += distance
return total
perimeter([[0, 0], [1, 0], [1, 1], [0, 1]]) # a square with sides of length 1
4.0
vertices = [[0, -2], [1, 1], [3, 3], [5, 1], [4, 0], [4, -3]]
perimeter(vertices) # a more complex shape
17.356451097651515
# just for illustration, let's see what this polygon looks like
%matplotlib inline
from matplotlib import pyplot as plt
vertices.append(vertices[0]) #so that we draw a line back to the beginning
plt.plot([val[0] for val in vertices], [val[1] for val in vertices])
[<matplotlib.lines.Line2D at 0x7f026fcd50d0>]
# Object-Oriented approach
class Polygon:
"""A new class named Polygon."""
def __init__(self, vertices):
self.vertices = vertices
print("(Creating an instance of the class Polygon)")
def perimeter(self):
total = 0
for i in range(len(self.vertices)):
vertex1 = self.vertices[i]
vertex2 = self.vertices[(i+1) % len(self.vertices)]
distance = math.sqrt((vertex2[0] - vertex1[0]) ** 2
+ (vertex2[1] - vertex1[1]) ** 2)
total += distance
return total
a = Polygon([[0, -2], [1, 1], [3, 3], [5, 1], [4, 0], [4, -3]])
a.perimeter()
(Creating an instance of the class Polygon)
17.356451097651515