From b0fecde6396a77d1e8efb663275cd10daa0bf4e9 Mon Sep 17 00:00:00 2001 From: Kai Vogelgesang Date: Wed, 27 Oct 2021 13:57:59 +0200 Subject: [PATCH] Add sphere movement notebook --- sphere_movement/.gitignore | 3 ++ sphere_movement/slerp.ipynb | 100 ++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 sphere_movement/.gitignore create mode 100644 sphere_movement/slerp.ipynb diff --git a/sphere_movement/.gitignore b/sphere_movement/.gitignore new file mode 100644 index 0000000..ec68a11 --- /dev/null +++ b/sphere_movement/.gitignore @@ -0,0 +1,3 @@ +venv +.vscode +.ipynb_checkpoints \ No newline at end of file diff --git a/sphere_movement/slerp.ipynb b/sphere_movement/slerp.ipynb new file mode 100644 index 0000000..705d212 --- /dev/null +++ b/sphere_movement/slerp.ipynb @@ -0,0 +1,100 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def to_quaternion(pan, tilt):\n", + " pass\n", + "\n", + "def to_pan_tilt(q):\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "image/svg+xml": "\n\n\n \n \n \n \n 2021-10-26T14:09:30.821231\n image/svg+xml\n \n \n Matplotlib v3.4.3, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "\n", + "fig, ax = plt.subplots()\n", + "\n", + "ax.set_xlim((-3/2 * np.pi, 3/2 * np.pi))\n", + "ax.set_xlabel(\"Pan (rad)\")\n", + "pan_dmx = ax.twiny()\n", + "pan_dmx.set_xlim((0, 255))\n", + "pan_dmx.set_xlabel(\"Pan (DMX)\")\n", + "\n", + "ax.set_ylim((-1/2 * np.pi, 1/2 * np.pi))\n", + "ax.set_ylabel(\"Tilt (rad)\")\n", + "tilt_dmx = ax.twinx()\n", + "tilt_dmx.set_ylim((0, 255))\n", + "tilt_dmx.set_ylabel(\"Tilt (DMX)\")\n", + "\n", + "\n", + "ax.plot([-4, -4, -2, -2], [1,-1,-1,1])" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "8949cd447f4051406d72dfa55357e47dbefb618694e663c2df1a04d5092ff1c9" + }, + "kernelspec": { + "display_name": "Python 3.9.5 64-bit ('venv': venv)", + "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.9.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}