{ "cells": [ { "cell_type": "markdown", "id": "ba32220e", "metadata": {}, "source": [ "# Rotations\n", "\n", "This gives an introduction to REBOUND's built-in rotations framework, with a focus on rotations typically encountered in celestial mechanics.\n", "\n", "REBOUND has a general `Rotation` class. This is implemented used quaternions. However, you don't need to understand anything about quaternions in order to use it. Let's create a rotation that rotates counterclockwise by 45 degrees around the z axis [0,0,1]" ] }, { "cell_type": "code", "execution_count": 1, "id": "e12cb8f6", "metadata": {}, "outputs": [], "source": [ "import rebound\n", "import numpy as np\n", "\n", "rot = rebound.Rotation(angle=np.radians(45), axis=[0,0,1])" ] }, { "cell_type": "markdown", "id": "178b4821", "metadata": {}, "source": [ "Alternatively, you can create the same rotation with the shorthand:" ] }, { "cell_type": "code", "execution_count": 2, "id": "127d5b0f", "metadata": {}, "outputs": [], "source": [ "rot = rebound.Rotation(angle=np.radians(45), axis=\"z\")" ] }, { "cell_type": "markdown", "id": "e34d9a17", "metadata": {}, "source": [ "A rotation can act on various objects. For example, we can act on three vector:" ] }, { "cell_type": "code", "execution_count": 3, "id": "b060b7d4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0.0, 1.4142135623730951, 1.0]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = rot*[1,1,1]\n", "result" ] }, { "cell_type": "markdown", "id": "9b8ebb1e", "metadata": {}, "source": [ "We can also get the inverse of any rotation object and undo the previous rotation:" ] }, { "cell_type": "code", "execution_count": 4, "id": "c35dd4cd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1.0, 1.0, 1.0]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rot.inverse()*result" ] }, { "cell_type": "markdown", "id": "63020a64", "metadata": {}, "source": [ "We can chain rotations. Here we first rotate around z axis by 90 degrees, then around the x axis by 90 degrees. Note that the order matters, just like when multiplying matricies." ] }, { "cell_type": "code", "execution_count": 5, "id": "e9308e6a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-0.9999999999999996, -0.9999999999999998, 1.0000000000000004]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r1 = rebound.Rotation(angle=np.radians(90), axis=\"z\")\n", "r2 = rebound.Rotation(angle=np.radians(90), axis=\"x\")\n", "r2*r1*[1,1,1]" ] }, { "cell_type": "markdown", "id": "3f09f64f", "metadata": {}, "source": [ "# Orbits in three dimensions\n", "The `Rotation` class offers constructors that are useful when working with orbital elements. \n", "Suppose we create a simulation with a planet on an inclined orbit, and one in the xy plane:" ] }, { "cell_type": "code", "execution_count": 6, "id": "b27861bd", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 500x800 with 3 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Omega = np.radians(10) # Ascending node\n", "inc = np.radians(20) # Inclination\n", "omega = np.radians(30) # Longitude of periastron\n", "sim = rebound.Simulation()\n", "sim.add(m=1) # central object\n", "sim.add(a=1, e=0.01, Omega=Omega, inc=inc, omega=omega) # inclined orbit\n", "sim.add(a=1, e=0.01) # orbit in the xy plane, periastron on the x axis\n", "rebound.OrbitPlotSet(sim);" ] }, { "cell_type": "markdown", "id": "d24c647e", "metadata": {}, "source": [ "We can create a rotation that moves the orbit in the xy plane into the orbital plane defined by Omega, inc, and omega:" ] }, { "cell_type": "code", "execution_count": 7, "id": "0a11f675", "metadata": {}, "outputs": [], "source": [ "rot = rebound.Rotation.orbit(Omega=Omega, inc=inc, omega=omega)" ] }, { "cell_type": "markdown", "id": "2f033e3b", "metadata": {}, "source": [ "After applying this rotation to the second planet, the two planets are on identical inclined orbits (the plot only shows one planet because the particles are at the same location):" ] }, { "cell_type": "code", "execution_count": 8, "id": "7d686778", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 500x800 with 3 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sim.particles[2].rotate(rot)\n", "rebound.OrbitPlotSet(sim);" ] }, { "cell_type": "markdown", "id": "f553db19", "metadata": {}, "source": [ "# Rotating to a reference frame align with a planet's orbit\n", "\n", "Let's construct a simplified Solar System to demonstrate a different use case of this constructor." ] }, { "cell_type": "code", "execution_count": 9, "id": "f9d937a2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Searching NASA Horizons for 'Sun'... \n", "Found: Sun (10) \n", "Searching NASA Horizons for 'Jupiter'... \n", "Found: Jupiter Barycenter (5) (chosen from query 'Jupiter')\n", "Searching NASA Horizons for 'Saturn'... \n", "Found: Saturn Barycenter (6) (chosen from query 'Saturn')\n" ] } ], "source": [ "sim = rebound.Simulation()\n", "date = \"2023-01-01 00:00\"\n", "sim.add('Sun')\n", "sim.add('Jupiter')\n", "sim.add('Saturn', hash='Saturn')\n", "sim.move_to_com()\n", "ps = sim.particles" ] }, { "cell_type": "markdown", "id": "5f99aae1", "metadata": {}, "source": [ "The reference axes used in the above simulation uses the ecliptic as a reference plane (this is what the NASA Horions query returns by default).\n", "\n", "Suppose we want to construct a rotation from these reference axes to reference axes aligned with Saturn's orbit (where the new z direction is along the orbit normal, and x direction is toward pericenter). This is the inverse of what the `to_orbital` constructor returns:" ] }, { "cell_type": "code", "execution_count": 10, "id": "71dd8e16", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-5.755225420998638, -7.967620173574598, -5.440092820663267e-15]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rot = rebound.Rotation.orbit(Omega=ps['Saturn'].Omega, inc=ps['Saturn'].inc, omega=ps['Saturn'].omega)\n", "\n", "rot.inverse() * ps['Saturn'].xyz" ] }, { "cell_type": "markdown", "id": "bedf73d8", "metadata": {}, "source": [ "When we act our rotation on Saturn's xyz position (in our original coordinate system, in AU), we see we get a vector with vanishing z component (good since Saturn should be in its own orbital plane!), and that Saturn is a bit past apocenter (both x and y are negative).\n", "\n", "If we want to get the direction toward Saturn's pericenter in our ecliptic coordinate system, we can use" ] }, { "cell_type": "code", "execution_count": 11, "id": "89779f01", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-0.03324223170028384, 0.9993183366324941, -0.016056652878168994]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rot*[1,0,0]" ] }, { "cell_type": "markdown", "id": "09739283", "metadata": {}, "source": [ "# Invariable plane" ] }, { "cell_type": "markdown", "id": "4d2be7c4", "metadata": {}, "source": [ "Now say we realize that the ecliptic plane should have very little to do with the dynamics of Saturn and Jupiter, and we want to rotate into the invariable plane, where the z direction points along the total angular momentum. We can do:" ] }, { "cell_type": "code", "execution_count": 12, "id": "0c3c39ef", "metadata": {}, "outputs": [], "source": [ "rot = rebound.Rotation.to_new_axes(newz=sim.angular_momentum())" ] }, { "cell_type": "markdown", "id": "88919802", "metadata": {}, "source": [ "We could also have passed a `newx` vector perpendicular to newz in order to specify the new x direction. If we don't, it defaults sensibly to the line of nodes at the intersection between our reference plane (here the ecliptic) and our new reference plane (perpendicular to newz, here the invariable plane)--specifically the $z \\times newz$ direction.\n", "\n", "We can now, e.g., get Saturn's position (or any other vector) in our new coordinate system:" ] }, { "cell_type": "code", "execution_count": 13, "id": "bf693526", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-7.549431805655818, -6.293586822293665, -0.04934773414991059]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rot*ps['Saturn'].xyz" ] }, { "cell_type": "markdown", "id": "f020014f", "metadata": {}, "source": [ "However, we might also want to rotate our entire Simulation into this new coordinate system, so the z axis is always a physically meaningful direction. We can do that simply with:" ] }, { "cell_type": "code", "execution_count": 14, "id": "ce9d96b3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[8.371971695560277e-05, 2.4357882968012634e-05, 0.0030550235653400053]\n", "[0.0, -3.3881317890172014e-20, 0.0030562675410134763]\n" ] } ], "source": [ "print(sim.angular_momentum())\n", "sim.rotate(rot)\n", "print(sim.angular_momentum())" ] }, { "cell_type": "markdown", "id": "97edf2b3", "metadata": {}, "source": [ "We see that before rotating our Simulation, the angular momentum was almost, but not quite along the z direction (the ecliptic is of course close to the invariable plane!), but after the rotation, the x and y components are at the level of the machine precision." ] }, { "cell_type": "markdown", "id": "1a30caee", "metadata": {}, "source": [ "# Technical Detail: Copies vs in-place rotations\n", "\n", "There are two ways to apply a rotation to a `Particle`, a `Vec3D`, or a `Simulation`. \n", "\n", "We can act (using the multiply operator `*`) a `Rotation` on ab object. As a general rule, `Rotation` * `object` always returns a copy. For example:" ] }, { "cell_type": "code", "execution_count": 15, "id": "11d99b73", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(8.148225160959612, -7.549431805655818)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ecliptic_saturn = rot.inverse() * sim.particles['Saturn']\n", "ecliptic_saturn.x, sim.particles['Saturn'].x" ] }, { "cell_type": "markdown", "id": "2ac2f7a9", "metadata": {}, "source": [ "In the above case, the `ecliptic_saturn` particle is a copy. The original Saturn particle in the Simulation is unchanged. \n", "\n", "On the other hand, if we call the `rotate` method on a REBOUND object such as `Vec3d`, `Particle`, or `Simulation`. then the object is updated in-place. For example, if we wanted to update Saturn with a rotated position (and velocity) in our simulation, we could do:" ] }, { "cell_type": "code", "execution_count": 16, "id": "e9a1ccd1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(8.148225160959612, 8.148225160959612)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sim.particles['Saturn'].rotate(rot.inverse())\n", "ecliptic_saturn.x, sim.particles['Saturn'].x" ] }, { "cell_type": "markdown", "id": "2ac88909", "metadata": {}, "source": [ "Now we see that the two yield the same x value, since we've actually updated the positions of the particle in our simulation. \n", "\n", "In most use cases, we probably want to rotate a Simulation in place with `sim.rotate(rot)`. Note that if we do `rot*sim` we get back a shallow copy that doesn't keep any of our function pointers (see `sim.copy()`)." ] }, { "cell_type": "code", "execution_count": null, "id": "8f57cb68", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.6" } }, "nbformat": 4, "nbformat_minor": 5 }