{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import sympy as sym\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "def rotationGlobalX(alpha):\n", " return np.array([[1,0,0],[0,np.cos(alpha),-np.sin(alpha)],[0,np.sin(alpha),np.cos(alpha)]])\n", "\n", "def rotationGlobalY(beta):\n", " return np.array([[np.cos(beta),0,np.sin(beta)], [0,1,0],[-np.sin(beta),0,np.cos(beta)]])\n", "\n", "def rotationGlobalZ(gamma):\n", " return np.array([[np.cos(gamma),-np.sin(gamma),0],[np.sin(gamma),np.cos(gamma),0],[0,0,1]])\n", "\n", "def rotationLocalX(alpha):\n", " return np.array([[1,0,0],[0,np.cos(alpha),np.sin(alpha)],[0,-np.sin(alpha),np.cos(alpha)]])\n", "\n", "def rotationLocalY(beta):\n", " return np.array([[np.cos(beta),0,-np.sin(beta)], [0,1,0],[np.sin(beta),0,np.cos(beta)]])\n", "\n", "def rotationLocalZ(gamma):\n", " return np.array([[np.cos(gamma),np.sin(gamma),0],[-np.sin(gamma),np.cos(gamma),0],[0,0,1]])" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "(3, 900)\n" ] } ], "source": [ "\n", "\n", "coefs = (1, 3, 15) # Coefficients in a0/c x**2 + a1/c y**2 + a2/c z**2 = 1 \n", "# Radii corresponding to the coefficients:\n", "rx, ry, rz = 1/np.sqrt(coefs)\n", "\n", "# Set of all spherical angles:\n", "u = np.linspace(0, 2 * np.pi, 30)\n", "v = np.linspace(0, np.pi, 30)\n", "\n", "# Cartesian coordinates that correspond to the spherical angles:\n", "# (this is the equation of an ellipsoid):\n", "x = rx * np.outer(np.cos(u), np.sin(v))\n", "y = ry * np.outer(np.sin(u), np.sin(v))\n", "z = rz * np.outer(np.ones_like(u), np.cos(v))\n", "\n", "\n", "fig = plt.figure(figsize=plt.figaspect(1)) # Square figure\n", "ax = fig.add_subplot(111, projection='3d')\n", "\n", "xr = np.reshape(x, (1,-1))\n", "yr = np.reshape(y, (1,-1))\n", "zr = np.reshape(z, (1,-1))\n", "\n", "RX = rotationGlobalX(np.pi/3)\n", "RY = rotationGlobalY(np.pi/3)\n", "RZ = rotationGlobalZ(np.pi/3)\n", "Rx = rotationLocalX(np.pi/3)\n", "Ry = rotationLocalY(np.pi/3)\n", "Rz = rotationLocalZ(np.pi/3)\n", "\n", "rRotx = RY@RX@np.vstack((xr,yr,zr))\n", "print(np.shape(rRotx))\n", "# Plot:\n", "ax.plot_surface(np.reshape(rRotx[0,:],(30,30)), np.reshape(rRotx[1,:],(30,30)), \n", " np.reshape(rRotx[2,:],(30,30)), rstride=4, cstride=4, color='b')\n", "\n", "# Adjustment of the axes, so that they all have the same span:\n", "max_radius = max(rx, ry, rz)\n", "for axis in 'xyz':\n", " getattr(ax, 'set_{}lim'.format(axis))((-max_radius, max_radius))\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.71414284285428498" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sin(np.arccos(0.7))" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.25 -0.0580127 0.96650635]\n", " [ 0.4330127 0.89951905 -0.0580127 ]\n", " [-0.8660254 0.4330127 0.25 ]]\n" ] } ], "source": [ "print(RZ@RY@RX)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "import sympy as sym\n", "sym.init_printing()" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "a,b,g = sym.symbols('alpha, beta, gamma')" ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left ( \\left[\\begin{matrix}1 & 0 & 0\\\\0 & \\cos{\\left (\\alpha \\right )} & - \\sin{\\left (\\alpha \\right )}\\\\0 & \\sin{\\left (\\alpha \\right )} & \\cos{\\left (\\alpha \\right )}\\end{matrix}\\right], \\quad \\left[\\begin{matrix}\\cos{\\left (\\beta \\right )} & 0 & \\sin{\\left (\\beta \\right )}\\\\0 & 1 & 0\\\\- \\sin{\\left (\\beta \\right )} & 0 & \\cos{\\left (\\beta \\right )}\\end{matrix}\\right], \\quad \\left[\\begin{matrix}\\cos{\\left (\\gamma \\right )} & - \\sin{\\left (\\gamma \\right )} & 0\\\\\\sin{\\left (\\gamma \\right )} & \\cos{\\left (\\gamma \\right )} & 0\\\\0 & 0 & 1\\end{matrix}\\right]\\right )$$" ], "text/plain": [ "⎛⎡1 0 0 ⎤ ⎡cos(β) 0 sin(β)⎤ ⎡cos(γ) -sin(γ) 0⎤⎞\n", "⎜⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎟\n", "⎜⎢0 cos(α) -sin(α)⎥, ⎢ 0 1 0 ⎥, ⎢sin(γ) cos(γ) 0⎥⎟\n", "⎜⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎟\n", "⎝⎣0 sin(α) cos(α) ⎦ ⎣-sin(β) 0 cos(β)⎦ ⎣ 0 0 1⎦⎠" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RX = sym.Matrix([[1,0,0],[0,sym.cos(a),-sym.sin(a)],[0,sym.sin(a),sym.cos(a)]])\n", "RY = sym.Matrix([[sym.cos(b),0,sym.sin(b)],[0,1,0],[-sym.sin(b),0,sym.cos(b)]])\n", "RZ = sym.Matrix([[sym.cos(g),-sym.sin(g),0],[sym.sin(g),sym.cos(g),0],[0,0,1]])\n", "RX,RY,RZ" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left[\\begin{matrix}\\cos{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )} & \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )} - \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\alpha \\right )} & \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\gamma \\right )} + \\sin{\\left (\\beta \\right )} \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\gamma \\right )}\\\\\\sin{\\left (\\gamma \\right )} \\cos{\\left (\\beta \\right )} & \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\beta \\right )} \\sin{\\left (\\gamma \\right )} + \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\gamma \\right )} & - \\sin{\\left (\\alpha \\right )} \\cos{\\left (\\gamma \\right )} + \\sin{\\left (\\beta \\right )} \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\alpha \\right )}\\\\- \\sin{\\left (\\beta \\right )} & \\sin{\\left (\\alpha \\right )} \\cos{\\left (\\beta \\right )} & \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\beta \\right )}\\end{matrix}\\right]$$" ], "text/plain": [ "⎡cos(β)⋅cos(γ) sin(α)⋅sin(β)⋅cos(γ) - sin(γ)⋅cos(α) sin(α)⋅sin(γ) + sin(β)⋅c\n", "⎢ \n", "⎢sin(γ)⋅cos(β) sin(α)⋅sin(β)⋅sin(γ) + cos(α)⋅cos(γ) -sin(α)⋅cos(γ) + sin(β)⋅\n", "⎢ \n", "⎣ -sin(β) sin(α)⋅cos(β) cos(α)⋅cos(β\n", "\n", "os(α)⋅cos(γ) ⎤\n", " ⎥\n", "sin(γ)⋅cos(α)⎥\n", " ⎥\n", ") ⎦" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R = RZ@RY@RX\n", "R" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "mm = np.array([2.71, 10.22, 26.52])\n", "lm = np.array([2.92, 10.10, 18.85])\n", "fh = np.array([5.05, 41.90, 15.41])\n", "mc = np.array([8.29, 41.88, 26.52])\n", "ajc = (mm + lm)/2\n", "kjc = (fh + mc)/2" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [], "source": [ "i = np.array([1,0,0])\n", "j = np.array([0,1,0])\n", "k = np.array([0,0,1])\n", "v1 = kjc - ajc\n", "v1 = v1 / np.sqrt(v1[0]**2+v1[1]**2+v1[2]**2)\n", "v2 = (mm-lm) - ((mm-lm)@v1)*v1\n", "v2 = v2/ np.sqrt(v2[0]**2+v2[1]**2+v2[2]**2)\n", "v3 = k - (k@v1)*v1 - (k@v2)*v2\n", "v3 = v3/ np.sqrt(v3[0]**2+v3[1]**2+v3[2]**2)" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.12043275, 0.99126617, -0.05373394])" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v1" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.12043275, -0.02238689, 0.99246903],\n", " [ 0.99126617, 0.05682604, -0.11900497],\n", " [-0.05373394, 0.99813307, 0.02903508]])" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R = np.array([v1,v2,v3])\n", "RGlobal = R.T\n", "RGlobal" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAOBAMAAAAVqglQAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHaJmUSrVGYizbvd\n7zLJaKAlAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACG0lEQVQoFVWTPYgTQRSAv73Nz242P4taKok/\nCNoYDBxB9MwRRbTQIJaCi1xxWOhWtgna2BwX8FrJnha2sVARLQLCidp4hYgWmkKshDOed/EUWd/M\nLmxui4+dN9+8efN2FnbsP00E4G7t6QSKK81aje9ztVrVaN4ekttbPAO76jOxc9/96kODjB8B7Abt\nTgIrDMNNFoVezjdeUwjDKjxkd1c7fAnXIdvBDjSkgKkxpUGCVBc8zkKGBThGbvoQWO8wA+3w4KoI\nZh9joCEJ0u8pBwlMmR4im87wBNpuRhQcj+xIO5JcnvRf1+xoqJFonW24qGLpCptwxdcJSh7pceR4\napIbv+sx1Mh4uQ30VdDB+CUJKpk7B4aUG6R/RuL8rfMya4bLMWRgH5+dBGZHgtSxpVtrVce1N+hV\nKa5H4iN6Lbh5+V8rgnI5IaEEZRUyfmBLBWvSDF7Qa6gEseMMsDyOrGooFwqrkzisQlNBfAR5v9CN\njxCJqS0KXYpjDZm2uzjjBPBWJchLI6SJbf8anGxJE7ORkwkwN1BFzmvIS2kkCRJgyDooe/AcFt1P\nUoHr9LFG2ikEpEaqAp5piFrok99KQFGOLodvoC7SObmvvFEXKRVoJyXFBaSXsSoaxh+sDu1KArI6\nQVsW5n3jM0tYH+EVe4bakfu8INt/a8rPpLECl049noT9QQrgni9f4ujBIXZzzoWd+67HztL0LP8B\nLdLN6pflbmIAAAAASUVORK5CYII=\n", "text/latex": [ "$$88.3337705035$$" ], "text/plain": [ "88.3337705035" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "alpha = np.arctan2(RGlobal[2,1],RGlobal[2,2])*180/np.pi\n", "alpha" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAPBAMAAADe9tr1AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIom7VJlmdt1E7xDN\nqzIhoty3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACSUlEQVQoFaWSz2sTURSFv0zSyY/JJKOgiBtD\npFVcaKRudCEiuBFKByWLqoH5D6xC6bKhulTMRnDXSIuoXTgUSkUoCSiKBGlcWKVSGwoupdqGapvQ\n8c7LIMnaWQzn3XPf9867M7A/ewb/mR84CQu3RwJ14Op5VQ5eofxgA7Rj0jOf/QiB/R1CNsOO3/WG\nlxY25gWljDqnSnDZFScyC4toOxjvuYHxhMNWYHMHok3SRenSy2jViEOoqpTpkigbn9YEsFhowVd4\nTthmELOMaStbNk9D/BmVqgDCdSItLYdRVCpRxNyDCT9BVABPYa0xZckqXUX7GdgHX0uBzhXSdeLN\n+JarOUolW72AJVcA5/zuSo7oXmBnFMCYVHWb+G/WtgeoKAUxOfhfAml54LbXx0okJMGOLMXWLR8Q\nOn7dBxzJkNpE82qBgqlMDyC+abQdZiQ/yW3ZIPYCnSucKPkA2wcMPdotdRTcl2pXgljd8Fyuubzj\nYlMssTMBICGfqRNcrzMxG1yhz+4F5OEP3Cyhj6/LeMWONHxAyCLsA2V0kWbCItVUCsak2JUgKrx7\nAnCkasp0xJ7DB6RbHUA4h96qiLusFBGbfd2AS3LUikoASTlM7KHV1d3PJHLEfsk+vUxfVRJwWink\nJ73VBUjZRK0NmQH6YzaswGZaNjoMjxptuMurRryGPqpUaDJbKHYBDmX7v2BmjBmiNeMtgc2WHP0w\nf1aNdG78G/y4MiJ3E5X0PK9I4cUHh76V9jJLnicj7C805JUvBTZHvWUh/N/zF0rm5PkTQCzHAAAA\nAElFTkSuQmCC\n", "text/latex": [ "$$3.08021126924$$" ], "text/plain": [ "3.08021126924" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beta = np.arctan2(-RGlobal[2,0],np.sqrt(RGlobal[2,1]**2+RGlobal[2,2]**2))*180/np.pi\n", "beta" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAPBAMAAADe9tr1AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHaJmUSrVGYizbvd\n7zLJaKAlAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACdElEQVQoFaWTz2sTQRTHP9tNNrv5ubSexJJq\ni1Avhkak+KNGUitUxCAehQYrpQhqTr1mwYsXMWIPemp6EAVBevAHUpVAoaK9pAcpKsiC4rVE7Q9b\n6/pmNv+BAzPz3vvMfnnz5i109p6Cu/kXqLFrcIj0YjGfZ/rMG0KGOTBEfG/6NEbxhk9IyPeKyTeZ\nBayKU6Dqic1D9tTsIAjWjTInSpphPGCUVBDkiFeMd4RkdylSl/NLEPNw6h0bZBri203MeqQGZcsl\n1dSMRIF54of74RYcQROekpiDjs9gzmE0oh/IKsFEmVjLlKCfamD91YwxEcSSyXOouppEfyufe48h\nuu2antj6Cpky0Q1xzhNviUDIXksgFFiHsYomiaYKkhMBrm8OymosqEC2QPSH7JIdJFsh2/raV8K6\n2ecbv0SgR5PMkwEpvV1TAmYwC86xk2IykyP9U0KecsZymhlbHiskXGfNEbSa0yT7iFSFTpTA1MWd\nkmzH1TJT0AJZMWExZEbgctYV/5UjGWiBRbItIsvklIBd5uCy4JRa2lc4ICaRQpv9gdtK/dyd9hWE\nyJvZazFfCaRqpDecGglVPCliTPYlMelrM96LgHcF6QspYrWiSbKOvdmFElDpTmZaoYC8rd3CkIPE\nCtzXjKsqg0+SgTsvlquJ1ZQMpiYmdi6pDHiZmiOpXtZuIg2WllRVk/ZrxqrUQHpSMpFGGg1JWmrQ\nlFPSSNFZ7B7bo9pjbMFbun1iIuAs5EcammHljBWmsT+SrBhfQsI43XIZtmV+L8qLXhh+psvete+a\nfLwCcfkhGiHj0IiPU7zsYgzs99vEHJaDHA0mZf2/8Q8vudLvoq3yhAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$83.0728650264$$" ], "text/plain": [ "83.0728650264" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gamma = np.arctan2(RGlobal[1,0],RGlobal[0,0])*180/np.pi\n", "gamma" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 0.71, 0.7 ],\n", " [ 0. , 0.7 , -0.71],\n", " [-1. , 0. , 0. ]])" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R2 = np.array([[0, 0.71, 0.7],[0,0.7,-0.71],[-1,0,0]])\n", "R2" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABoAAAAOBAMAAADDIxFwAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJZjLNVN0i77ur\nRHZ72Yd1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQIHWNgEDIxZQABCJ3OIDEBxAPTLAsY\nmBOAHAjNfYCB/SOQB6H5DzDwfgfyILS8AgPvPyAPQs83YGD9DORB6PkKUB6YRlUJ1M0ONQVIc29g\nYAHbAKaBtjIlAE2B0u0MUgGM3xgYQDQDg/C7owwMPRAaABkSKGrnHpT1AAAAAElFTkSuQmCC\n", "text/latex": [ "$$0.0$$" ], "text/plain": [ "0.0" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "alpha = np.arctan2(R[2,1],R[2,2])*180/np.pi\n", "alpha" ] }, { "cell_type": "code", "execution_count": 127, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABoAAAAOBAMAAADDIxFwAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJZjLNVN0i77ur\nRHZ72Yd1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQIHWNgEDIxZQABCJ3OIDEBxAPTLAsY\nmBOAHAjNfYCB/SOQB6H5DzDwfgfyILS8AgPvPyAPQs83YGD9DORB6PkKUB6YRlUJ1M0ONQVIc29g\nYAHbAKaBtjIlAE2B0u0MUgGM3xgYQDQDg/C7owwMPRAaABkSKGrnHpT1AAAAAElFTkSuQmCC\n", "text/latex": [ "$$0.0$$" ], "text/plain": [ "0.0" ] }, "execution_count": 127, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gamma = np.arctan2(R[1,0],R[0,0])*180/np.pi\n", "gamma" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAACQAAAAOBAMAAAC1GaP7AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJqyLvZs27djJE\nVN3lLQH2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAt0lEQVQYGWNgEDJ2ZWAQMrdmAAEwzZjOEBbA\n0MsgFwASAtMsCQwsCuwJDMwNQBEIzd/AwPyB04GB9yNQCELLT2Dg+s3vwMDzFygEodmAqv7IKzDw\n/AIKQWjmDwwc3+MNGLg/A4WgdBfD5b/xClAhCM2+avNvVI1A5SwfgcbyQo0H0wwcDpwTGNjBjgDT\n7KkM+wOATmRqAKqH0FyNjO0MDG8ZxDYw/oDQDAxGSgcYGIRXeTMwPIHQAAacNpe4udDtAAAAAElF\nTkSuQmCC\n", "text/latex": [ "$$90.0$$" ], "text/plain": [ "90.0" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beta = np.arctan2(-R[2,0],np.sqrt(R[2,1]**2+R[2,2]**2))*180/np.pi\n", "beta" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left[\\begin{matrix}\\cos{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )} & \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\beta \\right )} - \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\beta \\right )} & \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\beta \\right )} + \\sin{\\left (\\beta \\right )} \\cos{\\left (\\alpha \\right )}\\\\\\sin{\\left (\\gamma \\right )} & \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\gamma \\right )} & - \\sin{\\left (\\alpha \\right )} \\cos{\\left (\\gamma \\right )}\\\\- \\sin{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )} & \\sin{\\left (\\alpha \\right )} \\cos{\\left (\\beta \\right )} + \\sin{\\left (\\beta \\right )} \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\alpha \\right )} & - \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\beta \\right )} \\sin{\\left (\\gamma \\right )} + \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\beta \\right )}\\end{matrix}\\right]$$" ], "text/plain": [ "⎡cos(β)⋅cos(γ) sin(α)⋅sin(β) - sin(γ)⋅cos(α)⋅cos(β) sin(α)⋅sin(γ)⋅cos(β) + \n", "⎢ \n", "⎢ sin(γ) cos(α)⋅cos(γ) -sin(α)⋅cos(\n", "⎢ \n", "⎣-sin(β)⋅cos(γ) sin(α)⋅cos(β) + sin(β)⋅sin(γ)⋅cos(α) -sin(α)⋅sin(β)⋅sin(γ) +\n", "\n", "sin(β)⋅cos(α) ⎤\n", " ⎥\n", "γ) ⎥\n", " ⎥\n", " cos(α)⋅cos(β)⎦" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R = RY@RZ@RX\n", "R" ] }, { "cell_type": "code", "execution_count": 140, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAPBAMAAADe9tr1AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMpndu3bvImbNiRBU\nq0Qb3U6NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACLUlEQVQoFaWSvWtTURjGf0luktt809HFawZB\nitLBRVG8SHFRNAg6OAUsLq0adBGXZlFx8goKImLTakUKQlAsWJBEd2lEKkUJDf4DDn62iY3POQlc\nd8/w5Dy/9z3Pve/JBRiFu/XRpnZaMs+fzmmzeKbA1cVjhkU8SC3MkSxOFBhAWxmW2QsX+5tqNEvm\nAS8qvOpEg6THSlUs5pN+yC5ek9rCwlBUjk/C/dWKdgPjlkkFHMbx4z3y44KnfRyPCT7DOSwMReUr\nd6BlDpsl47TIdHO/ZHIXaASQvOnz1TzgLKwXLAxFuPZvgEy+Ra7nlFXRMiOkRnyOGDNbV8AQDoYz\nZbeigLVrO0yHNQ2P3I/87YU98un9khsK2Nh2sqMth+pDaCtWXqKAo8zYujEzNSKbjXskmiQfjam/\nNOKnN6pM63xOd21hKNRMADjjRo2Z8UxAl+iUwJMOKRTQr7NTD4+1TJdgKJnCICBqbs2awQjjuFsi\niSneKIBvcEvHikIWhrKMArKB+YfBGl1iphcLcH8nKzi9dM0E7FNAlbinCQwMhXft9s/VREC0qwBr\nHB+3my3rDfJd9Wba7fXzpY/2Dd7quIWh6BSTRDVdYLbGuGWiQUR3UE74xMxk+t2uOyDiEa9YGIrK\nfDef5/VKemNgOMBSgU8sNd0qKyXBvE+2lp7m8uL8BywMReXH/TUuPRuDg0OzfOq9vp6i5EvxuFjq\nxJ8q87sLzPb7ukwLQ1HDf62/TD/Zp8Zq5ZoAAAAASUVORK5CYII=\n", "text/latex": [ "$$45.4063462333$$" ], "text/plain": [ "45.4063462333" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "alpha = np.arctan2(-R2[1,2],R2[1,1])*180/np.pi\n", "alpha" ] }, { "cell_type": "code", "execution_count": 141, "metadata": {}, "outputs": [], "source": [ "gamma = 0" ] }, { "cell_type": "code", "execution_count": 142, "metadata": {}, "outputs": [], "source": [ "beta = 90" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sympy as sym\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "sym.init_printing()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "a,b,g = sym.symbols('alpha, beta, gamma')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left ( \\left[\\begin{matrix}1 & 0 & 0\\\\0 & \\cos{\\left (\\alpha \\right )} & - \\sin{\\left (\\alpha \\right )}\\\\0 & \\sin{\\left (\\alpha \\right )} & \\cos{\\left (\\alpha \\right )}\\end{matrix}\\right], \\quad \\left[\\begin{matrix}\\cos{\\left (\\beta \\right )} & 0 & \\sin{\\left (\\beta \\right )}\\\\0 & 1 & 0\\\\- \\sin{\\left (\\beta \\right )} & 0 & \\cos{\\left (\\beta \\right )}\\end{matrix}\\right], \\quad \\left[\\begin{matrix}\\cos{\\left (\\gamma \\right )} & - \\sin{\\left (\\gamma \\right )} & 0\\\\\\sin{\\left (\\gamma \\right )} & \\cos{\\left (\\gamma \\right )} & 0\\\\0 & 0 & 1\\end{matrix}\\right]\\right )$$" ], "text/plain": [ "⎛⎡1 0 0 ⎤ ⎡cos(β) 0 sin(β)⎤ ⎡cos(γ) -sin(γ) 0⎤⎞\n", "⎜⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎟\n", "⎜⎢0 cos(α) -sin(α)⎥, ⎢ 0 1 0 ⎥, ⎢sin(γ) cos(γ) 0⎥⎟\n", "⎜⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎟\n", "⎝⎣0 sin(α) cos(α) ⎦ ⎣-sin(β) 0 cos(β)⎦ ⎣ 0 0 1⎦⎠" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RX = sym.Matrix([[1,0,0],[0,sym.cos(a), -sym.sin(a)],[0,sym.sin(a), sym.cos(a)]])\n", "RY = sym.Matrix([[sym.cos(b),0, sym.sin(b)],[0,1,0],[-sym.sin(b),0, sym.cos(b)]])\n", "RZ = sym.Matrix([[sym.cos(g), -sym.sin(g), 0],[sym.sin(g), sym.cos(g),0],[0,0,1]])\n", "RX,RY,RZ" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAM4AAABLCAMAAAAPvEidAAAAPFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo1xBWAAAAE3RSTlMA\nMquZdlQQQOkwRO/NZondIrtsRPdGkQAAAAlwSFlzAAAOxAAADsQBlSsOGwAABMNJREFUaAXtm9GW\nmyAQhlHUbqOglvd/18IACooMIOY0PclFVhFn5gMG4XdDGgGflnz0Z9YUhDSCdvLTfzQNYYqhFQqn\n+WySPXpWBWegnPFH2iTT8gGnH4cdNf1okgN1mJf0G5JrZlp2cYaWtqIEh40qPD4lB5lcMdeyiyOd\ndEU4K0yKfdG9cbJcy1VwBOC8RP25MddyDZxBUNXGL9HFmzr/arblGjiL4CrSRv/JD/r6jmzLdXCg\ndx7BybRcAyd7SFx3x+FKtuUaOEQnbP/YVJBuuQrOuqpWZU9M1JmWq+Dohx197DGabrkKDpnVImd8\nYtGWadnDoe0oppYd8jHhdOBybf4EDcm07OEkBP6PV/ni/Msd9O2db++8rQW+g+1tTV3g6Ns7BY32\ntlsq985yXCGx6mpV1IWHk6nRndt8gfW8V94W8jRjWHmIu/BwMjU6L2w4mc6xD4XbhqutetyFi5Or\n0Z1wGOzsD8U83MqHWqmniAsXJ1ejO4UQlHUHkEhPdQsLEBcuTq5Gd4xomY8lcD69gsVI4dKE9k+Y\nCwcHl03kVMGpkjrVpoqrKJuuZ53Njm4ba/Iy3SD4VowQwGVjcVlV4zbTSBu5M9zGK+bCwUE1umWU\nKM24kAa6fO3IADOZ7ZTVzNLLLFEGWW8BlZdZ3BSa3eIESvEsvZBF2CkGc+HhIBrdpOLq5but2aie\nzQven9i2U/t69Rnh8kpJB68jeourr8a/d4s6k1fIPGEfZ5gLBwcbbOa6Um913FLEncXa2ZYjox5f\nVAtUUn4BLFn9imCY5u0zmVTZLBoc6NpN/cZcKJxfP7/BIaL+bZJ6L3TcYpVJNAktuEsLxteon6V8\n5Ppd0TVOCHOzaHDA2BHn0sWfH9XaumUQ9e/cO3RRATNDB/KUTBqjvHMrir5yBttuMYijB9u1C2ew\nEUz9g9yR2UNGSLKXePWQNlbKMnlqBjq3YyxrKtgtBnEwFy4Opv4to8pILmc2UAgnTvSr1NVkj5mR\nKUxJjArSwGijOoVCI+tctlvUY0V/b4MNc+HhYBqdfHnaSRo5c8oHUCsT6MVZx+ABpAKzo4pzxiQ4\nNcsbm+Tn2AMl1mLTCtEO8N30qxihiXAXHk7AfFZRcAVy8SDPMrxXRlxUxUHWh3tQ5UeIi6o4xGaR\nE27pBsEx4R3GXdTFCeytAu698HJP4i7q4pDozjc38nD9qIvKOOEI3lf6xXlfW+d7+vZOfpu97466\nvROdde5BpZn2cFJlwzJJ7xZO4HETEiQ9nFTZsEzSu4UTVws30y7OXdkQWU9tPgsOUk27OHrDVP5P\ng8HVbh3VMNW0i5MsG5ZJegWdYm+52GScBUkHB1NypKigRcJCSc/GFvpbS5B0cFDZ8KakF8IwZdUE\nSQ8HkQ1vSnoRnGqCpIODD7Z7kt41zlnyKhUkHRz8nwbvSXrXOPUESRcHkQ3JTUnvGufcO6WCpIuD\nyYY3Jb1rHFJNkHRxMNnwpqQXwakmSHo4iGx4U9KL4JBagqSHE3OYcC24Erl4oCeYc6ukmq6Jk7pO\ndONMPE41XRPnSdUwINeFBMmqOIE9ViCMxA7xqyWarorzpGpYsLn2G+QTz3Tv/Fc/gx3UD0i7Tr+/\n/cQ+gZjhZ7BdR/4CrRhMdwDv9NQAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left[\\begin{matrix}1 & 0 & 0\\\\0 & \\cos{\\left (\\alpha \\right )} & - \\sin{\\left (\\alpha \\right )}\\\\0 & \\sin{\\left (\\alpha \\right )} & \\cos{\\left (\\alpha \\right )}\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 0 0 ⎤\n", "⎢ ⎥\n", "⎢0 cos(α) -sin(α)⎥\n", "⎢ ⎥\n", "⎣0 sin(α) cos(α) ⎦" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left[\\begin{matrix}\\cos{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )} & \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )} - \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\alpha \\right )} & \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\gamma \\right )} + \\sin{\\left (\\beta \\right )} \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\gamma \\right )}\\\\\\sin{\\left (\\gamma \\right )} \\cos{\\left (\\beta \\right )} & \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\beta \\right )} \\sin{\\left (\\gamma \\right )} + \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\gamma \\right )} & - \\sin{\\left (\\alpha \\right )} \\cos{\\left (\\gamma \\right )} + \\sin{\\left (\\beta \\right )} \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\alpha \\right )}\\\\- \\sin{\\left (\\beta \\right )} & \\sin{\\left (\\alpha \\right )} \\cos{\\left (\\beta \\right )} & \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\beta \\right )}\\end{matrix}\\right]$$" ], "text/plain": [ "⎡cos(β)⋅cos(γ) sin(α)⋅sin(β)⋅cos(γ) - sin(γ)⋅cos(α) sin(α)⋅sin(γ) + sin(β)⋅c\n", "⎢ \n", "⎢sin(γ)⋅cos(β) sin(α)⋅sin(β)⋅sin(γ) + cos(α)⋅cos(γ) -sin(α)⋅cos(γ) + sin(β)⋅\n", "⎢ \n", "⎣ -sin(β) sin(α)⋅cos(β) cos(α)⋅cos(β\n", "\n", "os(α)⋅cos(γ) ⎤\n", " ⎥\n", "sin(γ)⋅cos(α)⎥\n", " ⎥\n", ") ⎦" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RXYZ = RZ*RY*RX\n", "RXYZ" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left[\\begin{matrix}- \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\beta \\right )} \\sin{\\left (\\gamma \\right )} + \\cos{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )} & - \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\alpha \\right )} & \\sin{\\left (\\alpha \\right )} \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\beta \\right )} + \\sin{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )}\\\\\\sin{\\left (\\alpha \\right )} \\sin{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )} + \\sin{\\left (\\gamma \\right )} \\cos{\\left (\\beta \\right )} & \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\gamma \\right )} & - \\sin{\\left (\\alpha \\right )} \\cos{\\left (\\beta \\right )} \\cos{\\left (\\gamma \\right )} + \\sin{\\left (\\beta \\right )} \\sin{\\left (\\gamma \\right )}\\\\- \\sin{\\left (\\beta \\right )} \\cos{\\left (\\alpha \\right )} & \\sin{\\left (\\alpha \\right )} & \\cos{\\left (\\alpha \\right )} \\cos{\\left (\\beta \\right )}\\end{matrix}\\right]$$" ], "text/plain": [ "⎡-sin(α)⋅sin(β)⋅sin(γ) + cos(β)⋅cos(γ) -sin(γ)⋅cos(α) sin(α)⋅sin(γ)⋅cos(β) +\n", "⎢ \n", "⎢sin(α)⋅sin(β)⋅cos(γ) + sin(γ)⋅cos(β) cos(α)⋅cos(γ) -sin(α)⋅cos(β)⋅cos(γ) \n", "⎢ \n", "⎣ -sin(β)⋅cos(α) sin(α) cos(α)⋅cos\n", "\n", " sin(β)⋅cos(γ) ⎤\n", " ⎥\n", "+ sin(β)⋅sin(γ)⎥\n", " ⎥\n", "(β) ⎦" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RZXY = RZ*RX*RY\n", "RZXY" ] }, { "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.3" } }, "nbformat": 4, "nbformat_minor": 2 }