Skip to content

Instantly share code, notes, and snippets.

@qpleple
Created May 9, 2018 23:06
Show Gist options
  • Save qpleple/78215a8a6430945b398b54af54631f59 to your computer and use it in GitHub Desktop.
Save qpleple/78215a8a6430945b398b54af54631f59 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"from matplotlib.pyplot import *\n",
"def color(i): return get_cmap(\"tab20\").colors[i % 20]"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x106cfa390>]"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n4gAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1061e6590>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 5 points in V shape\n",
"X = np.array([[-1, 1], [-0.5, 0.5], [0, 0], [0.5, 0.5], [1, 1]])\n",
"plot(X[:,0], X[:,1], 'o-', color=color(0))\n",
"\n",
"# Fitting a parabola\n",
"t = range(len(X))\n",
"px = np.poly1d(np.polyfit(t, X[:,0], 2))\n",
"py = np.poly1d(np.polyfit(t, X[:,1], 2))\n",
"x = np.linspace(0, len(X)-1, 100)\n",
"plot(px(x), py(x), color=color(1))\n",
"\n",
"# Fitting a line\n",
"t = range(len(X))\n",
"px = np.poly1d(np.polyfit(t, X[:,0], 1))\n",
"py = np.poly1d(np.polyfit(t, X[:,1], 1))\n",
"x = np.linspace(0, len(X)-1, 100)\n",
"plot(px(x), py(x), color=color(1))\n",
"\n",
"# Rotation of the 5 points by an angle theta\n",
"theta = np.pi / 4\n",
"R = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])\n",
"XX = np.dot(R, X.T).T\n",
"plot(XX[:,0], XX[:,1], 'o-', color=color(2))\n",
"\n",
"# Fitting a new parabola\n",
"t = range(len(XX))\n",
"px = np.poly1d(np.polyfit(t, XX[:,0], 2))\n",
"py = np.poly1d(np.polyfit(t, XX[:,1], 2))\n",
"x = np.linspace(0, len(XX)-1, 100)\n",
"plot(px(x), py(x), color=color(3))\n",
"\n",
"# Fitting a line\n",
"t = range(len(XX))\n",
"px = np.poly1d(np.polyfit(t, XX[:,0], 1))\n",
"py = np.poly1d(np.polyfit(t, XX[:,1], 1))\n",
"x = np.linspace(0, len(XX)-1, 100)\n",
"plot(px(x), py(x), color=color(3))"
]
},
{
"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.13"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment