{ "cells": [ { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "raw_data={30:\"\"\"\\\n", "16/04/2021 03:53:58 PM >>> target: {313.918600,397.659547,77.872346} (30.000000)\n", "16/04/2021 03:53:58 PM >>> measured: {314.190247,398.398730,77.836111} (29.989821)\n", "16/04/2021 03:53:58 PM >>> delta: {0.271647,0.739183,-0.036235} (-0.010179)\n", "16/04/2021 03:57:47 PM >>> target: {313.918600,397.659547,77.872346} (30.000000)\n", "16/04/2021 03:57:47 PM >>> measured: {314.186527,398.398139,77.794841} (29.975751)\n", "16/04/2021 03:57:47 PM >>> delta: {0.267927,0.738592,-0.077505} (-0.024249)\n", "16/04/2021 04:01:49 PM >>> target: {313.918600,397.659547,77.872346} (30.000000)\n", "16/04/2021 04:01:49 PM >>> measured: {314.190936,398.393793,77.784848} (29.969878)\n", "16/04/2021 04:01:49 PM >>> delta: {0.272336,0.734246,-0.087498} (-0.030122)\n", "16/04/2021 04:05:33 PM >>> target: {313.918600,397.659547,77.872346} (30.000000)\n", "16/04/2021 04:05:33 PM >>> measured: {314.190933,398.400186,77.797345} (29.974227)\n", "16/04/2021 04:05:33 PM >>> delta: {0.272333,0.740639,-0.075001} (-0.025773)\n", "16/04/2021 04:09:05 PM >>> target: {313.918600,397.659547,77.872346} (30.000000)\n", "16/04/2021 04:09:05 PM >>> measured: {314.191278,398.395420,77.789846} (29.967039)\n", "16/04/2021 04:09:05 PM >>> delta: {0.272678,0.735873,-0.082500} (-0.032961)\n", "16/04/2021 04:12:45 PM >>> target: {313.918600,397.659547,77.872346} (30.000000)\n", "16/04/2021 04:12:45 PM >>> measured: {314.182793,398.399206,77.787352} (29.965754)\n", "16/04/2021 04:12:45 PM >>> delta: {0.264193,0.739659,-0.084994} (-0.034246)\n", "16/04/2021 04:16:39 PM >>> target: {313.918600,397.659547,77.872346} (30.000000)\n", "16/04/2021 04:16:39 PM >>> measured: {314.185511,398.395846,77.784840} (29.974852)\n", "16/04/2021 04:16:40 PM >>> delta: {0.266911,0.736299,-0.087506} (-0.025148)\"\"\",\n", " 60:\"\"\"\\\n", "16/04/2021 03:18:57 PM >>> target: {313.918600,397.659547,77.872346} (60.000000)\n", "16/04/2021 03:18:57 PM >>> measured: {314.072257,399.174346,77.784845} (59.993411)\n", "16/04/2021 03:18:57 PM >>> delta: {0.153657,1.514799,-0.087501} (-0.006589)\n", "16/04/2021 03:23:26 PM >>> target: {313.918600,397.659547,77.872346} (60.000000)\n", "16/04/2021 03:23:26 PM >>> measured: {314.067847,399.171552,77.788601} (59.987958)\n", "16/04/2021 03:23:26 PM >>> delta: {0.149247,1.512005,-0.083745} (-0.012042)\n", "16/04/2021 03:27:31 PM >>> target: {313.918600,397.659547,77.872346} (60.000000)\n", "16/04/2021 03:27:31 PM >>> measured: {314.067142,399.162792,77.779854} (59.997623)\n", "16/04/2021 03:27:32 PM >>> delta: {0.148542,1.503245,-0.092492} (-0.002377)\n", "16/04/2021 03:32:45 PM >>> target: {313.918600,397.659547,77.872346} (60.000000)\n", "16/04/2021 03:32:45 PM >>> measured: {314.070527,399.158963,77.766096} (59.993058)\n", "16/04/2021 03:32:45 PM >>> delta: {0.151927,1.499416,-0.106250} (-0.006942)\n", "16/04/2021 03:37:18 PM >>> target: {313.918600,397.659547,77.872346} (60.000000)\n", "16/04/2021 03:37:18 PM >>> measured: {314.068498,399.164507,77.771091} (59.978290)\n", "16/04/2021 03:37:18 PM >>> delta: {0.149898,1.504960,-0.101255} (-0.021710)\n", "16/04/2021 03:42:12 PM >>> target: {313.918600,397.659547,77.872346} (60.000000)\n", "16/04/2021 03:42:12 PM >>> measured: {314.069858,399.164733,77.773590} (60.000916)\n", "16/04/2021 03:42:12 PM >>> delta: {0.151258,1.505186,-0.098756} (0.000916)\n", "16/04/2021 03:47:55 PM >>> target: {313.918600,397.659547,77.872346} (60.000000)\n", "16/04/2021 03:47:55 PM >>> measured: {314.066807,399.177066,77.778597} (59.966460)\n", "16/04/2021 03:47:55 PM >>> delta: {0.148207,1.517519,-0.093749} (-0.033540)\"\"\",\n", " -90:\"\"\"\\\n", "16/04/2021 02:42:25 PM >>> target: {313.918600,397.659547,77.872346} (-89.756266)\n", "16/04/2021 02:42:25 PM >>> measured: {311.797119,397.367055,77.859857} (-89.794594)\n", "16/04/2021 02:42:26 PM >>> delta: {-2.121481,-0.292492,-0.012489} (-0.038328)\n", "16/04/2021 02:46:38 PM >>> target: {313.918600,397.659547,77.872346} (-89.756266)\n", "16/04/2021 02:46:38 PM >>> measured: {311.788415,397.360957,77.859851} (-89.780018)\n", "16/04/2021 02:46:38 PM >>> delta: {-2.130185,-0.298590,-0.012495} (-0.023752)\n", "16/04/2021 02:50:32 PM >>> target: {313.918600,397.659547,77.872346} (-89.756266)\n", "16/04/2021 02:50:32 PM >>> measured: {311.776854,397.359648,77.854856} (-89.786446)\n", "16/04/2021 02:50:32 PM >>> delta: {-2.141746,-0.299899,-0.017490} (-0.030180)\n", "16/04/2021 02:54:28 PM >>> target: {313.918600,397.659547,77.872346} (-89.756266)\n", "16/04/2021 02:54:28 PM >>> measured: {311.782969,397.358242,77.854850} (-89.755115)\n", "16/04/2021 02:54:28 PM >>> delta: {-2.135631,-0.301305,-0.017496} (0.001151)\n", "16/04/2021 02:58:33 PM >>> target: {313.918600,397.659547,77.872346} (-89.756266)\n", "16/04/2021 02:58:33 PM >>> measured: {311.786724,397.353875,77.842346} (-89.764806)\n", "16/04/2021 02:58:33 PM >>> delta: {-2.131876,-0.305672,-0.030000} (-0.008540)\n", "16/04/2021 03:03:18 PM >>> target: {313.918600,397.659547,77.872346} (-89.756266)\n", "16/04/2021 03:03:18 PM >>> measured: {311.792837,397.352309,77.842346} (-89.779079)\n", "16/04/2021 03:03:18 PM >>> delta: {-2.125763,-0.307238,-0.030000} (-0.022813)\n", "16/04/2021 03:07:24 PM >>> target: {313.918600,397.659547,77.872346} (-89.756266)\n", "16/04/2021 03:07:24 PM >>> measured: {311.787061,397.351100,77.852360} (-89.757056)\n", "16/04/2021 03:07:24 PM >>> delta: {-2.131539,-0.308447,-0.019986} (-0.000790)\"\"\",\n", " 0:\"\"\"\\\n", "20/04/2021 01:27:33 PM >>> target: {313.918600,397.659547,77.872346} (0.000000)\n", "20/04/2021 01:27:33 PM >>> measured: {313.913515,397.674436,77.788586} (0.038443)\n", "20/04/2021 01:27:33 PM >>> delta: {-0.005085,0.014889,-0.083760} (0.038443)\"\"\",\n", " 15:\"\"\"\\\n", "20/04/2021 01:31:51 PM >>> target: {313.918600,397.659547,77.872346} (15.000000)\n", "20/04/2021 01:31:51 PM >>> measured: {314.109529,398.025861,77.791095} (15.020844)\n", "20/04/2021 01:31:51 PM >>> delta: {0.190929,0.366314,-0.081251} (0.020844)\"\"\",\n", " 45:\"\"\"\\\n", "20/04/2021 01:36:54 PM >>> target: {313.918600,397.659547,77.872346} (45.000000)\n", "20/04/2021 01:36:54 PM >>> measured: {314.174664,398.793223,77.788600} (44.964776)\n", "20/04/2021 01:36:54 PM >>> delta: {0.256064,1.133676,-0.083746} (-0.035224)\"\"\",\n", " 90:\"\"\"\\\n", "20/04/2021 01:41:56 PM >>> target: {313.918600,397.659547,77.872346} (90.000000)\n", "20/04/2021 01:41:56 PM >>> measured: {313.582513,399.781195,77.804842} (89.959433)\n", "20/04/2021 01:41:57 PM >>> delta: {-0.336087,2.121648,-0.067504} (-0.040567)\"\"\",\n", " 120:\"\"\"\\\n", "20/04/2021 01:46:48 PM >>> target: {313.918600,397.659547,77.872346} (120.000000)\n", "20/04/2021 01:46:48 PM >>> measured: {312.854009,400.077695,77.802350} (119.974678)\n", "20/04/2021 01:46:48 PM >>> delta: {-1.064591,2.418148,-0.069996} (-0.025322)\"\"\",\n", " 120.1:\"\"\"\\\n", "20/04/2021 02:09:39 PM >>> target: {313.918600,397.659547,77.872346} (120.000000)\n", "20/04/2021 02:09:39 PM >>> measured: {313.901644,397.652122,77.779840} (119.974507)\n", "20/04/2021 02:09:39 PM >>> delta: {-0.016956,-0.007425,-0.092506} (-0.025493)\n", "20/04/2021 02:13:16 PM >>> target: {313.918600,397.659547,77.872346} (120.000000)\n", "20/04/2021 02:13:16 PM >>> measured: {313.907068,397.652111,77.801095} (119.989958)\n", "20/04/2021 02:13:16 PM >>> delta: {-0.011532,-0.007436,-0.071251} (-0.010042)\n", "20/04/2021 02:17:39 PM >>> target: {313.918600,397.659547,77.872346} (120.000000)\n", "20/04/2021 02:17:39 PM >>> measured: {313.904359,397.645695,77.806097} (119.983343)\n", "20/04/2021 02:17:39 PM >>> delta: {-0.014241,-0.013852,-0.066249} (-0.016657)\n", "20/04/2021 02:21:13 PM >>> target: {313.918600,397.659547,77.872346} (120.000000)\n", "20/04/2021 02:21:13 PM >>> measured: {313.902662,397.647020,77.786100} (119.993130)\n", "20/04/2021 02:21:13 PM >>> delta: {-0.015938,-0.012527,-0.086246} (-0.006870)\n", "20/04/2021 02:25:04 PM >>> target: {313.918600,397.659547,77.872346} (120.000000)\n", "20/04/2021 02:25:04 PM >>> measured: {313.907069,397.651069,77.804838} (119.964533)\n", "20/04/2021 02:25:04 PM >>> delta: {-0.011531,-0.008478,-0.067508} (-0.035467)\n", "20/04/2021 02:28:43 PM >>> target: {313.918600,397.659547,77.872346} (120.000000)\n", "20/04/2021 02:28:43 PM >>> measured: {313.907747,397.653474,77.798598} (119.974000)\n", "20/04/2021 02:28:43 PM >>> delta: {-0.010853,-0.006073,-0.073748} (-0.026000)\"\"\",\n", " }\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def parse(lines):\n", " import re\n", " rex = re.compile('.*delta: {([0-9.\\-]+),([0-9.\\-]+),([0-9.\\-]+)} \\(([0-9.\\-]+)\\)')\n", " parsed = []\n", " for line in lines.splitlines():\n", " try:\n", " x, y, z, r = [float(token) for token in rex.findall(line)[0]]\n", " parsed.append((x,y,z,r))\n", " except:\n", " pass\n", " return parsed\n", "\n", "data = {key: parse(val) for key, val in raw_data.items()}" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAI/CAYAAABTd1zJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAAArzklEQVR4nO3df5BedX3//dcnuwk0RSFAAoFNCLnDjxCIQZKA09bScgfRW0O5VQq1Go1KUZxSbqWlt2OL7Viw9a4FoeWHUWPrkJb5gmEQQytIQQvEAMuvRAmGwG6IBGIItgghu+f+IyFffgSz8Nnk2h+Px8xO9jrn7Dnv5ZpreM4559qrNE0TAADemBGtHgAAYDATUwAAFcQUAEAFMQUAUEFMAQBUEFMAABXaW3Xgfffdt5k0aVKrDg8A0Gd33XXXU03TjN3eupbF1KRJk7Js2bJWHR4AoM9KKY++1jqX+QAAKogpAIAKYgoAoELL7pkCgOHqhRdeSHd3d5577rlWj8Ir7L777uno6MjIkSP7/DM7jKlSyoQk30yyf5LeJFc0TXPRK7Y5PsniJI9sXXRN0zR/1ecpAGAY6e7uzpve9KZMmjQppZRWj8NWTdNk/fr16e7uzsEHH9znn+vLmanNST7dNM3dpZQ3JbmrlPIfTdMsf8V2tzVN8+7XMTMADEvPPfeckBqASinZZ5998uSTT76un9vhPVNN06xtmuburd//IsmKJAe+oSkBgCQRUgPUG3leXtcN6KWUSUmOTnLndla/rZRybynlu6WUaa97EgBgl3nuuecye/bsvOUtb8m0adPyl3/5l0mSn//855kzZ04OOeSQzJkzJxs2bGjxpANfn2OqlLJHkv+V5E+apnnmFavvTnJQ0zRvSfKVJN9+jX2cUUpZVkpZ9npPoQEA/We33XbLzTffnHvvvTednZ1ZsmRJ7rjjjlx44YU54YQTsnLlypxwwgm58MILWz3qgNenmCqljMyWkPpW0zTXvHJ90zTPNE3z31u/vyHJyFLKvtvZ7oqmaWY2TTNz7Njt/kV2AGAXKKVkjz32SLLl3YUvvPBCSilZvHhx5s2blySZN29evv3tb7dwysFhhzFVtlw8XJBkRdM0f/8a2+y/dbuUUmZv3e/6/hwUAIazux7dkEu//3DuerT/Lrv19PRkxowZGTduXObMmZNjjz02TzzxRMaPH58kGT9+fNatW9dvxxuq+vJuvt9I8sEk95dSOrcu+3+TTEySpmkuS/K+JJ8opWxO8sskpzVN0/T/uAAw/Nz16IZ84Kt3ZNPm3oxqH5Fvfey4HHPQmOr9trW1pbOzM08//XROOeWUPPDAA/0w7fCzw5hqmuYHSX7lre1N01yS5JL+GgoA+N/uWLU+mzb3prdJXtjcmztWre+XmHrRXnvtleOPPz5LlizJfvvtl7Vr12b8+PFZu3Ztxo0b12/HGap8nAwADHDHTd4no9pHpK0kI9tH5LjJ+1Tv88knn8zTTz+dJPnlL3+Z733vezn88MMzd+7cLFy4MEmycOHCnHzyydXHGup8nAwADHDHHDQm3/rYcblj1focN3mffjkrtXbt2sybNy89PT3p7e3Nqaeemne/+91529vellNPPTULFizIxIkTc/XVV/fDbzC0iSkAGASOOWhMv17amz59eu65555XLd9nn31y00039dtxhgOX+QAAKogpAIAKYgoAoIKYAgCoIKYAACqIKWCn6urqym233Zaurq5WjwKwU4gpYKfp6urKwoULc/PNN2fhwoWCCgaYp59+Ou973/ty+OGHZ+rUqbn99tvz85//PHPmzMkhhxySOXPmZMOG/vsswKFKTAE7zerVq9PT05OmadLT05PVq1e3eiTgJc4+++ycdNJJ+fGPf5x77703U6dOzYUXXpgTTjghK1euzAknnJALL7yw1WMOeGIK2GkmTZqUtra2lFLS1taWSZMmtXokYKtnnnkmt956az760Y8mSUaNGpW99torixcvzrx585Ik8+bNy7e//e0WTjk4+AvowE4zYcKEzJs3L6tXr86kSZMyYcKEVo8Eg1fX0mT1bcmk30omzK7e3apVqzJ27Nh85CMfyb333ptjjjkmF110UZ544omMHz8+STJ+/PisW7eu+lhDnZgCdqoJEyaIKKjVtTRZODfp2ZS0jUrmXVcdVJs3b87dd9+dr3zlKzn22GNz9tlnu6T3BrnMBwAD3erbtoRU07Pl39W3Ve+yo6MjHR0dOfbYY5Mk73vf+3L33Xdnv/32y9q1a5Ns+TDkcePGVR9rqBNTADDQTfqtLWekStuWfyf9VvUu999//0yYMCE/+clPkiQ33XRTjjjiiMydOzcLFy5MkixcuDAnn3xy9bGGOpf5AGCgmzB7y6W9frxnKkm+8pWv5AMf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eSQLFy7Meeedl4ULF+bkk0/ul2MNZc7nAcAAt9tBb86+Hzsqz6/amN0m71l9ie9F733ve7N+/fqMHDkyl156acaMGZPzzjsvp556ahYsWJCJEyfm6quv7pdjDWViCgAGgd0OenO/RdSLbrvttlct22effXLTTTf163GGOp/NBwBQQUwBAFQQUwAAFcQUAEAFMQUAUEFMAQBUEFMAMAzNnz8/48aNy5FHHrlt2bnnnpvDDz8806dPzymnnJKnn35627oLLrggU6ZMyWGHHZYbb7yxBRMPXGIKAIahD3/4w1myZMnLls2ZMycPPPBA7rvvvhx66KG54IILkiTLly/PokWL8uCDD2bJkiX55Cc/mZ6enlaMPSCJKQAYht7+9rdn7733ftmyE088cduHHR933HHp7u5OkixevDinnXZadttttxx88MGZMmVKli5dustnHqjEFAAMAl1dXbntttvS1dW1S473ta99Le985zuTJGvWrMmECRO2revo6MiaNWt2yRyDgY+TAYABrqurKwsXLkxPT0/a2toyb968l8VNf/vCF76Q9vb2fOADH0iSNE3zqm1KKTvt+IONM1MAMMCtXr06PT09aZomPT09Wb169U471sKFC3P99dfnW9/61rZg6ujoeNkZse7u7hxwwAE7bYbBRkwBwAA3adKktLW1pZSStra2TJo0aaccZ8mSJfniF7+Y6667LqNHj962fO7cuVm0aFGef/75PPLII1m5cmVmz569U2YYjFzmA4ABbsKECZk3b15Wr16dSZMm9cslvtNPPz233HJLnnrqqXR0dOTzn/98Lrjggjz//POZM2dOki03oV922WWZNm1aTj311BxxxBFpb2/PpZdemra2tuoZhoqyveugu8LMmTObZcuWteTYANBKK1asyNSpU1s9Bq9he89PKeWupmlmbm97l/kAACqIKQCACmIKAKCCmAIAqCCmAAAqiCkAgApiCgCGofnz52fcuHE58sgjX7b83HPPzeGHH57p06fnlFNOydNPP71t3QUXXJApU6bksMMOy4033thvs1x99dWZOnVqfud3fie33HJL/uu//qt6n+eee26mTZuWc889N5dddlm++c1v9sOk2yemAGAY+vCHP5wlS5a8avmcOXPywAMP5L777suhhx6aCy64IEmyfPnyLFq0KA8++GCWLFmST37yk+np6emXWRYsWJB//Md/zPe///03FFObN29+1bLLL788d999d/7u7/4uZ555Zj70oQ/1y6zbI6YAYBh6+9vfnr333vtVy0888cS0t2/5gJTjjjsu3d3dSZLFixfntNNOy2677ZaDDz44U6ZMydKlS1/XMX/v934vxxxzTKZNm5YrrrgiSfJXf/VX+cEPfpAzzzwz73//+3PZZZfly1/+cmbMmJHbbrstTz75ZN773vdm1qxZmTVrVn74wx8mSc4///ycccYZOfHEE18VSnPnzs3//M//5Nhjj82//uu/5vzzz8+XvvSlbN68ObNmzcott9ySJPnzP//zfPazn31dv8P2+DgZABgENm68Oxs23JkxY47Nnnu+dZcc82tf+1p+//d/P0myZs2aHHfccdvWdXR0ZM2aNa97f3vvvXd++ctfZtasWXnve9+bv/iLv8jNN9+cL33pS5k5c2bOP//87LHHHvnMZz6TJPmDP/iDnHPOOfnN3/zNPPbYY3nHO96RFStWJEnuuuuu/OAHP8iv/dqvvew41113XfbYY490dnYm2RJeSdLe3p5vfOMbed/73peLL744S5YsyZ133vlG/tO8jJgCgAFu48a7c/c9H0xv76aMGDEqbz36n3d6UH3hC19Ie3t7PvCBDyRJtvfxc6WU17XPiy++ONdee22SpKurKytXrsw+++zzK3/me9/7XpYvX77t8TPPPJNf/OIXSbacgXplSO3ItGnT8sEPfjDvec97cvvtt2fUqFGv6+e3R0wBwAC3YcOd6e3dlKQ3vb0vZMOGO3dqTC1cuDDXX399brrppm3B1NHRka6urm3bdHd354ADDnjZz9155535oz/6oyRbLt/NnTt327pbbrkl3/ve93L77bdn9OjROf744/Pcc8/tcJbe3t7cfvvt242mX//1X39Dv9/999+fvfbaK0888cQb+vlXcs8UAAxwY8YcmxEjRiVpy4gRIzNmzLE77VhLlizJF7/4xVx33XUZPXr0tuVz587NokWL8vzzz+eRRx7JypUrM3v27Jf97LHHHpvOzs50dna+LKSSZOPGjRkzZkxGjx6dH//4x7njjju2e/w3velN2848JVvu4brkkku2PX7x0t0bdc0112T9+vW59dZb88d//Mcve7fiGyWmAGCA23PPt+atR/9z/o/J5/TbJb7TTz89b3vb2/KTn/wkHR0dWbBg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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "matplotlib.rcParams['figure.figsize'] = (10,10)\n", "\n", "def plot_pts():\n", " for key, val in data.items():\n", " label = str(key)\n", " if key == 120.1:\n", " label = \"120 - after fix\"\n", " xs = [v[0] for v in val]\n", " ys = [v[1] for v in val]\n", " plt.plot(xs, ys, '.', label=label)\n", "\n", "plt.figure()\n", "plot_pts()\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Center: (-1.230, 0.907), Radius: 1.509\n" ] } ], "source": [ "#Now try to fit the circle (from: https://scipy-cookbook.readthedocs.io/items/Least_Squares_Circle.html)\n", "import scipy.linalg as linalg\n", "from numpy import mean, sqrt, array\n", "#collect all xs and ys\n", "x = []\n", "y = []\n", "for key, val in data.items():\n", " if key == 120.1: continue\n", " for pt in val:\n", " x.append(pt[0])\n", " y.append(pt[1])\n", "x = array(x)\n", "y = array(y)\n", "\n", "# coordinates of the barycenter\n", "x_m = mean(x)\n", "y_m = mean(y)\n", "\n", "# calculation of the reduced coordinates\n", "u = x - x_m\n", "v = y - y_m\n", "\n", "# linear system defining the center (uc, vc) in reduced coordinates:\n", "# Suu * uc + Suv * vc = (Suuu + Suvv)/2\n", "# Suv * uc + Svv * vc = (Suuv + Svvv)/2\n", "Suv = sum(u*v)\n", "Suu = sum(u**2)\n", "Svv = sum(v**2)\n", "Suuv = sum(u**2 * v)\n", "Suvv = sum(u * v**2)\n", "Suuu = sum(u**3)\n", "Svvv = sum(v**3)\n", "\n", "# Solving the linear system\n", "A = array([ [ Suu, Suv ], [Suv, Svv]])\n", "B = array([ Suuu + Suvv, Svvv + Suuv ])/2.0\n", "uc, vc = linalg.solve(A, B)\n", "\n", "xc = x_m + uc\n", "yc = y_m + vc\n", "\n", "# Calcul des distances au centre (xc_1, yc_1)\n", "Ri = sqrt((x-xc)**2 + (y-yc)**2)\n", "R = mean(Ri)\n", "residu = sum((Ri-R)**2)\n", "print(f\"Center: ({xc:.3f}, {yc:.3f}), Radius: {R:.3f}\")" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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89UnM8epb9++OnHihN3R4KHyTTH49ttvdeutt6p///6aOXOmAgMD7Y4EALYrVKWEyvSvrxL3hKjcwIb65uf/yrIsRUREaOPGjXbHgwfy+l0Jp06d0tChQ7Vs2TL9/PPPHIYIAFcoVKVExqLDQpK+/vprTZ48WXfddZfefvttDRgwgMvKI4NXzxgkJyfr9ttv16lTp7RmzRpKAQBkUa9evbRs2TKNGjVKTzzxhM6ePWt3JHgIry0GK1asULNmzdStWzdNnTpVxYoVszsSAHiVWrVqacWKFdq7d6/uvvtuHThwwO5IueZ0OtWoUaOMsxxy6eXs88pi8PXXX6tz584aP368XnzxRabAACCHSpQooe+++0533HGHmjZtqvXr19sdKVdGjRqlOnXqXHYfl17OHq8qBmlpaXruuef09ttv67ffftN9991ndyQA8HoOh0P/+te/NHLkSN1999363//+Z3ekHElOTtYPP/yg/v372x3Fq3lNMTh06JDuu+8+bdy4UatWrbqqEQIAcqd79+5asGCBnn32WY0YMULp6el5NtbehHitmvNf7U2Id9lzPvPMM3r//fflcFz+0call7PHK4rBn3/+qWbNmqlu3bqaP3++SpUqZXckAMiXmjRpopiYGP3000966KGHdPz4cZePsTchXjPfelnL/ztFM9962SXlYN68eSpXrpyaNGly2f1cejn7PL4Y/Pjjj7rjjjs0bNgwffzxx/L19fojLAHAo91888369ddfddNNN6lFixYuv0rj7j82ypmWJis9Xc60NO3+I/fnU1i+fLmioqIUEhKi7t27a/HixerZs6fKly8vHx8fORwODRgwQDExMS74CfI3jy0GlmXpgw8+UP/+/fXdd9+pX79+dkcCgAKjUKFCmjBhgvr166dbbrlFS5YscdlzVwqrLx9fXxmHQz6+vqoUVj/Xz/nuu+8qOTlZO3bs0PTp03XXXXdpypQpXHo5Bzzy1+9z585p4MCB2rBhg1atWqVKlSrZHQkAChxjjJ5++mnVqVNHDz30kN577z316dMn189boWYdPfTq29r9x0ZVCquvCjXzbs3Yiy++yKWXs8njisGJEyf00EMPyeFwaMmSJSpatKjdkQCgQLvnnnv022+/qW3btvrrr7/00ksv5fow8Qo16+RZIWjZsqVatmwpSfrmm2/yZIz8zKN2JRw8eFCt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1aFDq5SeflZSutLTz+nQodz9lhscHKyzZ89e8+RHOb308qpVqxQeHq7w8HBFRUVd9lh0dLQWLVqkFStWaP369WrUqJFOnz59w6zp6elasWKF4uLiFBcXpz179qh48eKSpKJFi2br575o48aNCgwMzFhvkVsUAwCAW5Us2UwOh78kHzkcfipZslmuns/hcKhatWrav3//VYcw5ubSy82aNcv4AO/UqdNljx05ckQlS5ZUQECA/vzzT61cuTLTbMWLF8+YEZDOr3kYM2ZMxu2Luwdyavbs2UpNTdWSJUv01FNPXXbURU5RDAAAbnXTTY3VuNE3ql7t2VztRrhU37591bdvXyUmJio4OFgTJkyQJA0dOlTHjh1TmzZtFB4erkGDBknSZZdebtu2bbYvvdy2bVulpaWpQYMGevXVVy9br3Cpjh07as6cORmLD0ePHq3Y2Fg1aNBAdevW1bhx43L8Mx88eFDDhg3ThAkTVLNmTQ0dOlRPP/10jp/vIi67DADIlby87HJ27dixQ+np6apatWq21wzkZ1x2GQBQIFWqVEknT57kYku5QDEAAOQbF89vkJycrFOnTtkdxytRDAAA+UqRIkVUsWJFJSUluexshgUJxQAAkGt2rVe7ljJlyqhIkSIZZzosyLL734ZiAADIlcKFCys1NdWjyoExRpUrV9aRI0d09OhRu+PYxrIspaamqnDhwln+O5z5EACQK8HBwUpOTtaBAwfsjnKVtLQ0rVq1ShUqVJDDUTB/Fy5cuLCCg4OzvD3FAACQK35+fqpatardMa6pX79+8vf3z9U5AwqSglmfAAAFxr///W/98MMPWrRokd1RvALFAACQrwUGBmr8+PHq37//ZacnRuYoBgCAfK9du3a666679MILL9gdxeNRDAAABQK7FLKGYgAAKBDYpZA1FAMAQIHRrl07tW7dml0K10ExAAAUKB999BG7FK6DYgAAKFAu3aVw4sQJu+N4HIoBAKDAadeunVq0aKG3337b7igeh2IAACiQPvjgA40fP14JCQl2R/EoFAMAQIFUoUIFDR8+XE8++aRHXQDKbhQDAECB9dRTTyk5OVlz5syxO4rHoBgAAAosPz8/jRkzRs8++6xOnjxpdxyPQDEAABRorVq10q233qp33nnH7igegWIAACjwPvzwQ40bN06JiYl2R7EdxQAAUOBVrFhRL730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Q/r60Nc6GXRS6UrPePxc+jnF7oulGAAo8DZt2qRu3bopIiJCa9asUbFixeyOBA/jtbsSrnSq5Cn5Puqr4zcfl9NyXvaYn8NPEeUjbEoGAPazLEtffvmlWrVqpZdeekmTJ0+mFCBT+WLGQJJi98UqLT1NMpKRkWVZMjIyxujFpi8yWwCgwDp69KgGDhyozZs3a8mSJapTp47dkeDB8s2MQUT5CPk5/DJuG2Mkc74lpxzmbIkACqbY2Fg1btxYJUuW1KpVqygFuKF8UwzCy4Vrwr0T1KRck8vuN5bRx899rKVLl9qUDADcz7IsffLJJ2rfvr3effddff755ypSpIjdseAF8s2uBOl8Ofi63deauWWm5mydo7JFyqpvvb7aW36vHnroIQ0dOlTDhw/nkBwA+Vpqaqr69eunvXv3auXKlapWrZrdkeBFjGVZtgwcERFhxcbGum28PXv26JFHHpHD4dDEiRNVtWpVt40NAO6ycOFCDRgwQA899JDeffdd+fv72x0JHsoYs8ayrKtW5uebXQk3UrFiRS1evFj33XefIiMj9dlnnyk9Pf3GfxEAvMCRI0c0YMAAPf7445owYYI++ugjSgFypMAUA0ny8fHR888/r6VLl+qbb77R3Xffre3bt9sdCwByZeHChapfv74cDoc2bNigNm3a2B0JXqxAFYOLateurWXLlql9+/bMHgDwWpfOEkycOFFffPEF1zpArhXIYiAxewDAu105S3D33XfbHQn5RIEtBhcxewDAmzBLgLxW4IuBxOwBAO/ALAHcgWJwiStnD8aMGSOn03njvwgAeejvv/9mlgBuQzG4wqWzBzNnzlRkZKRWrFhhdywABVB6erq++uor1alTR/7+/swSwC3y1ZkPXal27dqKjo7Wt99+q65du+ree+/VyJEjVa5cObujASgAYmNjNWTIEDkcDs2fP1+NGze2OxIKCGYMrsMYo0cffVTx8fEqWbKkwsLCNHbsWHYvAMgzqampGjRokDp06KBBgwZp+fLllAK4FcUgC0qUKKGPPvpI0dHRmjVrliIiIvT777/bHQtAPpKenq4vv/xSdevWla+vr+Lj49W3b185HPwzDfdiV0I2hIWFafHixZoxY4a6deumu+++W++9957Kly9vdzQAXmz16tUaMmSI/Pz8tHDhQoWHh9sdCQUYVTSbjDHq3r274uPjVa5cOdWrV0+jR49WWlqa3dEAeJmDBw9q4MCB6tSpk4YOHaply5ZRCmA7ikEOFS9eXO+//76WLFmiqKgoNWnSRIsWLbI7FgAvcPbsWY0ZM0Z169ZVkSJFFB8fr169eskYY3c0gGKQW3Xq1NHPP/+s1157TYMHD1abNm3kzstJA/Ae6enp+vbbb1WnTh398MMPWrRokUaNGqXAwEC7owEZKAYuYIxRly5d9Mcff6hr167q3LmzunXrpoSEBLujAfAAlmVlHHI4evRoTZgwQfPnz1eDBg3sjgZchWLgQn5+fnr88ceVmJioxo0bq0WLFnr88ce1d+9eu6MBsMnKlSvVqlUrPffcc3r99de1YsUKtWzZ0u5YwDVRDPJAQECAhg0bpi1btigwMFD169fXsGHDdOjQIbujAXCT+Ph4PfDAA+rWrZt69eqljRs36oEHHmAdATwexSAPlSpVSu+9957Wr1+v1NRU1axZU++//75OnTpldzQAeWT37t3q16+f7rzzTrVo0UJbtmxRv3795OvL0eHwDhQDNwgODtaXX36ppUuXKiYmRqGhoRo/frzOnj1rdzQALnLgwAE9//zzCg8PV1BQkBISEvT888+rSJEidkcDsoVi4Ea1a9fWrFmzNHv2bM2aNUvVq1fXJ598ohMnTtgdDUAO7dy5U0899ZRq1aqlkydPatOmTXr77bc50gBey1iWZc/AxhyQtNOWwV2jjKSDdocoAHid3YfX2n14rd2D1/n6qliWVfbKO20rBt7OGBNrWVaE3TnyO15n9+G1dh9ea/fgdc4ZdiUAAIAMFAMAAJCBYpBz4+0OUEDwOrsPr7X78Fq7B69zDrDGAAAAZGDGAAAAZKAYZJEx5gNjzJ/GmA3GmDnGmMBrbNfWGLPFGLPVGDPMzTG9njHmIWPMH8aYdGPMNVcTG2N2GGM2GmPijDFczjIHsvFa857OJWNMKWPMz8aYxAt/lrzGdryvc+BG71Fz3ugLj28wxjS2I6e3oBhk3c+S6lmW1UBSgqThV25gjPGRNFZSO0l1JfUwxtR1a0rvt0nSg5KWZGHbVpZlhXM4Uo7d8LXmPe0ywyT9YllWqKRfLty+Ft7X2ZDF92g7SaEXvgZK+tytIb0MxSCLLMv6ybKstAs3V0oKzmSzSElbLctKsizrrKTpkjq7K2N+YFlWvGVZW+zOURBk8bXmPe0anSVNuvD9JEn32xcl38nKe7SzpMnWeSslBRpjgtwd1FtQDHKmn6T5mdxfUdLuS24nX7gPrmdJ+skYs8YYM9DuMPkY72nXKG9ZVookXfiz3DW2432dfVl5j/I+zgYu93UJY8wiSTdn8tDLlmXNvbDNy5LSJE3N7CkyuY/DPq6Qldc5C1pYlrXXGFNO0s/GmD8ty8rK7ocCxQWvNe/pLLrea52Np+F9nX1ZeY/yPs4GisElLMu6+3qPG2N6S+ogqbWV+XGeyZIqXXI7WNJe1yXMH270OmfxOfZe+HO/MWaOzk8n8g/oFVzwWvOezqLrvdbGmH3GmCDLslIuTGHvv8Zz8L7Ovqy8R3kfZwO7ErLIGNNW0kuSOlmWdfIam62WFGqMqWqM8ZfUXVKUuzIWFMaYosaY4he/l3SPzi+kg+vxnnaNKEm9L3zfW9JVszW8r3MsK+/RKEm9Lhyd0FzSkYu7dnA1ikHWjZFUXOen9+KMMeMkyRhTwRjzoyRdWJw4VNJCSfGS/mtZ1h92BfZGxpgHjDHJkm6R9IMxZuGF+zNeZ0nlJS0zxqyXFCPpB8uyFtiT2Htl5bXmPe0yIyW1McYkSmpz4Tbvaxe41nvUGDPIGDPowmY/SkqStFXSl5IG2xLWS3DmQwAAkIEZAwAAkIFiAAAAMlAMAABABooBAADIQDEAAAAZKAYAACADxQAAAGSgGAAAgAz/D18tuHwjLGCZAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "figure, axes = plt.subplots()\n", "axes.set_aspect(1)\n", "axes.add_artist(plt.Circle((xc, yc), R, fill=False,))\n", "axes.add_artist(plt.Circle((xc, yc), .02, fill=True,))\n", "plot_pts()\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.9.3" } }, "nbformat": 4, "nbformat_minor": 4 }