{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Intersection points of an ellipse centered at origin and a circle centered at (X,0)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sympy import *\n", "init_printing()\n", "x,y,H,W,X,R = symbols('x y H W X R')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Equation of circle of radius R centered at (X,0)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nTkSuQmCC\n", "text/latex": [ "$$y^{2} + \\left(- X + x\\right)^{2} = R^{2}$$" ], "text/plain": [ " 2 2 2\n", "y + (-X + x) = R " ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e1 = Eq((x-X)**2 + y**2, R**2)\n", "e1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Equation of ellipse with radius W along x-axis and radius H along y-axis" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGsAAAAoCAYAAAD5cwTOAAAABHNCSVQICAgIfAhkiAAAA+hJREFU\neJzt20toXHUUx/HPVCWCglIx6qKNIkVQiyHVhUVC4qIgiC0YC4KPrHSjEmJFwYXFTVAUlSoigqQq\nuhBRVHwgjS8UX5Wo9a0QUBcV2tpqfeAjLs4dvLmdTCeTuY+E+cKF+Z87c+/vzzn/+z///7lDly4V\nZRVex+f4BJeVqqZLU05Bf/L5ZPyIY8qTkz/LKTo/Fv1ZtiyX6FyHXWWLKJqlGJ0r8RnWly2kSKoW\nnT9gPGNbiz9wZtLuwZu4skBdpVPF6HwKT2ZsO3B/8rmWnN9aoKbSqWp0juPbVHsT9uKEpH0B/sV0\n6lhbpMA8GMGf6EvZ7sN3OEl1o3M9ZsWo7xGOGytVUQHU8CEeTtpb8BPWqHZ09ogg24Cb8SWOKlVR\nQWzAX7gFB3BeuXJa5l1sE5ovLllLK4wIvW8JzbN4vJ0LvYO/cVHHpOXPPWLkv1K2kBaZFg76BV9o\n01kX4iD+wUAn1TVhVIgdWsQ1rhYBdlYH9BTBsJheaqLf8zprxTwXOAfP4Ho8i4mOS8yPK/CQWFYs\nBV7DN8JJTTmyga0PL+FuPIL3xR7gkNgTrCIrcKIYmWdjc6lqciLrrJV4Gc/j9sS2Syw2J3B+cdIW\nxCCm8BUuxb6c7jOG4xfw/WnxZFqWjFr8nJUnM0Jfq8fkAq8/ZBHZYJ7MyLfjS5EhTZzVaM4qinsd\n+kjpx0ZsF85MM12ApkpTtrOyjApnTapmMlPqnFV31mHTxkVQy/HadTqtfz7NY+bulx6O7TrorPo6\nq9bmsRpviJX3pyJlzn6nCIrSfOoC7zXaqQ52gk6X+Eflnw1W7bWETeKxPymWTbOiulG33ZXXjRdb\n4h9VfOpe9msJWzXPgmca/WhS7FykGUh+8GDGfjl+R2/KVoUS/w480cC+WWzuHpexV0Fzy6T3Bn92\naGe2iPpQNgMax2OixkXsfDyKa3LQuBAGRB0uy7miELk/ZauK5ra4zdzNz9XCUdvwYso+KKL0jKRd\nlRL/6eIpMNjg3JS572ZURfOCaDayxoSTPjB3ZN2IF8Q+XE08PqfESCuTdSKIPsrYa2LE7Uy1J1VD\nc9tcJQpghNMOiHcaNvp/xK0R9a169FapxH+H5hP1cPK9Kmlum0tEp47ATXg7sQ+L9BYewHvFS2uJ\nV8WI788ct2qcXCxpBoWzevG9yP+Jx8uvYkI+qLq1oj0iyLLcia8L1pIL6TmrXgO6Fr/huaS9Xywa\nr8NuPF2YutY5TQTTzgbnBuaxL2lWiZG1z9x0tjdlv6EEXa0wIjQ22mTdI5Ygy4pjRYd34+iUvSex\n71Xdf4tMiC2aLH3mJhddunTp0qVLly5d0vwHmWcKMz2q+nYAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{x^{2}}{W^{2}} + \\frac{y^{2}}{H^{2}} = 1$$" ], "text/plain": [ " 2 2 \n", "x y \n", "── + ── = 1\n", " 2 2 \n", "W H " ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e2 = Eq((x/W)**2 + (y/H)**2, 1)\n", "e2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Solve for y." ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{H^{2}}{W^{2}} \\left(W^{2} - x^{2}\\right) + \\left(- X + x\\right)^{2} = R^{2}$$" ], "text/plain": [ " 2 ⎛ 2 2⎞ \n", "H ⋅⎝W - x ⎠ 2 2\n", "──────────── + (-X + x) = R \n", " 2 \n", " W " ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ysq = solve(e2, y**2)[0]\n", "e4 = e1.subs(y**2, ysq)\n", "e4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Expand out into quadratic equation." ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [ { "data": { "image/png": "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\niZTj/2e04cnGdySTAAAAAElFTkSuQmCC\n", "text/latex": [ "$$H^{4} W^{2} - H^{4} x^{2} - H^{2} R^{2} W^{2} + H^{2} W^{2} X^{2} - 2 H^{2} W^{2} X x + H^{2} W^{2} x^{2} = 0$$" ], "text/plain": [ " 4 2 4 2 2 2 2 2 2 2 2 2 2 2 2 \n", "H ⋅W - H ⋅x - H ⋅R ⋅W + H ⋅W ⋅X - 2⋅H ⋅W ⋅X⋅x + H ⋅W ⋅x = 0" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e5 = Eq(expand(Add(e4.lhs,-e4.rhs)*H**2*W**2),0)\n", "e5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Has solutions only if..." ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nP2b1RC+L2RphAAAAAElFTkSuQmCC\n", "text/latex": [ "$$4 H^{4} W^{2} \\left(H^{4} - H^{2} R^{2} - H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2}\\right) \\geq 0$$" ], "text/plain": [ " 4 2 ⎛ 4 2 2 2 2 2 2 2 2⎞ \n", "4⋅H ⋅W ⋅⎝H - H ⋅R - H ⋅W + H ⋅X + R ⋅W ⎠ ≥ 0" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e6 = Poly(Add(e4.lhs,-e4.rhs)*H**2*W**2,x)\n", "a = e6.coeffs()[0]\n", "b = e6.coeffs()[1]\n", "c = e6.coeffs()[2]\n", "factor(expand(Ge(b**2 -4*a*c,0)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Solve for points (x,y) which intersect both" ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\nJGnZxrwuBsrrG4H5jf1DSZIkSdI2XfOfAzLd/OV04OnA3ToUapv71WVpGij5CO3vfJPqJoTyXAk8\neO3x89ce/7GByyRJko66Anhzh9eV1u94GvAxQghy47Vp1Ynrs7xD93EOiL/Ixf6XJEmSJM3PnQh3\ntz9z7IL0oO9spLTxCfDYXJIkdc9eUpXWN5pzdgPx+Y39Q0mSJElSE/Of7Uob4wCP7yVJmoIu+Uxp\n/Y45ZysHeF2MJEmSJC2ZuchupY1ReGwuSZLGui4Gyusbmd/YP5QkSZIkNUvJfw6IuPnL+4B3Aa+r\np5+PfPNrAnftUKhtHgf8bcPjNyOsxL16XFaMs+vl/j1HK//a9eMfBc4auEySJOmoxwI/1+F1pfU7\nTm6ZLquf77O8Q/dxDoi/yMX+lyRJkiTNz9cR8oS56DMbKW18Ajw2lyRJ3bOXVKX1jeac3UB8fmP/\nUJIkSZLUxPxnu9LGOMDje0mSpqBLPlNav2PO2coBXhcjSZIkSUtmLrJbaWMUHptLkqSxrouB8vpG\n5jf2DyVJkiRJzdrmPz/D4X1c/oZwb5frZiiXJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS\nJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS\nJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS\nJEmSJEmSJI3q/wPc24zPz4XkWQAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\left [ \\left ( - \\frac{W}{H^{2} - W^{2}} \\left(W X - \\sqrt{H^{4} - H^{2} R^{2} - H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2}}\\right), \\quad \\sqrt{\\frac{H^{2}}{H^{4} - 2 H^{2} W^{2} + W^{4}} \\left(H^{2} R^{2} - H^{2} W^{2} - H^{2} X^{2} - R^{2} W^{2} + W^{4} - W^{2} X^{2} + 2 W X \\sqrt{H^{4} - H^{2} R^{2} - H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2}}\\right)}\\right ), \\quad \\left ( - \\frac{W}{H^{2} - W^{2}} \\left(W X - \\sqrt{H^{4} - H^{2} R^{2} - H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2}}\\right), \\quad - \\sqrt{- \\frac{H^{2}}{H^{4} - 2 H^{2} W^{2} + W^{4}} \\left(- H^{2} R^{2} + H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2} - W^{4} + W^{2} X^{2} - 2 W X \\sqrt{H^{4} - H^{2} R^{2} - H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2}}\\right)}\\right ), \\quad \\left ( - \\frac{W}{H^{2} - W^{2}} \\left(W X + \\sqrt{H^{4} - H^{2} R^{2} - H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2}}\\right), \\quad \\sqrt{\\frac{H^{2}}{H^{4} - 2 H^{2} W^{2} + W^{4}} \\left(H^{2} R^{2} - H^{2} W^{2} - H^{2} X^{2} - R^{2} W^{2} + W^{4} - W^{2} X^{2} - 2 W X \\sqrt{H^{4} - H^{2} R^{2} - H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2}}\\right)}\\right ), \\quad \\left ( - \\frac{W}{H^{2} - W^{2}} \\left(W X + \\sqrt{H^{4} - H^{2} R^{2} - H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2}}\\right), \\quad - \\sqrt{- \\frac{H^{2}}{H^{4} - 2 H^{2} W^{2} + W^{4}} \\left(- H^{2} R^{2} + H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2} - W^{4} + W^{2} X^{2} + 2 W X \\sqrt{H^{4} - H^{2} R^{2} - H^{2} W^{2} + H^{2} X^{2} + R^{2} W^{2}}\\right)}\\right )\\right ]$$" ], "text/plain": [ "⎡⎛ ________________\n", "⎢⎜ ⎛ ____________________________________⎞ ╱ ⎛ \n", "⎢⎜ ⎜ ╱ 4 2 2 2 2 2 2 2 2 ⎟ ╱ 2 ⎜ 2 2 2 \n", "⎢⎜-W⋅⎝W⋅X - ╲╱ H - H ⋅R - H ⋅W + H ⋅X + R ⋅W ⎠ ╱ H ⋅⎝H ⋅R - H ⋅\n", "⎢⎜───────────────────────────────────────────────────, ╱ ───────────────\n", "⎢⎜ 2 2 ╱ \n", "⎣⎝ H - W ╲╱ \n", "\n", "______________________________________________________________________________\n", " ___________________________________\n", " 2 2 2 2 2 4 2 2 ╱ 4 2 2 2 2 2 2 2 2\n", "W - H ⋅X - R ⋅W + W - W ⋅X + 2⋅W⋅X⋅╲╱ H - H ⋅R - H ⋅W + H ⋅X + R ⋅W \n", "──────────────────────────────────────────────────────────────────────────────\n", " 4 2 2 4 \n", " H - 2⋅H ⋅W + W \n", "\n", "___⎞ ⎛ __________\n", "_⎞ ⎟ ⎜ ⎛ ____________________________________⎞ ╱ ⎛ \n", " ⎟ ⎟ ⎜ ⎜ ╱ 4 2 2 2 2 2 2 2 2 ⎟ ╱ 2 ⎜ 2\n", " ⎠ ⎟ ⎜-W⋅⎝W⋅X - ╲╱ H - H ⋅R - H ⋅W + H ⋅X + R ⋅W ⎠ ╱ -H ⋅⎝- H \n", "── ⎟, ⎜───────────────────────────────────────────────────, - ╱ ─────────\n", " ⎟ ⎜ 2 2 ╱ \n", " ⎠ ⎝ H - W ╲╱ \n", "\n", "______________________________________________________________________________\n", " __________________________\n", " 2 2 2 2 2 2 2 4 2 2 ╱ 4 2 2 2 2 2 \n", "⋅R + H ⋅W + H ⋅X + R ⋅W - W + W ⋅X - 2⋅W⋅X⋅╲╱ H - H ⋅R - H ⋅W + H ⋅X\n", "──────────────────────────────────────────────────────────────────────────────\n", " 4 2 2 4 \n", " H - 2⋅H ⋅W + W \n", "\n", "_____________⎞ ⎛ _\n", "__________⎞ ⎟ ⎜ ⎛ ____________________________________⎞ ╱ \n", "2 2 2 ⎟ ⎟ ⎜ ⎜ ╱ 4 2 2 2 2 2 2 2 2 ⎟ ╱ \n", " + R ⋅W ⎠ ⎟ ⎜-W⋅⎝W⋅X + ╲╱ H - H ⋅R - H ⋅W + H ⋅X + R ⋅W ⎠ ╱ \n", "──────────── ⎟, ⎜───────────────────────────────────────────────────, ╱ \n", " ⎟ ⎜ 2 2 ╱ \n", " ⎠ ⎝ H - W ╲╱ \n", "\n", "______________________________________________________________________________\n", " ⎛ ____________________\n", " 2 ⎜ 2 2 2 2 2 2 2 2 4 2 2 ╱ 4 2 2 2 2 \n", "H ⋅⎝H ⋅R - H ⋅W - H ⋅X - R ⋅W + W - W ⋅X - 2⋅W⋅X⋅╲╱ H - H ⋅R - H ⋅W \n", "──────────────────────────────────────────────────────────────────────────────\n", " 4 2 2 4 \n", " H - 2⋅H ⋅W + W \n", "\n", "__________________⎞ ⎛ \n", "________________⎞ ⎟ ⎜ ⎛ ____________________________________⎞ \n", " 2 2 2 2 ⎟ ⎟ ⎜ ⎜ ╱ 4 2 2 2 2 2 2 2 2 ⎟ \n", "+ H ⋅X + R ⋅W ⎠ ⎟ ⎜-W⋅⎝W⋅X + ╲╱ H - H ⋅R - H ⋅W + H ⋅X + R ⋅W ⎠ \n", "───────────────── ⎟, ⎜───────────────────────────────────────────────────, - \n", " ⎟ ⎜ 2 2 \n", " ⎠ ⎝ H - W ╲╱\n", "\n", " _________________________________________________________________________\n", " ╱ ⎛ ___________\n", " ╱ 2 ⎜ 2 2 2 2 2 2 2 2 4 2 2 ╱ 4 2 2\n", " ╱ -H ⋅⎝- H ⋅R + H ⋅W + H ⋅X + R ⋅W - W + W ⋅X + 2⋅W⋅X⋅╲╱ H - H ⋅R \n", " ╱ ────────────────────────────────────────────────────────────────────────\n", "╱ 4 2 2 4 \n", " H - 2⋅H ⋅W + W \n", "\n", "____________________________⎞⎤\n", "_________________________⎞ ⎟⎥\n", " 2 2 2 2 2 2 ⎟ ⎟⎥\n", " - H ⋅W + H ⋅X + R ⋅W ⎠ ⎟⎥\n", "─────────────────────────── ⎟⎥\n", " ⎟⎥\n", " ⎠⎦" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "simplify(solve((e1,e2), (x,y)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see it gets very complicated, very quickly... :(" ] } ], "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.4" } }, "nbformat": 4, "nbformat_minor": 2 }