Skip to content

Instantly share code, notes, and snippets.

@qpleple
Created May 9, 2018 23:02
Show Gist options
  • Save qpleple/9247ce69101462951be4d880c70c4d68 to your computer and use it in GitHub Desktop.
Save qpleple/9247ce69101462951be4d880c70c4d68 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": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x105af8090>]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x105af8510>"
]
},
"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",
"# 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))"
]
},
{
"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