{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# EE16A Discussion 2B" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualizing Matrices as Operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This exercise is going to help you visualize matrices as operations. For example, when we multiply a vector by a rotation matrix, we will see it \"rotate\" in the true sense here. Similarly, when we multiply a matrix by a scalar matrix, we will see it \"scale\". The way we will see this is by applying the operation to all the vertices of a polygon and seeing how the polygon changes.\n", "Let's first do the necessary imports and define some useful functions to do this." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "\"\"\"Function that takes the vertices of a polygon and applies a matrix \"transformation\" to each of them, effectively\n", "\"transforming\" the polygon.\"\"\"\n", "def transform_the_polygon(polygon, T):\n", " \n", " transformed_polygon = []\n", " for point in polygon:\n", " transformed_point = np.dot(T, point)\n", " transformed_polygon.append(transformed_point)\n", " return transformed_polygon\n", "\n", "\"\"\"Function that plots a polygon in the x-y plane, given its vertices as x-y coordinates. The plot is defined in terms\n", "of line segments connecting all adjacent vertices of the polygon.\"\"\"\n", "def plot_the_polygon(polygon):\n", " fig = plt.figure(figsize=(5,5))\n", " ax = fig.add_subplot(111, xlim = [-4, 4], ylim = [-4, 4])\n", " for i in range(len(polygon) - 1):\n", " ax.plot([polygon[i][0], polygon[i+1][0]],\n", " [polygon[i][1], polygon[i+1][1]], linewidth=4)\n", " ax.plot([polygon[i+1][0], polygon[0][0]], [polygon[i+1][1], polygon[0][1]], linewidth=4)\n", " ax.grid(True)\n", " ax.axhline(y=0, color='k', linestyle = '--', linewidth = 2)\n", " ax.axvline(x=0, color='k', linestyle = '--', linewidth = 2)\n", " #plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we define our starting polygon, a square whose side is of length 1. Let's see what the square looks like." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "unit_square = [np.array([0,0]), np.array([1,0]), np.array([1,1]), np.array([0,1])]\n", "plot_the_polygon(unit_square)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Part 1: Rotation Matrices as Rotations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Code for the following sections:\n", "\n", "(a) Given T1 (15 degree rotation) and T2 (30 degree rotation), describe how to rotate the unit square by 45 degrees. How about 60 degrees?\n", "\n", "(b) Try to rotate the unit squre by 60 degrees using only one matrix." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 15)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m15\u001b[0m\n\u001b[0;31m T3 = ?????\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "# R is a \"rotation matrix.\"\n", "# Example:\n", "# angle = np.pi/2 # 90 degrees in radians\n", "# R = np.array([[np.cos(angle), -np.sin(angle)],\n", "# [np.sin(angle), np.cos(angle)]])\n", "\n", "angle1 = np.pi/12 # 15 degrees in radians\n", "T1 = np.array([[np.cos(angle1), -np.sin(angle1)],\n", " [np.sin(angle1), np.cos(angle1)]])\n", "\n", "angle2 = np.pi/6 # 30 degrees in radians\n", "T2 = np.array([[np.cos(angle2), -np.sin(angle2)],\n", " [np.sin(angle2), np.cos(angle2)]])\n", "\n", "T3 = ?????\n", "\n", "rotated_square = transform_the_polygon(unit_square, T3)\n", "plot_the_polygon(rotated_square)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And finally, we can \"reflect\" the square about the y-axis:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Re_y = np.array([[-1, 0], [0,1]])\n", "reflected_square = transform_the_polygon(unit_square, Re_y)\n", "plot_the_polygon(reflected_square)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Part 2: Commutativity of Operations" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "The next natural question to ask is the following: Does the *order* in which you apply these operations matter?\n", "\n", "a) Let's see what happens to the unit square when we rotate the matrix by 60 degrees, and then reflect it along the y-axis." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# As the name indicates, R_60 rotates the matrix by 60 degrees.\n", "rotation_angle = np.pi/3 # 60 degrees in radians\n", "R_60 = np.array([[np.cos(rotation_angle), -np.sin(rotation_angle)],\n", " [np.sin(rotation_angle), np.cos(rotation_angle)]])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "reflected_after_rotated_square = transform_the_polygon(unit_square, R_60)\n", "reflected_after_rotated_square = transform_the_polygon(reflected_after_rotated_square, Re_y)\n", "plot_the_polygon(reflected_after_rotated_square)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b) Now, let's reflect *before* rotating." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rotated_after_reflected_square = transform_the_polygon(unit_square, Re_y)\n", "rotated_after_reflected_square = transform_the_polygon(rotated_after_reflected_square, R_60)\n", "plot_the_polygon(rotated_after_reflected_square)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also scale the square: " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# S is a \"scalar matrix.\"\n", "S = np.array([[2, 0],\n", " [0, 2]])\n", "scaled_square = transform_the_polygon(unit_square, S)\n", "plot_the_polygon(scaled_square)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4" } }, "nbformat": 4, "nbformat_minor": 1 }