{ "cells": [ { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Procedural approach\n", "import math\n", "def perimeter(polygon):\n", " \"\"\"Given a list of vector vertices (in proper order), \n", " returns the perimeter for the associated polygon.\"\"\"\n", " total = 0\n", " for i in range(len(polygon)):\n", " vertex1 = polygon[i]\n", " vertex2 = polygon[(i+1) % len(polygon)]\n", " distance = math.sqrt((vertex2[0] - vertex1[0]) ** 2\n", " + (vertex2[1] - vertex1[1]) ** 2)\n", " total += distance\n", " return total" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "4.0" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "perimeter([[0, 0], [1, 0], [1, 1], [0, 1]]) # a square with sides of length 1" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "17.356451097651515" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vertices = [[0, -2], [1, 1], [3, 3], [5, 1], [4, 0], [4, -3]]\n", "perimeter(vertices) # a more complex shape" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# just for illustration, let's see what this polygon looks like\n", "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "vertices.append(vertices[0]) #so that we draw a line back to the beginning\n", "plt.plot([val[0] for val in vertices], [val[1] for val in vertices])" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Object-Oriented approach\n", "\n", "class Polygon:\n", " \"\"\"A new class named Polygon.\"\"\"\n", " \n", " def __init__(self, vertices):\n", " self.vertices = vertices\n", " print(\"(Creating an instance of the class Polygon)\")\n", "\n", " def perimeter(self):\n", " total = 0\n", " for i in range(len(self.vertices)):\n", " vertex1 = self.vertices[i]\n", " vertex2 = self.vertices[(i+1) % len(self.vertices)]\n", " distance = math.sqrt((vertex2[0] - vertex1[0]) ** 2\n", " + (vertex2[1] - vertex1[1]) ** 2)\n", " total += distance\n", " return total" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Creating an instance of the class Polygon)\n" ] }, { "data": { "text/plain": [ "17.356451097651515" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = Polygon([[0, -2], [1, 1], [3, 3], [5, 1], [4, 0], [4, -3]])\n", "a.perimeter()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.8" } }, "nbformat": 4, "nbformat_minor": 0 }