{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sympy as sm\n", "import sympy.physics.mechanics as me" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Enable nicer printing for time derivatives, etc." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "me.init_vprinting()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Define variables and constants\n", "\n", "Reference Figure 2.6.1 in the book." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The angular velocity of B in A and the distance between P1 and P2 are fixed." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAD0AAAAVCAYAAAD1neayAAAABHNCSVQICAgIfAhkiAAAArZJREFUWIXtmD1oU1EUx3+JX02rtlKhgiAOJTaThtaiosWh1kUpIujk9yAFRXCqDurkIBYFtw6iTiqWKl3EQfxYlFYUBy0oUh2sVPELgxVq43DOa15e78u7t0kIQv8QTt7/nXvu/9x37rkvgVlM4RowBtRUWkgRaAaywCEb5xZgEjheTkVF4j6S0KYIv35gFFgYFfAe8B1IFC2tPIgh+v4SnUwrsjgnCzklkafcWwp1ZUISSeSVpf9r4D0wxyPiAYeDyEreCAlwWCfsiZjonfo1WApzQbPaZ5b+14EVQHuYwxAwgbmBNSBlZbNHbiJJ77AU5oIejX3M0r9d/c97hP9J1wBrkHLIGAafAmqBs8CviIlG1DZZCnNBi9ohS/9BtW0e4U96OVL3o4aBS5HW/xO4bDGRt2hLLIXZIg6kkSb2wnLMD2AcKfGpIB7q1X4zDNwFLADukF8Frcie2RDwr1b7x1KYLZLAImAYczWG4Svy4ID8pH+rrTIM2qz2YYDfBuxmenKNat84CLOBa2l7SJDLLy/pMbX1TMcqtcMBfqvaDz4uDmzU78FFKhZe0radG0RPHbn88hDTG58N90aQDrjaxzUplwUW+/gO5Z44CLPFY4293mFMSsf0hTncUofGAD+o/B69jgEDyIpngbXKVyMNJgt0GuJf0Xv7HUR7iCOnxgRub4sHdM4jHjE34NAH7ETK9q2P70dK6yJyrKX1egvwALiKLEInshV6kaZnEo4Kd0UKOVYzwKUQny9Ad4DrQLq9SQ8A84FPwNMAPw+4gJR/BngErNN7+5DXvHHgJdCFVIIJz5FjbyZH2V5y2ynsczcwphZpYLejgp/QAOkZCCuEOmTFz5U4biEcxe7XGFXIkxsosYDtSDUsK3HcMCSAj0ifskIbcJr/+0+EFHAGWFlZGbOoHP4BxIWREkq/IQ4AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle \\left( \\omega, \\ L\\right)$" ], "text/plain": [ "(ω, L)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w, L = sm.symbols(\"omega, L\")\n", "w, L" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "q1, q2, q3 = me.dynamicsymbols('q1:4')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "t = me.dynamicsymbols._t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Setting orientations of reference frames\n", "\n", "Setup the orientations as two simple rotations." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "A = me.ReferenceFrame('A')\n", "B = me.ReferenceFrame('B')\n", "E = me.ReferenceFrame('E')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "B.orient(A, 'Axis', (w*t, A.y))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "E.orient(B, 'Axis', (q3, B.z))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate the angular velocit of E in A." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\omega \\operatorname{sin}\\left(q_{3}\\right)\\mathbf{\\hat{e}_x} + \\omega \\operatorname{cos}\\left(q_{3}\\right)\\mathbf{\\hat{e}_y} + \\dot{q}_{3}\\mathbf{\\hat{e}_z}$" ], "text/plain": [ "ω⋅sin(q₃) e_x + ω⋅cos(q₃) e_y + q₃̇ e_z" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E.ang_vel_in(A).express(E)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Setting positions of points\n", "\n", "Now, create the three point of interest." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "O = me.Point('O')\n", "P1 = me.Point('P1')\n", "P2 = me.Point('P2')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The vector $\\mathbf{p}_1$ connects O to P1." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "p1 = q1*B.x + q2*B.y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we need to define the position relationships between the various points. You do this by using the `set_pos()` method of `Point`." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mP1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_pos\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0motherpoint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m\n", "Used to set the position of this point w.r.t. another point.\n", "\n", "Parameters\n", "==========\n", "\n", "otherpoint : Point\n", " The other point which this point's location is defined relative to\n", "value : Vector\n", " The vector which defines the location of this point\n", "\n", "Examples\n", "========\n", "\n", ">>> from sympy.physics.vector import Point, ReferenceFrame\n", ">>> N = ReferenceFrame('N')\n", ">>> p1 = Point('p1')\n", ">>> p2 = Point('p2')\n", ">>> p1.set_pos(p2, 10 * N.x)\n", ">>> p1.pos_from(p2)\n", "10*N.x\n", "\u001b[0;31mFile:\u001b[0m /opt/conda/lib/python3.6/site-packages/sympy/physics/vector/point.py\n", "\u001b[0;31mType:\u001b[0m method\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "P1.set_pos?" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "P1.set_pos(O, p1)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHcAAAAgCAYAAAAosufFAAAABHNCSVQICAgIfAhkiAAABBJJREFUaIHtml2IVVUUx393kj50hLSXISkkfMjBB0NMQbCjBEJhoviQD9JVRCPIhxoRXxo/nsoEKRUsJmeCkARrcLAQokFB8QO1D1KhhiL8mGlQcRC1aDw9rHW65x7vvnf2Pmc69077D4dz9lp7rfPf//1x9znnFsgPzwFL9PoAcCFHLvWGhtZmItAH3AdC4CfgsVwZ1Q8aXptPEeLrgY16vTtXRvWDhtbmVYRwe8z2ntoW58KofuC18fDw8PBIgyLymxEdU/MkU0coMsq6NGWd0KN+4Dt3DOP/1LlFZPkL8qXx36FS545DHqC/B+4B/cAuYDxwi/SvwgrAOs1/F/gD2Ac8mTLvaKPhdXkYOIKM8DPIA/QnwB3gK7V/ZpmzSPnGoSdRjo7fgSlpGzACHoFD7JjQ5SNN2JawvxC72duWOYs8SLgH2AIcS9i/cORtwyNwiG14XWZroiMGf5/6F1rmLVJOtCPmawJ6Y777QItlflsegWXcmNClSxPNM/hPq3+SlucjI+2q2pcb4oqUN2J+wr864X/JiX05fuPBWVHt6KySy1YXgE3I8j0EDCI6zUjEFRllXcbFrhcB14HjhrpTgF+Bm1qegPz47wMOWtxzoEZ5EumxE3g8YZuJfCPtQjo/ju+q5LLVBWR12IN0cAHYCnwDtAI3DHlGTZdHkdFxzuCfoX5TJ2Y5c18GXomVX9R6Cyl941xarTE1eAQWMWl1idAMDFP+ZSfiY6MLwH4tn0zUP6H2/ZEhehQa1uMJA7l39GxqpA1ei103AStj5RA4CxwC9qrtY+T3pgOZBR3AlxnwGAmy0mUi0lbTrIWR6QKyIgDMQVYCkNVjrl53VUp+UZMsiNkKSANqrfs2MzfaFW4Gjibs3bG48cAltffr+WdkFrgg4hFYxqXRJcLnwHngoQp8bHUB+EHt72v5TS1fSdzjX6zSCneQ2bFdCf2C/NUjxLxjs+ncbys0KgQuA08lYmcBf6t/GBmtroh4BJZxaXRB618Dphn4uOjyuvoGkH1TNBjerdaQt5DNwZ963o5sTAaRXbEJNp37DDLSfkTe9Awiu9VKD+pLErErqpGvgYhH4BDrqssOpANaK/giPi66NCNvxUJgLTLwQ2C6TaNARk0IHK5Sp1rnuqIFaWCIzJQQ2ZEmR3FeqKXLB5g7Ngvs0vvf1vNplyTRznVbwt6MPF7MVH+bXj/tSDaOAvA1JdKPAKe03Et9fPAw6QKy6RlCdvgtscN1v1AJrZTP/DdckrRr8LKEPUgkj45OJ6rlWK+57lFaap5FXqiHwIYM7pEWJl3A/LJkc8YceinpNNklQbcmmJodpzGBetDlQ+VwIEcOHhljLTK4/kJe7DyfLx2PLNFJ6TFpTb5UPDw8PDw8PP4BTNHNPNt0AUoAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle q_{1}\\mathbf{\\hat{b}_x} + q_{2}\\mathbf{\\hat{b}_y}$" ], "text/plain": [ "q₁ b_x + q₂ b_y" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P1.pos_from(O)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You do not have to define all points relative to O explicitly, you can define the relative positions between points, as it usually simpler." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "P2.set_pos(P1, L*E.x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once these intermediate definitions are in place, you can use `pos_from()` to calculate any vectors you need." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mP2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpos_from\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0motherpoint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m\n", "Returns a Vector distance between this Point and the other Point.\n", "\n", "Parameters\n", "==========\n", "\n", "otherpoint : Point\n", " The otherpoint we are locating this one relative to\n", "\n", "Examples\n", "========\n", "\n", ">>> from sympy.physics.vector import Point, ReferenceFrame\n", ">>> N = ReferenceFrame('N')\n", ">>> p1 = Point('p1')\n", ">>> p2 = Point('p2')\n", ">>> p1.set_pos(p2, 10 * N.x)\n", ">>> p1.pos_from(p2)\n", "10*N.x\n", "\u001b[0;31mFile:\u001b[0m /opt/conda/lib/python3.6/site-packages/sympy/physics/vector/point.py\n", "\u001b[0;31mType:\u001b[0m method\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "P2.pos_from?" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAALIAAAAgCAYAAAC2JCIgAAAABHNCSVQICAgIfAhkiAAABUlJREFUeJztmnuIFVUcxz930x7rRm0QbC2GRJFt/mFpSYS2SVAYZYlE/RNThEWgQRkVUWsFUZogZRFRuQYhLRRGWAnl9qaHvdOetm5UaktFi60W5vTH7zfM7NmZnefdmXs7HzjcO+f5vd97zplzzkwNy0RwOrBQv/cB20vUUjWsNw3CkcAO4CDgAtuAI0pVVB2sNw3E08iftAy4Vb8/Uqqi6mC9aRCuQP6cnkDcSo27uBRF1aFQb2oFiQK71rE0AXatY2kK7FrH0vDYdaCPg/xuL0wrU0yFcCjBly3a2NyJaKzJcLAdOQyHOvvSYlzXgDOQte4nRTdmsdQLsyOfDBwFfAPsnXg5qXCQ0d1droxK4vA/88bsyLP086OE5ecgG70fgH3AX8DnwD3AMUUIrDOTkA3qZ8B+YDewFmgF/iT/EWINuE7r3wf8CqwDjs9Zb71peF9WIyP5xgR578I/bgsLg8ApRQkLwSHfrHMosFnr+BDZoD4FjAAvafwzGTV54UXCvfkR6MyoO42O7gxlm8KXN7TCc2LyLTYEvI2cWqwEdgXitwOHFCEsBId8HflxLb/ciD8XX//NGTWZf9rdwJtG/PMZdafR0Z2hbMP70gIMAweAKTF5twYa3sToJ4SnGsIuzSssAofsf9aZWnZzRPoOTZ+fUZMXngyktQD9gbSDQEfK+tPq6E5Zril8ma4VfRmTr5XxlxRmeDCPKGVnivZcoDemvvWMf+f5QNPb9XoeMoP8ovGLI8o5ho55Rvo1RvqCGJ1J2Elx3qT1BeB2ZAkyDAwhPs0wyjnU2ZdJge+z9XNrTJl20r2jcWwqReGsAY424mYi73asR/7MIJ/G1HcB8BvwTkR6JzAA/KHXU5CNyTrguUSKhT0x1+3kp0hv0voCMus/inTmGrLRfxXoAn6PqKeuvqxBRsPSmHzmjPwasp6KCguASwL5z9d65gfquSyDXodst8/DtdzHEekzND2qwxY5I19EdbzJ64tHG/Avo5/qenrS+AKwQa/fM/K/q/EbwgS8pYlnxwgFOZ7zGt2m4k0mA4vwR9djmn8AWQMN6PUTCdoLwyFbR56M7AMGI9L7tN47ItLTdOSka8EqeJPXF4/jGLs88fSk9WVuIL5L4zrxB/mFZuMtyAOQAyR7a+1yQ9ggMqPfBtwHvICcN7r4jyNbga81brd+fkf4IEiCQ/bN3lda9rxAXA05Uoxbp6XpyC6yZlyBfyLkhY2BclXxJo8vHs8iT4WDp1WenrS+gDyXcPH3Wkv1+mdCTsRO08S9yCwQFu43yvSQbNM3LVBmFjJYXOT2MyfCjCQ4ZO/IV2vZEWR2WIWY/z1yh3GJ3jmn6chbCPfkJ2CqUbYK3uTxBc2/CzgpQk8WX67XtD3Ins7r+A+ECbgqouJgeCWk3Gz9wd/qjx9BnvK9DtyJbDqCLDTqvDJMTEIcsndkgJuQW/jf+rkK2TQNIacTUaTpyCciM8gXyBOyIeTUIOzQvyreZPVlNdLZukLSPD1ZfGnDv7svQQa5ixzzlkIHIthFRrmL7H7NEVgmUxFdm8bJM15HzkrVvYnz5SGiO3ERrMVfMbjIMWAp1ICXAyIOA97X637GvvNRFt4Jwr1GfBtyd5mp6cv1+wkFtNkI3kT5AnL0NoyctHQEQtb1fRhdjJ7Rbyiw7lQsUwH78W8J05EXRlzglpJ0mfQgehYZ8d2EL7d6C2izEbyJ8gWil6IrCtbQj+9TI7yQViobGbtBtVTDl4dVQ1+JGiyWzCxBBtI/yCnZWeXKsViy0Yt/NHdtuVIsFovFYrFYLJbG4T8oIanhPXRsvwAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle L\\mathbf{\\hat{e}_x} + q_{1}\\mathbf{\\hat{b}_x} + q_{2}\\mathbf{\\hat{b}_y}$" ], "text/plain": [ "L e_x + q₁ b_x + q₂ b_y" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P2.pos_from(O)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle (L + q_{1} \\operatorname{cos}\\left(q_{3}\\right) + q_{2} \\operatorname{sin}\\left(q_{3}\\right))\\mathbf{\\hat{e}_x} + (- q_{1} \\operatorname{sin}\\left(q_{3}\\right) + q_{2} \\operatorname{cos}\\left(q_{3}\\right))\\mathbf{\\hat{e}_y}$" ], "text/plain": [ "(L + q₁⋅cos(q₃) + q₂⋅sin(q₃)) e_x + (-q₁⋅sin(q₃) + q₂⋅cos(q₃)) e_y" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P2.pos_from(O).express(E)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Setting and calculating velocities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Point O is the reference point in this problem. All velocities and accelerations of interest are with respect to this point. It is also fixed in A, so we need to specify its velocity in A to be zero." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "O.set_vel(A, 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Every velocity must be defined explicitly. To start, set the velocity of P1 as the time derivative of the position vector from O to P1." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "P1.set_vel(A, p1.dt(A))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "P1 and P2 are both fixed in E and the velocity of P1 in A is now defined, so the two point velocity thereom can be applied to determine the velocity of P2 in A. Note that we already computed the angular velocity of E in A, which is needed." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mP2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mv2pt_theory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0motherpoint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutframe\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfixedframe\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m\n", "Sets the velocity of this point with the 2-point theory.\n", "\n", "The 2-point theory for point velocity looks like this:\n", "\n", "^N v^P = ^N v^O + ^N omega^B x r^OP\n", "\n", "where O and P are both points fixed in frame B, which is rotating in\n", "frame N.\n", "\n", "Parameters\n", "==========\n", "\n", "otherpoint : Point\n", " The first point of the 2-point theory (O)\n", "outframe : ReferenceFrame\n", " The frame we want this point's velocity defined in (N)\n", "fixedframe : ReferenceFrame\n", " The frame in which both points are fixed (B)\n", "\n", "Examples\n", "========\n", "\n", ">>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols\n", ">>> q = dynamicsymbols('q')\n", ">>> qd = dynamicsymbols('q', 1)\n", ">>> N = ReferenceFrame('N')\n", ">>> B = N.orientnew('B', 'Axis', [q, N.z])\n", ">>> O = Point('O')\n", ">>> P = O.locatenew('P', 10 * B.x)\n", ">>> O.set_vel(N, 5 * N.x)\n", ">>> P.v2pt_theory(O, N, B)\n", "5*N.x + 10*q'*B.y\n", "\u001b[0;31mFile:\u001b[0m /opt/conda/lib/python3.6/site-packages/sympy/physics/vector/point.py\n", "\u001b[0;31mType:\u001b[0m method\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "P2.v2pt_theory?" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\dot{q}_{1}\\mathbf{\\hat{b}_x} + \\dot{q}_{2}\\mathbf{\\hat{b}_y} - \\omega q_{1}\\mathbf{\\hat{b}_z} + L \\dot{q}_{3}\\mathbf{\\hat{e}_y} - L \\omega \\operatorname{cos}\\left(q_{3}\\right)\\mathbf{\\hat{e}_z}$" ], "text/plain": [ "q₁̇ b_x + q₂̇ b_y + -ω⋅q₁ b_z + L⋅q₃̇ e_y + -L⋅ω⋅cos(q₃) e_z" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P2.v2pt_theory(P1, A, E)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The same notation is used to calculate the acceleration of P2 in A:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle (- \\omega^{2} q_{1} + \\ddot{q}_{1})\\mathbf{\\hat{b}_x} + \\ddot{q}_{2}\\mathbf{\\hat{b}_y} - 2 \\omega \\dot{q}_{1}\\mathbf{\\hat{b}_z} + (- L \\omega^{2} \\operatorname{cos}^{2}\\left(q_{3}\\right) - L \\dot{q}_{3}^{2})\\mathbf{\\hat{e}_x} + (L \\omega^{2} \\operatorname{sin}\\left(q_{3}\\right) \\operatorname{cos}\\left(q_{3}\\right) + L \\ddot{q}_{3})\\mathbf{\\hat{e}_y} + 2 L \\omega \\operatorname{sin}\\left(q_{3}\\right) \\dot{q}_{3}\\mathbf{\\hat{e}_z}$" ], "text/plain": [ "⎛ 2 ⎞ ⎛ 2 2 2⎞\n", "⎝- ω ⋅q₁ + q₁̈⎠ b_x + q₂̈ b_y + -2⋅ω⋅q₁̇ b_z + ⎝- L⋅ω ⋅cos (q₃) - L⋅q₃̇ ⎠ e_x\n", "\n", " ⎛ 2 ⎞\n", "+ ⎝L⋅ω ⋅sin(q₃)⋅cos(q₃) + L⋅q₃̈⎠ e_y + 2⋅L⋅ω⋅sin(q₃)⋅q₃̇ e_z" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P2.a2pt_theory(P1, A, E)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`v2pt_theory()` and `a2pt_theory()` set the velocities of the points, so `vel()` and `acc()` will return the expected answers after you call those two point functions." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle (- L \\omega^{2} \\operatorname{cos}^{2}\\left(q_{3}\\right) - L \\dot{q}_{3}^{2} + \\left(- \\omega^{2} q_{1} + \\ddot{q}_{1}\\right) \\operatorname{cos}\\left(q_{3}\\right) + \\operatorname{sin}\\left(q_{3}\\right) \\ddot{q}_{2})\\mathbf{\\hat{e}_x} + (L \\omega^{2} \\operatorname{sin}\\left(q_{3}\\right) \\operatorname{cos}\\left(q_{3}\\right) + L \\ddot{q}_{3} - \\left(- \\omega^{2} q_{1} + \\ddot{q}_{1}\\right) \\operatorname{sin}\\left(q_{3}\\right) + \\operatorname{cos}\\left(q_{3}\\right) \\ddot{q}_{2})\\mathbf{\\hat{e}_y} + (2 L \\omega \\operatorname{sin}\\left(q_{3}\\right) \\dot{q}_{3} - 2 \\omega \\dot{q}_{1})\\mathbf{\\hat{e}_z}$" ], "text/plain": [ "⎛ 2 2 2 ⎛ 2 ⎞ ⎞ ⎛ 2\n", "⎝- L⋅ω ⋅cos (q₃) - L⋅q₃̇ + ⎝- ω ⋅q₁ + q₁̈⎠⋅cos(q₃) + sin(q₃)⋅q₂̈⎠ e_x + ⎝L⋅ω\n", "\n", " ⎛ 2 ⎞ ⎞\n", "⋅sin(q₃)⋅cos(q₃) + L⋅q₃̈ - ⎝- ω ⋅q₁ + q₁̈⎠⋅sin(q₃) + cos(q₃)⋅q₂̈⎠ e_y + (2⋅L⋅ω\n", "\n", "\n", "⋅sin(q₃)⋅q₃̇ - 2⋅ω⋅q₁̇) e_z" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P2.acc(A).express(E)" ] } ], "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.7" } }, "nbformat": 4, "nbformat_minor": 4 }