{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 7. Exercise solutions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-9.19238816, -2.12132034, -0.70710678, -3.8890873 , 4.59619408,\n", " 7.77817459, 9.19238816, 2.12132034, 0.70710678, 3.8890873 ,\n", " -4.59619408, -7.77817459, -9.19238816])" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "from math import cos, sin, atan, pi\n", "import matplotlib.pyplot as plt\n", "\n", "\n", "def rotate(x, y, theta=90):\n", " '''\n", " Rotate coordinate lists/arrays x and y rotated angle theta [deg] clockwise. \n", " Returns the rotated coordinates as arrays.\n", " '''\n", " \n", " # Convert angle to radians\n", " theta = pi * theta / 180\n", " \n", " # Define rotation matrix \n", " R = np.array([[cos(theta), sin(theta), 0],\n", " [-sin(theta), cos(theta), 0],\n", " [0, 0, 1]])\n", "\n", " # Define array of original coordinates \n", " xy1 = np.array([x, y, np.ones(len(x))])\n", " \n", " # Compute rotated coordinates\n", " xr, yr, _ = np.matmul(R, xy1)\n", "\n", " return xr, yr\n", "\n", "\n", "\n", "# Test arrays to transform\n", "x = np.array([-5, 5, 5, 0.5, 0.5, 5, 5, -5, -5, -0.5, -0.5, -5, -5])\n", "y = np.array([-8, -8, -6, -6, 6, 6, 8, 8, 6, 6, -6, -6, -8])\n", "\n", "# Call the function with test arrays\n", "xr, yr = rotate(x, y, theta=45)\n", "\n", "# Display the rotated x-coordinates\n", "xr" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-2.12132034, -9.19238816, -7.77817459, -4.59619408, 3.8890873 ,\n", " 0.70710678, 2.12132034, 9.19238816, 7.77817459, 4.59619408,\n", " -3.8890873 , -0.70710678, -2.12132034])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Display the rotated y-coordinates\n", "yr" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def plot_transform(xt, yt, x=None, y=None, title=None):\n", " ''' \n", " Plot the transformed coordinates (xr, yr). Optionally plot the original coordinates (x, y).\n", " All four inputs are of type list or array and should all have same length. \n", " Optionally give a title to the plot-function as a string.\n", " '''\n", " \n", " # Plot transformed coordintes\n", " plt.plot(xt, yt, '.-', color='limegreen')\n", " \n", " # Plot original coordinates if they were input\n", " if x is not None and y is not None:\n", " plt.plot(x, y, '.-', color='black')\n", " \n", " # Set title if that was input\n", " if title:\n", " plt.title(title, fontsize=15)\n", " \n", " # Set same scaling on x- and y-axis and show the plot\n", " plt.axis('equal') \n", " plt.show()\n", " \n", " \n", "# Plot rotated coordinates from previosly\n", "rotate_title = 'Rotated coordinates with $\\\\theta = 45 ^{\\circ} $'\n", "plot_transform(xr, yr, x, y, title=rotate_title)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Note**: An optional `title` parameter is also implemented here, even though it was not required by the exercise text." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def translate(x, y, x_translate, y_translate):\n", " ''' \n", " Translate coordinate lists/arrays x and y the distance x_translate in the x-direction \n", " and the distance y_translate in the y-direction. Returns the translated coordinates as arrays. \n", " '''\n", " \n", " # Define translation matrix\n", " T = np.array([[1, 0, x_translate],\n", " [0, 1, y_translate],\n", " [0, 0, 1]])\n", " \n", " # Define array of original coordinates\n", " xy1 = np.array([x, y, np.ones(len(x))])\n", " \n", " # Compute translated coordinates\n", " xt, yt, _ = np.matmul(T, xy1)\n", " \n", " return xt, yt\n", "\n", "\n", "# Call the function with test arrays\n", "xt, yt = translate(x, y, 10, 8)\n", "\n", "# Plot the translated coordinates\n", "translate_title = 'Translated coordinates with $(\\Delta x, \\Delta y) = (10, 8)$'\n", "plot_transform(xt, yt, x, y, title=translate_title)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def scale(x, y, x_scale, y_scale):\n", " ''' \n", " Scale coordinate lists/arrays x and y the by factors x_scale and y_scale in the x-direction \n", " and y_translate, respectively. Returns the scaled coordinates as arrays. \n", " '''\n", " \n", " # Define scaling matrix\n", " S = np.array([[x_scale, 0, 0],\n", " [0, y_scale, 0],\n", " [0, 0, 1]])\n", " \n", " # Define array of original coordinates\n", " xy1 = np.array([x, y, np.ones(len(x))])\n", " \n", " # Compute scaled coordinates\n", " xs, ys, _ = np.matmul(S, xy1)\n", " \n", " return xs, ys\n", "\n", "\n", "# Call the function with test arrays\n", "xs, ys = scale(x, y, 2, 1.5)\n", "\n", "# Plot the scaled coordinates\n", "scale_title = 'Scaled coordinates with $(x_{scaled}, y_{scaled}) = (2, 1.5)$'\n", "plot_transform(xs, ys, x, y, title=scale_title)\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def mirror(x, y):\n", " ''' \n", " Mirror coordinate lists/arrays x and y about the y-axis. Returns the mirrored \n", " coordinates as arrays. \n", " '''\n", " \n", " # Define translation matrix\n", " M = np.array([[-1, 0, 0],\n", " [0, 1, 0],\n", " [0, 0, 1]])\n", " \n", " # Define array of original coordinates\n", " xy1 = np.array([x, y, np.ones(len(x))])\n", " \n", " # Compute new coordinates\n", " xm, ym, _ = np.matmul(M, xy1)\n", " \n", " return xm, ym\n", "\n", "\n", "# Call the function with test arrays with 20 added to all x-values\n", "xm, ym = mirror(x+20, y)\n", "\n", "# Plot the mirrored coordinates\n", "mirror_title = 'Mirrored coordinates'\n", "plot_transform(xm, ym, x, y, title=mirror_title)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def transform(x, y, rotation=0, scaling=(1, 1), translation=(0, 0), mirroring=False):\n", " '''\n", " Perform a combined coordinate tranformation according to given inputs. \n", " Returns the transformed coordinates as arrays.\n", " If no inputs are given, returns the unchanged coordinates.\n", "\n", " Args:\n", " x (array) : x-values to transform.\n", " y (array) : y-values to transform.\n", " rotate (float, optional) : Clockwise rotation angle in [deg]. Defaults to no rotation.\n", " scale (float, optional) : Scaling factor in axes directions (cx, cy). Defaults to no scaling.\n", " translate (tuple, optional) : Translation in axes directions (dx, dy). Defaults to no translation.\n", " mirror (bool, optional) : Whether or not to mirror the coordinates, Defaults to no mirroring.\n", " '''\n", " \n", " # Rotate coordinates \n", " xt, yt = rotate(x, y, theta=rotation)\n", " \n", " # Scale coordinates\n", " xt, yt = scale(xt, yt, scaling[0], scaling[1])\n", " \n", " # Translate coordinates\n", " xt, yt = translate(xt, yt, translation[0], translation[1])\n", " \n", " # Mirror coordinates if input parameter mirroring is set to True\n", " if mirroring:\n", " xt, yt = mirror(xt, yt)\n", "\n", " # Return transformed coordinates as numpy arrays\n", " return xt, yt\n", "\n", "\n", "# Call the function with test arrays\n", "xt, yt = transform(x, y, rotation=45, scaling=(1.5, 2), translation=(10, 8), mirroring=True)\n", "\n", "# Plot the transformed coordinates\n", "transform_title = 'Transformed coordinates'\n", "plot_transform(xt, yt, x, y, title=transform_title)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# End of exercises\n", "\n", "*The cell below is for setting the style of this document. It's not part of the exercises.*" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import HTML\n", "HTML(''.format(open('../css/cowi.css').read()))" ] } ], "metadata": { "hide_input": false, "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.7.3" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Table of Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "431.53px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }