Skip to content

Instantly share code, notes, and snippets.

@d2207197
Last active August 29, 2015 14:18
Show Gist options
  • Save d2207197/aeaca530943b6b19aee3 to your computer and use it in GitHub Desktop.
Save d2207197/aeaca530943b6b19aee3 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python2.7/site-packages/matplotlib/__init__.py:1318: UserWarning: This call to matplotlib.use() has no effect\n",
"because the backend has already been chosen;\n",
"matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n",
"or matplotlib.backends is imported for the first time.\n",
"\n",
" warnings.warn(_use_error_msg)\n"
]
}
],
"source": [
"import matplotlib \n",
"import matplotlib.pyplot as plt\n",
"matplotlib.use('nbagg')\n",
"\n",
"%matplotlib inline\n",
"import matplotlib.lines as lines\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x104c0ae50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"fig.set_size_inches(6,6) # Make graph square\n",
"\n",
"line1 = [(0.2,0.2), (1,0.2)]\n",
"line2 = [(0.3,0.2), (0.2,1)]\n",
"\n",
"# Note that the Line2D takes a list of x values and a list of y values,\n",
"# not 2 points as one might expect. So we have to convert our points\n",
"# an x-list and a y-list.\n",
"(line1_xs, line1_ys) = zip(*line1)\n",
"(line2_xs, line2_ys) = zip(*line2)\n",
"\n",
"ax.add_line(lines.Line2D(line1_xs, line1_ys, linewidth=2, color='blue'))\n",
"ax.add_line(lines.Line2D(line2_xs, line2_ys, linewidth=2, color='red'))\n",
"plt.plot()\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"https://gist.github.com/f30414102ec666d632cd\r\n"
]
}
],
"source": [
"!gist -u f30414102ec666d632cd star.ipynb"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from __future__ import division\n",
"import cmath\n",
"from cmath import pi"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def to_xy(r, phi):\n",
" coord = cmath.rect(r, phi)\n",
" return coord.real, coord.imag"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1049853d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"plt.ylim(-3, 3)\n",
"plt.xlim(-3, 3)\n",
"for circle in [plt.Circle(to_xy(2,i*2*pi/7-0.5*pi/7), 0.2, fc='none', ec='black') for i in range(7)]:\n",
" ax.add_artist(circle)\n",
"for circle in [plt.Circle(to_xy(1.384042944,i*2*pi/7+0.5*pi/7), 0.2, fc='none', ec='black') for i in range(7)]:\n",
" ax.add_artist(circle)\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"https://gist.github.com/aeaca530943b6b19aee3\r\n"
]
}
],
"source": [
"!gist -u aeaca530943b6b19aee3 star.ipynb"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[(1.9498558243636472, -0.4450418679126288),\n",
" (1.5636629649360596, 1.246979603717467),\n",
" (1.2246467991473532e-16, 2.0),\n",
" (-1.5636629649360594, 1.2469796037174672),\n",
" (-1.9498558243636472, -0.44504186791262856),\n",
" (-0.8677674782351166, -1.801937735804838),\n",
" (0.8677674782351159, -1.8019377358048385)]"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[to_xy(2,i*2*pi/7-0.5*pi/7) for i in range(7)]"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[(1.3493420977639046, 0.30797852853452695),\n",
" (0.6005137276419932, 1.2469796043840113),\n",
" (-0.600513727641993, 1.2469796043840113),\n",
" (-1.3493420977639046, 0.30797852853452706),\n",
" (-1.0820883467069364, -0.8629366609185379),\n",
" (-2.5424456418781187e-16, -1.384042944),\n",
" (1.0820883467069362, -0.8629366609185384)]"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[to_xy(1.384042944,i*2*pi/7+0.5*pi/7) for i in range(7)]"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"line1 = (1.9498558243636472, -0.4450418679126288), (1.2246467991473532e-16, 2.0)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"line2 = (1.5636629649360596, 1.246979603717467), (-1.5636629649360594, 1.2469796037174672)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def line_intersection(line1, line2):\n",
" xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0])\n",
" ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1]) #Typo was here\n",
"\n",
" def det(a, b):\n",
" return a[0] * b[1] - a[1] * b[0]\n",
"\n",
" div = det(xdiff, ydiff)\n",
" if div == 0:\n",
" raise Exception('lines do not intersect')\n",
"\n",
" d = (det(*line1), det(*line2))\n",
" x = det(d, xdiff) / div\n",
" y = det(d, ydiff) / div\n",
" return x, y\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(0.6005137273210023, 1.2469796037174672)"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"line_intersection(line1, line2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment