canvas贝塞尔曲线 - 1
aaarticlea/png;base64,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22mq1SoZkYnFYplMptXsV6dZlUolnudjsdivf/3rhoVIu3btIlN9R0ZGFEVxeW2maa6P0zSEeu+99w4dOvTMM888+eST9XJDpt0cPHjw6NGjo6OjkUgkl8ut02xcd6EqlUptSDGRSKRSKXI0NJymm1nBaQAA4SLETlPbZ4+m6UQi0eacI6dZiaL4yCOPNI/gbNu27Y033iATe71fYBecplqtkrnGPM8/8cQTltOZd+3atX///uvXr5Pp1QFxGtM0S6US2RiaaI0oinCaLmcFpwEAhIsQOw2ZTEqmzaZSqTZLlO1nNTY2dvDgwX37gdR+gQAAIABJREFU9jWozO7duycmJhiGSSaTfolIF5ymRrFY5DiOpum5ubkjR45s37691vm0bdu2Xbt2PfXUU/v27fv4448FQQiI05imWS6XJUki86w5jiOru33JKmj2AKcBAADvhNVpqtVqsVgki34t99lzlBWZBfzOO+802MyePXt+85vfTExMXLp0SVVV04Y92KebTlP/oSzLTkxMfPLJJy+88MIjjzxSr25PP/30K6+88s477zAM037Jtx186fKpHW9JhNKv7rGg2QOcBgAAvBNWpymXy5qmxWIxhmEURWnflrfJSlXVaDQ6PDy8Y8eO+tZ9x44dQ0NDZ86coSjKMlRInaae+fn5Dz744NVXXyUmR8batm/f/pOf/ORXv/rV8PAwwzBemlhfnIYcbxmLxch8YV3XPbavcBr7wGkAAOEirE5T22eP5/mOa45aZSVJ0qVLl1599dX6vpndu3cfPHjwpZde4nm+Tag+cBpCOp2enp4+fPjw3r17d+3aVSuHnTt3vvHGG9euXRMEoVKp2D8xqoZfU3Py+bwgCNFoNBqNKorisQMJTmMfOA0AIFyE0mmq1aphGBzHRaNRsg+vu6xefvnlrVu3NswFfuONN6ortAnVN05jmia5WF3Xjx07tnv37ob+queff77hREmb+DjdOJvNsiwbiURisVg2m/VSYnAa+8BpAADhIpROQ/5EdunVNK1jhduQ1fLy8uTk5IsvvljfLbF169aRkREykmUnVD85DaFarabT6Ugkcv78+T179tQG43bs2LFnz55f/vKXi4uLjlpcH53GMIxkMknWQCWTyfbTp+xkFTR7gNMAAIB3Quk0pIWjKEoUxTZLuC2zmp+f/81vfnPgwIFa98zDDz/87LPPnj9/Pp1O2w/Vf05Ty4rn+YmJiZGRkZdffrmmfTt27Ni/f/+xY8du3bplP5RfTkO24ON5nmEYhmHsdM61zypo9gCnAQAA76w6jSiKuq7nvaFpmiiKoihqmrZOoQzDIOt7SZ+KYRj2Q83Nzb300ksPrZwxuXXr1meeeea9994bHR21ee2qqpJQ3ssq+KHm5+fff//9V155pbZbzyOPPPLiiy+ePXs2EomkxXSBKhSmCoWpQoEv5FXrUJIk2fmO7GSVTCY5jiOThWVZzuVyuVzOaahsNutXVkEOJcuyj6FclHMDmUyG3Fc9rOwAAH3PqtOQ/T9S3pAkieO4dQ0liiLLstFolGVZSZLshEomkzdv3pybm9u3b1/9psBPPvnkJ5984ktWLghmKFEUG0JRFHXkyJF9+/bt3r17+/btZJLNa0OvXTpySXhGMP7eyP99Xvullp5KpxIWoXieJ1sA+5JVIpEgI1D2v/2OF+g9K79C+VhWQQslCAIpqx5WdgCAvid8TkMGICiK4jjOZlV78+bNt99+e+fOnfVzgbdv3z43N+e0sg6miKyr0xAEQTh16tTevXtrY3bP/f1zE9+c0P+Fbn7GrP6Lau4fc5lLmeZQ/jqNLMtEa6LRaCwWkyTJaXA4TU9CwWkAAF1g1WlIZ3XZG4ZhkKMDcrmcx1BkCkV9qFKplMvlyA5sHMdpmmYnzuzs7M9//vPHHnusZjOHDx+ORCIMw+i67jSr2gXm83mn7w1FKF3XLUORkwoikcjHH3/8s5/97OEtD+/6p10/+/9+9uvv/5reSBf+sFD9erVyuNKcFVl97WNWuq6LosgwDE3TqVTK6SVrmkZC+ZWVjxeoKEqxWPQYilxgMEPJstzDyg4A0PeEaY5wpVJRVTUej7MsqyhKuVzuuGnK6Ojo888/X1ufvHXr1qGhoZs3b7rO6naYI0xCla0mq5bL5XQ6PT8/f+b/OfPa/3rtqfufOnzfYfFPxeLniuYXTPMhB6FcZ1WpVDRNSyQSkUgkkUjYWfjWHCpos3ExRxgAALwTJqcplUqSJDEMw/M8OamgDblcbmpqau/evfXjTa+88sqNGze8ZHWbO00N/X/qC3+x8PG3Px7+y+HC/1GofqZa/EJR+0et/ntfJ6cxV463ZFmWpmkyr9b+loBwGvvAaQAA4SI0TlOpVAzDiMfjpBlrv5TXMIxr167t3r27NiN4x44d+/btazjowAVwmk/5iWl+1Sz+YVEf1M0Bs/q5qvJ/KTcevhGJRLLZLGkC189pyJHssiwzDBOPxx1dOJzGPnAaAEC4CI3TlEqlVCpFpgZ3PAzhypUrtamsRGv27t3L87yPF3i7O82iaf6/pvkF0xwwzQGz+mfV6P3RD37+wdtvvz0+Pp5Op6vV6vo5jbmylzTP8xRFxePxjv12DaGCZg9wGgAA8E44nKZareZyuUQiEY1GO+6zNzY29tOf/rQ23nTo0KEzZ87cvHlTlmU4jf2sOjSuOdNcNM23TfMp03zKrP6+qi6o0RvR0dHRd9999/jx4zMzM6IorqvTVCqVTCZDuu6SyWQul7PT9MJp7AOnAQCEi3A4DZk/QdM0wzCZTKZNyz06OvrMM8/UhpyOHj26sLBQa1zhNPaz6ty4lkwzZZoR04yYpmqaZbNQKCSTyenp6Y8//viDDz74+OOPp6amBEFYv6xKpZIsyyzLkmnjRH/thAqaPcBpAADAO+FwGsMwRFGMRqOJRCKXy1m+PpfLTU9PP/300/XHSguC4G9WcJqOVCqVSCRy7ty5EydOfPDBB6Ojo7FYrNW35j0rXdcFQWAYxubxlnAa+8BpAADhIgROQzZWJ0MMrSr92qRgIjS7du169dVXa0NUcBoXWXlsXA3DmJubO378+DvvvHPu3LmlpaX2HWyusyqXy9lsluf5SCSSTCYNw2jfAMNp7AOnAQCEixA4DTmtiUwFzefzltXrlStX6g89+NWvfrVOWcFp7JPL5ViWPXv27FtvvXXs2LHR0dH2Z567zorcKtFoNBqNdjzeEk5jHzgNACBchMBplpeXOY5jWVaWZcsaf2xsbM+ePTWheeeddxq2K4XTuMjKl4m9sizH4/HFxcVTp06dOHHio48+unLlSjqddhq8fVZkjZUgCGRZXDqdblMOcBr7wGkAAOEi6E4jy7IgCCzLchyn63rzy0ZGRuonBb/77rvNZ8rAaVxk5eNiJV3XGYaZmJg4efLkyZMnx8bGbt26RdZ7+5UV2X2f4ziGYZLJpOWtUh8qaPYApwEAAO8E2mkURREEIR6PMwwjimKpVKpvBWs7BROhIZOCE4nEumYFp3EXqlqtKooyNzf30UcfnTp16vz585cvX+Z5vuP0F5tZVavVcrm8vLwci8XIkd2t1kDBaewDpwEAhIvgOg3ZKJbneXJiZSaTqf8rmRT8yCOPkO6Zhx9++NVXX221uAZO4yKr9dhUplgssix76tSpkydPDg8Pj4yMRKPRdDrdcQ22nazICJQoijRNsyy7vLzcIMH1oYJmD3AaAADwTnCdhrRPLMtSFCUIQsM+e1euXNm+fTsRmm3btv3zP/9zd7KC03gPZRjG9PT07373u5MnT37wwQcjIyPxeLz9V2M/K03TapsL67re3BjDaewDpwEAhIvgOk0ulyONE9l3pP4HN9kpuHb6wXPPPXfhwoXuZAWn8R6qWq1qmhaNRkdHR48fPz4xMTE6Ojo1NcXzfLVabTNgZCerUqmUyWQ4jqMoShTF5q47OI194DQAgHARXKfRNC0Wi0UikYZ99q5du/bSSy/VJgU/+uijH3zwQfu6Ek7jIqv1cxpz5bSmeDx+4cKF4eHh8fHxqampmZmZ+fl5y8XY9rMiI1DkeEsyAtXwpcNp7AOnAQCEi4A6DZnvSVFUJBKRZbm+qT569GhtGs3WrVuPHDlC03R3sjLhNL6GIt/y9PT0yMjIhQsXpqamLl68eOXKFYZhGtZ7O8qqUqnoup5IJCiK4nm+dk54faig2QOcBgAAvBNQpyHbjUQiEZZla21SqVSKx+MHDhwgQrNjx44DBw6wLNu1rEw4zTqEyufzCwsLZ86cIWu8JycnJycnFxYWJEnK5XJkKMppVuVyOZPJxGIxsmKO9PPVhwqaPcBpAADAOwF1Gk3T4vF4NBrlOK428KQoymOPPVabF7x3717DMLqZlQmnWZ9Q1WqV5/kzZ8689dZbDMNQFDU+Pn7q1KnFxUWiNS6yqlQqiqLUjrck68lNOI0T4DQAgHARRKchq7gpiqJpurbi6datW/v27SPzgrdu3frSSy8JgmCzqoXTuMiqm05jrnzpZAOb6elp0sVy4cKFsbGxaDSaWsFmVmSusWEYgiDQNB2Px2u9fXAa+8BpAADhIohOo6oq2ZYmFouRGaPz8/Mvv/xybV7w0NDQzZs3u5xVQyg4je+hyuVyOp2+du0amV5DUVQikbh+/fr09PTs7Ozi4qIgCI4ukIxAkTVQiUTCMIxyuQynsQ+cBgAQLladRhRFTdPy3iDnTYqiqOu6uwi6rpPDEFiW5XleFMXLly///Oc/rx3ntH379uHhYXdZeb9AVVU9XmBYQhmG4TFUNpsVRVGSJEdZZTIZojVjY2M3b97keX5xcfHixYsTExOzs7OxWExVVfvRNE2TJImMZwmCkM1mM5mMX2VVu0Afy8p7KHKBsizncrmghRJFsYeVHQCg71l1Go7jZFlOeUOSJI7jvIQSRZG0QCzLxuPxeDz+0ksvke31tm3btn379gMHDoyPj3c5q9snlCiK/obieV5RFEdvlGX5+vXrw8PDJ06cuHLlCsuykUjkwoULJ0+enJycvHHjBsdxkiTZTyMWi0WjUYZhEolEMpnsp7IKSyhBEEhZ9bCyAwD0PatOw/O896qZnGbgOpSiKGSfPYZhSGXKcdwLL7xQ66HZu3fv1atXnYaVJMlLVusUShTFAGZVC+W9GSOhOI5zF4rjuJGRkbfeemtycpJhmHg8HolExsfHP/roo7GxMZqmbcYhp4YxDBONRmOxWCKRCOA3SEK5Lqt1DeWXHpFQPazsAAB9z6rTKIqSy+XK3sjlcoqiuAtVKpVqewcnEonl5WWGYZ5//vmHH36YOM3jjz9OURSZFeEuq3w+7/S9DRiG4Veo9ciqUCgEJ5Su615CFYvFbDa7uLh4+vTp0dHRSCQiiiKZHzM3NzcyMjI/P59KpToGL5VK+XxeURSGYUhXDRlP6fkFWoYqFoseQ2ma5ldWJFQqlfIxqx5WdgCAvidAc4TL5bKqqgzDxGKxdDodjUZ/+ctf7tixgyx02r9//9zcnLs5sJgj7CKrctfnCDdDTlFYWloaHR09c+bMjRs38vk8ObA9EonMzc1NT09HIpFMJtP+CMxKpVIoFEhvTSwW43nelwvEHGGnoVKYIwwAWE8C5DSFQkEUxWg0mkwmk8nk8PBwbV7ws88+Ozk52ZOsWoWC03QtVC6Xu3Xr1unTp0+fPk3TtGEYZMca0mEzMzNz/fp1nucNw2jf9GqalkgkaJpmGEYQBF+OJIPTOAoFpwEArCtBcRryizwej1MUpSjK7OxsbRrNQw89NDw83JOs2oSC03QzlK7rS0tLJ06cOH/+fE1riNlQFEVWRUWj0XQ6XSgUWvXZlMvl5eXlWCxGTu2ubVLsGjiN01BwGgDAuhIUpyFbrkWj0Xg8rmnahx9+SHaj2bp16/bt28+dO9eTrNqEgtN0OZQsy4IgnDt37uTJk9euXav/Konx/P73vx8bG4vH422+5Xw+n0wmKYqKRqNk8oqXrOA0TkPBaQAA60pQnIaMC1AUJcvyu+++W38GwsjIiKqqPcmqTSg4TfdDKYqyvLx85cqVs2fPXrp0qdbRUqlUSEN+/fp1csQ3z/OkI6chTrVaTafTZGl3PB5XVdVLaw2ncRoKTgMAWFcC4TSlUimVSjEMs7S0dPbs2aeffpoIzSOPPHLy5EnvayXgNC6yCqDTkFDpdPr69esjIyPj4+OKopBLJgaTzWYZhrl69er09PTVq1dlWW7+xg3DSCaTNE3TNE22FnSdFZzGaSg4DQBgXQmE0+i6TiZvLi0tHTx4cOfOnbVjt3meD8iJDQ2h4DQ9DKWq6s2bN0+fPj09Pc3zfKFQqL2yVCrJsnzjxo1Lly5duXKFYZhMJlOfABnG4nm+dryl60KD0zgNBacBAKwrvXeaarVKZm7eunXr4sWLu3fvJp00e/bsef/9931ZnwKncZFVkJ3GNM1CoRCLxT7++OPJyUmO4+q1xjTNUqkkSdLU1NSFCxeuX78uSVIul6udYakoiiRJRKPrj7d0CpzGaSg4DQBgXemx01Sr1UKhQGbSnD9/vrbQadu2ba+//rrvIgKnsZ9VwJ2GIMvymTNnTp8+bbnpfrlcjsfj4+Pjp06dWlxcJPNvaqHIxBqaphOJRM14HAGncRoKTgMAWFd67DSVSiWTybAse+LEiccff7x28va7774riiKcpodZhcJpSqWSKIrT09OnTp26detWQ2+NaZrFYjGTydA0PTk5OTY2Fo1Gl5eXSZNPYsZiMYZhyMwbp0u74TROQ8FpAADrSi+dplqtlkolQRBomj569GhNaJ544onx8fFisQin6WFWoXAac0Vr5ubmiNZomtbwArIqKpFILC4uTk9Pz87OLi4uiqJIzuIgZ6ayLJvJZJyWHpzGaSg4DQBgXeml05BTYFiW/eSTTw4fPlwbeDp69CjLsnCa3mYVFqcxTbNcLqdSqcnJyZGRkRs3bmQyGcsgqqpGo9GZmZnJycnLly8LgmAYRjab5Xk+EokkEgld1x2lCqdxGgpOAwBYV3rpNMViURCE2dnZ5557btu2beTk7eeee45lWfJXOE0PswqR05imWalUDMOYnJw8d+7cwsKCruuWA0mVSkUQhJmZmeHh4dnZ2Xg8nk6nZVkmS7tlWc7n8/ZHoOA0TkPBaQAA60ovncYwjJs3bx48eHDXrl21tU61sQM4TW+zCpfTEEqlEplbMzc31+qVZC03x3FTU1NkNbggCIIgkAMT0um0/WzhNE5DwWkAAOtKz5yGKMv8/Pzjjz9OOmm2bNny+OOP67pe/wI4Ta+yCqPTVKtVVVUXFxfPnDlz4cKF5rk1tVCKopBRp8uXL4+MjMzNzUWjUZqmeZ63fJclcBqnoeA0AIB1pWdOo+v6/Pz866+/TnbYe+ihh/bv3z87O1trleE0vc0qjE5jmibZTfjGjRtkdElRlIb2mIQi9lAsFhVFiUQis7Oz4+Pjw3PDr7CvbNe2P1F+4lL1UtbMtv8sOI3TUHAaAMC60hunISckj4yMPPLII6ST5uGHH3777bfrXwOn6W1WIXUa0zSr1aqu6wsLC5988snc3JwgCPVNcr3TkBfn83mO42ZnZ59feP774vf/delf/7vKv9tV2XW9er39B8FpnIaC0wAA1pXeOE0ul1taWnrnnXdID83WrVsPHDgwMTFR/xo4TW+zCq/TmKZZrVbL5fLi4uLZs2enpqZSqVSlUiGTfxucpv4jdqd2b9I3DZgDnzM/95/K/+l09XT7T4HTOA0FpwEArCu9cZpMJnP06FHSQ0Oc5vTpxvYDTtPbrELtNDWWlpY+/vjj06dPa5pWOxuhlT08U3nmq5Wvfsb8zOeqn/tW8VsniyfbB4fTOA0FpwEArCs9cBqyhPu3v/1tbZO9kZERVVWbXwan6WFW/eE0+XyeZdnx8XFywHu5XG7jNJfMS/9Y/sd/X/73Xyl85VHl0bn0XPPGxPXAaZyGgtMAANaVbjsNWZly4sSJn/70p0RotmzZsri42PxKOE1vs+oPpyHvjcfjIyMj4+PjZGO9VvaQNtMzlZmjhaO/Wv7VJ7FPooloNptt84lwGqeh4DQAgHVl1WlEUdQ0Le8NVVVFUWwVKpfLZbPZ2dnZZ555hgjNww8//MYbb8RiMaehHKFpml+hfMxqPULpuh6cUNlsloQyDKO3obLZLEVRZ86cmZycXFpaSiQSkiS1CkVa39rxlplMpn1WbUI5ytCvUJlMRhRFWZb9CkVONfcllCiKPazsAAB9z6rTcBwny3LKG5IkcRzXKpSiKAzDvPbaa7t37ya7Bj/77LMcx7kI5WNWCFWPKIr+huJ5XlEUv7JyHUpRlGvXrp06derMmTPXrl2Lx+OSJLV6paIoHMdRFEU24mtVFEEuq6CFEgSBlFUPKzsAQN/TVacRRXFhYWH37t1kJs2ePXtOnDghCIKLUD5m5QiyBW3Qsgp4qOA0rtevXz958uTx48cjkUgrp0mlUoqiiKIYi8UoiqJpOplMWpZGAC8w4KHgNACAdWXVaRRFyeVyZW/kcjnyM7c5VKlUunr16pNPPlk7q3JoaCidTpdKpfah8vm8X1l5D2UYRpBDFQr/f3v3GhvXWeB/PFtod1e9iG6B1RYERcC+6fJmBavtau8Xad8sFAkQQvQvkArtsq0CSJQASotES2lXSpeWS1GX0iuk3VyaOrbjeOJrktpxEjuZxIlvc58zPre532/P/8UpY9dxHM85xzPnHH8/yqsm/vnxNLW/nTkzU3HOqQqFgu2nsjhVKpWWlpaGhoZ6enoSicTV1mq1WrVazWQyxr018Xg8l8tVq9U1f6z1BV75W+3K5/N2TTnzVK2pLn6zA+B5nbtGuFarTU5Otp7r9Nxzzy0tLW0wxTXC3T1V3SvXCK+RyWQuX748ODh4/PhxSZI2GKxWq+l02riwRlXV8hVvb8k1wu1OJblGGMBW6lzTzM/Pv/TSS607aY4ePbrxFE3T3VM5KkTsnZJl+fLlyyMjI1NTU/F4/Go3mvESw8a7dsdisUwms+bvD03T7hRNA2BLdahpGo3GoUOHWnfSPPHEE6dPn954iqbp7qmcFiK2TwWDwbGxsYmJCUVRWq8yvIbxoInxCFQikcjlcqt/utM07U7RNAC2VIeaplQq7du3r9U0fr//mlM0TXdP5cwQsWvKqIdoNDo6Ojo4OLgmVlar1+upVCoUCoVCIUVRSqVS67domnanaBoAW6pDTfP6668/8sgjrXdCuHTpGu8OKGiabp/KgSFie9NUq9VoNGq8yrCmaeuON5vNWq2mqmokEolGo8lVbx1F07Q7RdMA2FKdaJparfbss88aQfPwww+PjY2l0+lrTtE03T2VA0PE9qYRv3+V4bGxsRMnTmxwyXChUJBlORwOx+Px1ltH0TTtTtE0ALbUljdNqVQaHx9vvRPCY489duVbO62LpunuqRwYIlvRNEKISqUSi8VGRkZOnTp1tUuG6/W68dRu4+VqyuVyo9GgadqdomkAbKktbxpN0374wx8aV9Ls3r37xRdfLBaLm5miabp7KgeGyBY1jRCi2WwGg8Hh4eG33npL07R1f4RXKhXjOVChUCiZTFYqFePnNE2z+SmaBsCW2tqmaTQa8XjceCeE7373u88///zmp2ia7p7KgSGydU1jWFhYOHbs2Pj4+JUvRWMolUqyLC8tLRmvwtd6O0yaZpNTNA2ALbW1TTM3N/fkk0/u2rXLaJoXX3xx81M0TXdP5cAQ2eqmqVQqgUBgZGRkZGQkm81emTX1ej2Xy8VisWAwuLy8nE6naZq2pmgaAFtqa5tmenp69TshLC4ubn6KpunuqRwYIlvdNEKIfD6/uLh45MiR6enpK38AN5vNarWaSqUikUg4HF5eXlZVlabZ/BRNA2BLbWHTBIPBV155xQiaXbt2DQwMtDVF03T3VA4MkQ40TbPZzOfzs7Ozw8PDfr//yp/BjUbDeCXiUCgUiUQSiYSu6zTNJqdoGgBbagub5vDhw60X2XvyySenpqbamqJpunsqB4ZIB5pG/P4Fac6dOzc8PHz+/PlCoXDlH8hms8ZzoCKRiKIoNoYITQMApm1V05RKpTfffNO4kuahhx46f/58u1M0TXdP5cAQ6UzTGGq12pkzZwYHB/1+/5U/0RuNhvEIVCAQiMViV7umePNoGgCwbqua5rXXXms93WnXrl2beeHgNWia7p7KgSHSyaYxHoS6cOGCz+e7cOFCuVxe87ulUml5eTkQCAQCgXQ6bfGWp2kAwLqtappf/epXrRcOHh8f38wLB69B03T3VA4MkU42jRCi2WymUqnz58/39/cvLCyseRCq0Wgkk0njrhpJkvL5vJWz0TQAYJ1tTaPrYmpK/O53tT17ko8+OrZ795NG0zz66KPZbNbEIE3T3VM5MEQ63DRCiHq9nkwmJycnx8bGlpaW1mRNLpdLJBLGq/Cpqrr67S3bRdMAgHU2NE29LhIJceCAuP9+8Rd/0fyzP0t94xs/+c53dj300EO7dj387LMv5HKbeuHgNWia7p7KgSHS+aYRQjSbzUKhMD4+fvz48UAgUKlUWr9VLBY1TTMuFo7FYqlUyvTtT9MAgHVWm6bZFOm0+PnPxZ13iuuuEzt2iJtuyn/1qy/u3Pmjb3/7+1/+8it79ohsVpi4gJKm6e6pHBgiXWkaQy6XGx0dHRoaikajrcuBS6WSruuKohhZE4/Hzd0lKWgaALCD1aaRZbF3r/irvxI33SR27BA7dojrrmvcemvqttvk9753+U//NPXJT4rXXxeK0vbJaJrunsqBIdLFpmk0GpqmnT592ufzLS8vGx9rNI2xFo1Gjbe3LJVKJp4DRdMAgHVWm+bCBXHffeLWW9++k2bNr+uuE3/yJ+I//1O0/7QnmqbLp3JgiHSxaYQQ9Xo9kUhMTU35fD5ZlqvVqlEPyWTSeHvLSCQSiUR0XTfxb4GmAQDrVppGUZR8Pl9u0/Bw9a//unHDDesEjfHrj/5I/M3fNMbHK+0u5/N5RVHMnWqNXC7nwKlsNmtMFQoFB055+wtUVdXEVC6XC4fDPp/v5MmTsVjMeOBJVdVisZjNZiVJCgaD0Wg0lUq1O57JZFpT7Z5qq6c0TbNrSjFxhy0AbNpK08TjcU3Tkm16443sRz/aePe7r9o0118vPvaxem9vtt1lVVXj8bi5UzFlmnF1iI1TkiQZD9DYciobp8x9gYqizM3NHT58+MSJEwsLC9Fo1JjSdX15eTkcDgcCgWg0KsuyiVPZeFuarkJZAAAb50lEQVQ5bUqWZeNm7+I3OwCet7ZpUm06dCh3zab5+Mfr/f25dpeNZ5SYO1UHpnRdtzi1OkQ8OdX6iWjjqey62Y2f0+YWksmk3+/v6+sbHR01XpzGmNJ1XZIk41X42v2qrZ+qpXWzJ5NJp03RNAC21ErTaJpWLpfrbTp+vPH3f9/c+LGnf/zH5sREo93lUqmkaZq5U7liyngmsL2nqlQqdp3K+lShULD3VLqu23UqK1O1Wq1YLM7Ozh47dmx8fFxV1Wq12vrny8vLxiNQyWRy8/9mW6cypqwwppLJpPWpfD5vTNVqNVumNE3r4jc7AJ5n9Rrh+Xmxa5d4//vFu961/jXC73+/+P73xeLiOh87NTX1/37vgQceePXVV1u/5ff7X3zxxV/84heJRIJrhLtyqrrzLuy1cSpl+WrcXC537ty5gYGBU6dOFQoF47lOxg9vSZLC4fDy8nI+n9/kGtcIA4B1VpsmnRZDQ+IznxG33bZO09x2m/j0p8XIiMhk1vnY/fv333zzzV//+td37tx5zz33fO9735ufn6/X6wcOHHjssccefPDBe++9NxKJ0DRdOZUDQ8RRTSOESCQSExMThw8fXlxcLBaL4vfv6Z1KpWKxWCQSMe7C2cxTu2kaALDOhtcRLhTEa6+JT39afPjD4pZbxPXXi+uvF7fcIu64Q3z2s+K118TVXjJ+//79H/7wh1VVFUKMjY3t2bPnpZdeKpVK3/72t++///4f/OAHNE0XT+XAEHFa05RKJeNpUMeOHQuFQq2XGC6Xy4qihEKhSCSyyU9E0wCAdba935PfL554QvzDPzRuv71x++2Nf/7n5n//t7h4caMPWd008/Pzr7766p49e4y31EkkEr/97W9pmi6eyoEh4sCm0XU9kUj09/ePjo6ufonhXC5nPLU7Ho8XCoVrNgFNAwDW2dY05bJQVTE/Xz11KnPqVGZhoaZpolze6ENWN83w8PAzzzxz9OhR4392aZqun8qBIeLApkkmk7quy7I8MjIyNja2vLxs/FatVkun07FYLBgMKopS3vi/BJoGAOxgW9MY2qqH/fv333jjjV/4whfuueeeBx544Pnnn5dl2fjuSdN0/VQODBFnNk0qlapUKqFQ6MSJE+Pj40ZMNJtN48loxiNQ1/y7R9MAgHVdbppbbrnlvvvu++Y3v/mzn/3szJkzrd+iabp+KgeGiGObptFoVCqVhYWF4eHhyclJY7zRaBQKhUQiYTwClc1mN/iMNA0AWNflpmk99rQGTdP1UzkwRJzcNEKIQqEwNzd38ODBCxcuZDKZRqNRr9ez2Ww0Gg2Hw4qiFIvFZrO57tOgaBoAsM6JTVMulwOBwG9+85uvfOUrc3NzrRf/6MypNjlF07h6aovqoVAozM7O7tu379KlS8YbdNfrdU3TwuGw8QhUrVajaQBgizixae69996Pf/zjt99++3ve856Pfexjv/zlL2OxWMdOtckpmsbVU1tUD41Go1gsnj59enBw8OLFi/V6vdlsGi8uHA6HY7FYNptdtw9oGgCwrptNE4lEDhw4cOVTQnw+38svv/zCCy88++yzzz777MzMTC6X69ipNjlF07h6auvqodFopFKpiYmJ0dHR+fl54xGoTCYTj8eDwWAikSgWi1cmAk0DANZ1s2k2Vq1WbQ8Rmmbzp3JgiLiiaQzxePzkyZPDw8OSJNVqNeMvcyQSCYVCxjt8rXkEiqYBAOtoGpNTNI2rp7a6Hur1eigUGh4eHh0d1XW9VquVSiVZlo23t8xkMmv+TdE0AGAdTWNyiqZx9VQH6qFWq0Uikddee+3s2bOpVKpWq+Xz+Xg8HggEEonEmivfaRoAsI6mMTlF07h6qgP1YFwdvLS09MYbb5w/fz6bzVar1VQqFQ6Hjad2r76SjKYBAOtoGpNTNI2rpzpTD0bWTE9PDw0N+f3+YrFYqVQURQmHw9Fo1Ljzxri3hqYBAOtoGpNTNI2rpzpWD81mM51OT0xMjIyMLCws1Ov1fD4vSVI4HJYkKZ/PGx9L0wCAdTSNySmaxtVTHa4HSZJOnDhx7NgxWZbL5XIqlYrFYuFwWJblSqVivDkUTQMAFtE0JqdoGldPdb4eYrHY8PDwkSNH0ul0sVhUVTUUCgWDQeOvJU0DANbRNCanaBpXT3W+HiqVSjQa7enpmZiY0HXdeHvLQCAQj8dzuZzxI5+mAQAraBqTUzSNq6c6Xw/G9cLz8/P9/f3nzp1TVTWbzcZisVAopChKOp2maQDAopWmURQln8+XrMnn84qiKIqSy+UsTuVyOdunrH+BNk5ls1nbpwqFgoenVFW1PpXJZOyd2vwXWCwWU6nU5OSkz+ebnp6WZVmW5VAoZFwvvLy8bLx3ty2nUlXV+lQ6nbZrqnVbdfGbHQDPW2maeDyuaVrSGlVV4/E4U+6dUhTF3ilJknRdt+tUNk515bbSdT0ejw8NDQ0MDMzMzEiSFIlEgsFgKBSKRCI2foE23uy2TMmybNxWXfxmB8Dz1jZNyhpN01rf5e2a0nXd4lTrR771qa34Ah01ZeNtZUwZPxE9earWj/xkMtnWB4ZCoaGhoUOHDgWDQUmSQqHQ0tJSMBiMxWLtTtl4qg5M0TQAttRK02iaViqVGtaUSiVN04x36bM4VS6X7Zqy8VTFYtGYqlQqTHV4Stf1arXqnKlCoWDcQ9PuVLVajUaj4+Pjvb29xoM74XDYaJpisViv17tyqg5MaZrWxW92ADyPa4RNTnGNsKunUt2+GrdcLofD4YGBgYmJiVgslkgkjEegUqmUxX+JVk61BtcIA3AXmsbkFE3j6qmuN40QovU0qJmZmXA4HIlEAoGAJEmFQsFKQ9A0ALYtmsbkFE3j6iknNE2z2axWq5OTk8PDw9PT06FQKBAIhEIhVVVLpdLqd+3u5KlWo2kAuAtNY3KKpnH1lBOaxlAsFsfGxgYGBvx+fzQaDQaD0Wg0nU6b/ldJ0wDYtmgak1M0jaunnNM0zWZTluWxsbGenp5AIBCNRsPhcCKRyOVyXTyVgaYB4C40jckpmsbVU85pGiFEtVqdm5sbHBwcHByMRqORSCQUCrXe3rJbpxI0DQC3oWlMTtE0rp5yVNMIIZLJ5MzMzKFDh6anp4PBYCQSiUQixt/YdrOGpgGwbdE0JqdoGldPOa1pSqVSLBZ76623+vv7z58/HwqFQqFQLBbL5XLtnpOmAbBt0TQmp2gaV085sGl0XZdl2efzjYyMXLx4MRqNBgIBRVHK5XJbd9XQNAC2LZrG5BRN4+opBzaN8QVqmjYyMjI0NDQ3N2fcW6PreqVS6cqpaBoA7kLTmJyiaVw95cymSaVSlUolGAyOjY0NDQ0FAoGlpaV4PJ7JZDb/KWgaANsWTWNyiqZx9ZRjm6Zer5dKpUuXLvl8vpMnTy4uLobDYVmWC4VC509F0wBwF5rG5BRN4+opJzeNECKbzfr9/oMHD547d25hYSESiWiatsl/uTQNgG2LpjE5RdO4esrhTSOESKfTx48f7+vrm5mZCQQCkUhkk49A0TQAti2axuQUTePqKec3Tb1eT6fTAwMDIyMj58+fDwaDkiQVi8Vrfi6aBsC2RdOYnKJpXD3l/KYRQjQajXA4fOzYseHh4dnZ2WAwqGnaNZ/aTdMA2LZoGpNTNI2rp1zRNM1ms1arXbx4cWhoaHR01LiwJp1Ob/zXmKYBsG3RNCanaBpXT7miaQy5XG56evrw4cNnzpxZWFgw3t5yg89I0wDYtmgak1M0jaunXNQ0QghVVScnJ/fv3+/3+4PBoKIopVKpA6eiaQC4C01jcoqmcfWUu5qmXq8nEon+/n6fz+f3+6PR6AY3BU0DYNuiaUxO0TSunnJX0wghyuVyOBw+fPjw+Pj45cuX4/F4Nptd9/PSNAC2rZWmURQll8uVrMnlcoqiKIqSz+ftmnLUqbLZrJOnCoWCt6es31aZTEZRFFVVrZ+qk1PFYjGTyUxOTg4MDJw8eXJhYcF4z4Qr/3w6nTamisWixVPZOGV8gYqidPGbHQDPW2maeDyuaVrSGlVV4/E4U+6dUhTF3ilJknRdt+tUNk657rbSdT0Wix07dqy/v//06dOBQECSJFVVTUzZeKpNkmXZuK26+M0OgOetNI0kSZqmpazRNE2SJFumVFW1fUrXdYtTrS/Qxikbb3brp7LxtjKmjBBx2qlsmVIUxfZTJZPJjf/k3Nzc4OBgT0/P5cuXg8Hg8vLymg9pneqaU5s8VSKRsD7VOlUXv9kB8LyVptF1vVwu160plUq6rjt2qlKpeHKqWCzaPlWtVpnazFQymbQ+VSgUjKlarbbxnyyXy/Pz8wMDA4ODg3Nzc8vLy/l83tyUjafa5JSu6138ZgfA87hG2OQU1wi7eirltmuEV8vlcpcuXTpw4MDExMTCwoKmaZVKZStOxTXCANyFpjE5RdO4esrVTdNsNpPJ5FtvvdXb2zs1NRUKhdLpdOsDaRoA2xZNY3KKpnH1lKubRghRq9WSyeSRI0d8Pt+5c+eMt7c03geKpgGwbdE0JqdoGldPub1phBD1ej0UChkvxLe4uKgoSq1WazabNA2AbYumMTlF07h6ygNNY7zD5czMzJEjR0ZHR41HoGq1Gk0DYNuiaUxO0TSunvJA0xhSqdTU1FRPT8+pU6cikUgulysUCjQNgO2JpjE5RdO4esozTdNsNiVJGh8ff/PNN8+fPy/LcjqdNl4vh6YBsN3QNCanaBpXT3mmaYQQ1Wo1Eom88cYbw8PDc3NziqIYr+JI0wDYbmgak1M0jaunvNQ0QohisTg3N/f666+fOHGi9eLC1r9AmgaAu9A0JqdoGldPeaxpms1msVg8fvx4b2/vxMREJBJRVZWmAbDd0DQmp2gaV095rGmEEI1GQ9O04eHhgYGBmZmZeDxeqVSMV6wxjaYB4C40jckpmsbVU95rGiFEs9mcn58fHBw8evTowsLC6hcXNoemAeAuNI3JKZrG1VOebBohRLFYPHPmzJtvvnny5MlIJFIoFKzcVUPTAHAXmsbkFE3j6imvNo0QQpKksbGxvXv3njt3TlGUcrlseoqmAeAuNI3JKZrG1VMebppCobC4uNjb29vX13fp0iXjxYXNTdE0ANyFpjE5RdO4esrDTVMqlZaXl2dnZw8dOjQ2NhYMBguFgrkpmgaAu9A0JqdoGldPebtpdF2XZfnUqVP9/f0TExOJRKJarZq4sIamAeAuNI3JKZrG1VPebhrjttJ1fXR0dGBg4Ny5c6lUysTfDZoGgLvQNCanaBpXT3m+aYxTBQIBn8/X19cXDocLhUK756RpALgLTWNyiqZx9dQ2aZpyuXzx4sXe3t6hoaF4PN7uc6BoGgDuQtOYnKJpXD21TZqm2Wwmk8mzZ8/u27fv7NmziqK09Z8ATQPAXVaaRlGUXC5XsiaXyymKYstUNpu1a6p1qnw+b9epmLqmTCZj+1ShUPDkVDqdtvdUqqoWi8VSqZTP56PRqPEIlN/vb/3ztqZs/AK7+M0OgOetNE08Htc0LWmNqqrxeJwp904pimLvlCRJuq7bdSobp7x9W62ekmX58uXLBw4cGB4enpubUxSl86eSZdm4rbr4zQ6A5600jfGdK2WNpmmSJG2HKU3THHgqB04ZIeKcU6mqakwlk0kPTyUSidZUMplUVXVqaqqnp+f48ePRaNSIsGtOKYqyZso0Y0qSpC5+swPgeStNo+t6uVxuWFMul3Vdt2WqVCoZU5VKxZOncuZUsVg0pqrVqidPZUwlk0lnTtVqta2Yqtfr2Wx2fHy8r6/vzJkzmUxmM5+oUCjYdSpjStf1Ln6zA+B5XCNscoprhF09ldoe1wiv/ueNRiMSiYyMjPT19S0sLGzmqd1cIwzAXWgak1M0jauntmHTGL81Nzc3MDDg8/kkSSqVShu/uDBNA8BdaBqTUzSNq6e2Z9MIIdLp9MzMzL59+86cOaNp2sZ/YWgaAO5C05icomlcPbVtm6ZWqymKMjIycvDgwdnZ2Xw+v8FdNTQNAHehaUxO0TSuntq2TdNsNiuVSjweP3TokM/nW1pa2uDFhWkaAO5C05icomlcPbVtm0YI0Wg0SqWS3+/v7e09ceKELMtX+2tD0wBwF5rG5BRN4+qp7dw0QohGo5FMJk+cOHH06NHp6elcLrfuI1A0DQB3oWlMTtE0rp7a5k0jhKjVauFweGRk5MiRI8FgcN3nQNE0ANyFpjE5RdO4eoqmEUKUy+XZ2dne3l6fzyfL8pX/ddA0ANyFpjE5RdO4eoqmEUI0m81UKjU9Pf273/1uZmbmys9O0wBwF5rG5BRN4+opmsZQrVYlSRodHe3p6Zmfn8/n86t/l6YB4C40jckpmsbVUzSNodlsFovFYDDY09MzPj4eiURW/zdC0wBwF5rG5BRN4+opmqal0Wjk8/kzZ8709fVNTk7qut76QJoGgLvQNCanaBpXT9E0qzWbzXQ6PTQ01NfX5/f7i8Wi8bE0DQB3oWlMTtE0rp6iadao1+uhUMjn8/X29sbj8Wq1ajwsRdMAcBGaxuQUTePqKZpmjWazmc/n/X7/kSNHRkZGjLe3pGkAuAtNY3KKpnH1FE1zpXq9rijK1NTUvn0Hh4fnDh7M/eIX1UcfLf7kJ6VXXmlOT4tUyvypaBoAHUDTmJyiaVw9RdOsq1qtLi7GfvWrkZ07L//bv2U/8pHGzTc3b721+Zd/Kb75TfHmm0KSTJ6KpgHQATSNySmaxtVTXa+Hq01191T1uvD7q//1X6lbb238wR+IHTtWfr3rXeLv/k48/7yoVMR67w11DTQNgA6gaUxO0TSunup6PVxtqrunmp8XTz4pPvSh+vXXvyNojF+33CL+/d/FkSOiWGz7VDQNgA6gaUxO0TSunup6PVxtqrunGhgQn/2suOEGseZOGuPXddeJj35U/OAHZi6soWkAdMBK0yiKks1mi9Zks1lFURRFyeVyzpnK5XLGVD6ft+tUTF1TJpPx9lQ6nTamCoWCLVOqqlqfan2BJqb+938rd97ZuLJmWr9uvbX5H/9Rj0RK7S63bqsufrMD4HkrTROPxzVNS1qjqmo8HmfKvVOKotg7JUmSrut2ncrGKW/fVuam9uwpfPCDGzXNjTc277qrNjeXbndZlmXjturiNzsAnrfSNMY3wbQ1mqZJkiRJkqZpdk3ZeCpHTamqavupksmkXVOOOpUzb6vWqeyaSiQS3Z36n/8pfuhDGzXNTTc1//Zva/PzmXaXFUUxbqsufrMD4HkrTaPreqVSaVhTLpd1Xdd1vVwu2zVl46msT5VKJdunqtWqt0/lqKlisWjcgVGr1eyactSpCoWC6alXX21+8pNXDZodO8T73ie++MWmLJs8la7rXfxmB8DzuEbY5BTXCLt6qutX415tyq5TRaPRr33ta3fffffdd9/9xS9+cdeuXUZPpNPp/v5+458/8cQTMzMzqz/2rbfEffeJG29c/xrhd79bfOIT4mc/E9ls26cqco0wgK1H05icomlcPeX5pllaWrrjjjs+97nP7d69+1vf+taXv/zlkZGRVCp1+vTpp556avfu3bt37/7qV7/63HPPpVY9i0mWxf/9n/iXfxF//MfrNM1HPiIefFBcvChM/GdE0wDoAJrG5BRN4+qpbdI0+/btE0KEQqE9e/Y8/fTTi4uLJ0+e3Lt3r/EnH3nkkccffzwQCKz+cEkSzz8v/vVfxR13iFtuETfcIP7wD8V73ys+8Qnx4INieNjkqWgaAB1A05icomlcPbWtmkZV1UOHDj3++OOzs7Or/+QLL7zw8ssvh8PhNQvVqjh9WuzeLf7pnxp//uf1O++sf/7zzVdeEVf8wTbQNAA6gKYxOUXTuHpqWzXN0tLSj3/84/3796952tF3vvOdZ555Zt2/M5WKSKVEKFSanU1fvpyR5UY+L6wcjaYB0AE0jckpmsbVU9ukaT71qU995jOf+dKXvvSjH/1ocXGxXC4bf6ZcLh88ePDnP//58ePHN5gyQiSdTlv/AmkaAB1A05icomlcPbVNmubzn//8ww8//NRTT42OjpZKJeMP6Lp+9OjRp59+emxsbOMnV9M0ANyFpjE5RdO4emqbNI3x2NNqiUTC5/P99Kc/PXz4sCzLG0/RNADchaYxOUXTuHpqezZNrVbbu3fv/ffff+DAgXA4vLy8nMlkNviMNA0Ad6FpTE7RNK6e2p5NMzs7+41vfOPmm29+3/ve94EPfOCDH/zgQw89FIlErjZF0wBwF5rG5BRN4+opzzeNLMsDAwNr3jMyk8mcPXv2jVWmp6cLhcLVpmgaAO5C05icomlcPeX5prHlVDQNAHehaUxO0TSunnJaPdA0AGAdTWNyiqZx9ZTT6oGmAQDraBqTUzSNq6ecVg80DQBYR9OYnKJpXD3ltHqgaQDAOprG5BRN4+opp9UDTQMA1tE0JqdoGldPOa0eaBoAsI6mMTlF07h6ymn1QNMAgHU0jckpmsbVU06rB5oGAKyjaUxO0TSunnJaPdA0AGDdStPIspzL5YrW5HI5WZadNpXNZh04lclkbJ/K5/NOm1IUxfNThULBOVPpdNqxU9d8J3AAsGKlaeLxuKZpSWtUVY3H40y5d0pRFHunJEnSdd2uU9k45e3bymlTsiwbt1UXv9kB8Dyahql3cPLPaZrGvVM0DYAO2HHtPwIAAOB4NA0AAPACmgYAAHgBTQMAALyApgEAAF5A0wAAAC+gaQAAgBfQNAAAwAtoGgAA4AU0DQAA8AKaBgAAeAFNAwAAvICmAQAAXkDTAAAAL6BpAACAF9A0AADAC2gaAADgBTQNAADwApoGAAB4AU0DAAC8gKYBAABeQNMAAAAvoGkAAIAX0DQAAMALaBoAAOAFVzbN0tjYku2fZunXd+1YcdevN/MZxna2+xEAAGDbemfTjO3cin54Z9C8befYRh+yumc29xEAAGBb60DTvN0nrSR5O3E2+DTGR6xqGOMfcGcNAAC4mq1vmnU2jaq52v0uxu+uOcXW3IMEAAC8YqVp3vlwj235sG6/bBg1Yzt5oAkAALSpvaZZ7zKXa1zusv4dLBvc7bL067ve/q1Vn417aAAAwIbae+ypE01j/NZdV15WzF03AADgqrb8ehpzTbPmvpm3LyumagAAwFU4tmnauQIHAABsew597OnKNZ74BAAANrDlTdP2857WfSo3TQMAADbUlden2fjzrPsCezz2BAAANuLE1xG+8g9wjTAAANjYOk2z9klHlq37iNXqPrkipUy8QxQAANjW1r4vd6s/7C2INZGyZnzdu4fe8SH0DAAA2NDapgEAAHAjmgYAAHgBTQMAALyApgEAAF5A0wAAAC+gaQAAgBfQNAAAwAtoGgAA4AU0DQAA8AKaBgAAeAFNAwAAvICmAQAAXkDTAAAAL6BpAACAF9A0AADAC2gaAADgBTQNAADwApoGAAB4AU0DAAC8gKYBAABeQNMAAAAvoGkAAIAX0DQAAMALaBoAAOAFNA0AAPACmgYAAHgBTQMAALyApgEAAF5A0wAAAC+gaQAAgBf8f2ERKqSrfpM6AAAAAElFTkSuQmCC" alt="" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Understanding Quadratic Bézier Curve</title>
<script src="js/jquery.min.js"></script>
<style>
body { font-family: Arial, Helvetica, sans-serif; }
</style>
</head>
<body>
<h1>Understanding Quadratic Bézier Curve</h1> <div id="bezier-example-1" style="position:relative;">
<canvas class="curve" style="position:absolute;top:0;left:0;z-index:4;"></canvas>
<canvas class="animation" style="position:absolute;top:0;left:0;z-index:3;"></canvas>
<canvas class="points" style="position:absolute;top:0;left:0;z-index:2;"></canvas>
<canvas class="grid" style="position:absolute;top:0;left:0;z-index:1;"></canvas>
</div> <p id="bezier-example-1-t">t = <span>0</span></p> <script type="text/javascript">
$(function() { var CANVAS_WIDTH = 301;
var CANVAS_HEIGHT = 301;
var p1x = 20;
var p1y = 200;
var cx = 100;
var cy = 20;
var p2x = 280;
var p2y = 280; var $t = $('#bezier-example-1-t span');
$('#bezier-example-1').css({
width: CANVAS_WIDTH + 'px',
height: CANVAS_HEIGHT + 'px'
});
var gridCanvas = $('#bezier-example-1 .grid').get(0);
var gridContext = gridCanvas.getContext('2d');
gridCanvas.width = CANVAS_WIDTH;
gridCanvas.height = CANVAS_HEIGHT; var pointsCanvas = $('#bezier-example-1 .points').get(0);
var pointsContext = pointsCanvas.getContext('2d');
pointsCanvas.width = CANVAS_WIDTH;
pointsCanvas.height = CANVAS_HEIGHT; var animationCanvas = $('#bezier-example-1 .animation').get(0);
var animationContext = animationCanvas.getContext('2d');
animationCanvas.width = CANVAS_WIDTH;
animationCanvas.height = CANVAS_HEIGHT; var curveCanvas = $('#bezier-example-1 .curve').get(0);
var curveContext = curveCanvas.getContext('2d');
curveCanvas.width = CANVAS_WIDTH;
curveCanvas.height = CANVAS_HEIGHT;
curveContext.strokeStyle = "#777";
curveContext.lineWidth = 2;
curveContext.beginPath();
curveContext.moveTo(p1x, p1y);
curveContext.stroke(); drawGrid();
drawSetup();
setInterval(updateDemo, 1000/30); var t = 0;
var d = 1; // direction function updateDemo() {
if (t > 1 || t < 0) {
d *= -1; // change direction
curveContext.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
curveContext.beginPath();
}
t += 0.01 * d; // continue moving
$t.html(Math.round(t*100)/100);
// update values
var c1x = p1x + (cx - p1x) * t;
var c1y = p1y + (cy - p1y) * t;
var c2x = cx + (p2x - cx) * t;
var c2y = cy + (p2y - cy) * t;
var tx = c1x + (c2x - c1x) * t;
var ty = c1y + (c2y - c1y) * t; animationContext.save();
// clear old sketch
animationContext.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
// draw new line
animationContext.beginPath();
animationContext.strokeStyle = '#aaa';
animationContext.lineWidth = 1;
animationContext.moveTo(c1x, c1y);
animationContext.lineTo(c2x, c2y);
animationContext.stroke();
// draw points on lines
drawPoint(animationContext, c1x, c1y, 2, '#0f0');
drawPoint(animationContext, c2x, c2y, 2, '#0f0');
// draw point on curve
drawPoint(animationContext, tx, ty, 3, '#f0f');
animationContext.restore(); // draw the new Bézier curve segment
curveContext.lineTo(tx, ty);
curveContext.stroke();
} function drawSetup() { pointsContext.save();
// lines between p1, c and p2
pointsContext.strokeStyle = "#ddd";
pointsContext.lineWidth = 2;
pointsContext.beginPath();
pointsContext.moveTo(p1x, p1y);
pointsContext.lineTo(cx, cy);
pointsContext.lineTo(p2x, p2y);
pointsContext.stroke();
pointsContext.closePath();
// quadratic Bézier curve
pointsContext.beginPath();
pointsContext.strokeStyle = '#999';
pointsContext.lineWidth = 1;
pointsContext.moveTo(p1x, p1y);
pointsContext.quadraticCurveTo(cx,cy,p2x, p2y);
pointsContext.stroke();
pointsContext.restore(); // circles marking p1, c and p2
drawPoint(pointsContext, p1x, p1y, 5, '#00f');
drawPoint(pointsContext, cx, cy, 5, '#f00');
drawPoint(pointsContext, p2x, p2y, 5, '#00f');
pointsContext.fillText("P1", p1x+10, p1y+10);
pointsContext.fillText("C", cx+10, cy-5);
pointsContext.fillText("P2", p2x-20, p2y+10);
} function drawPoint(ctx, x, y, radius, color) {
ctx.save();
ctx.fillStyle = color;
ctx.beginPath();
ctx.arc(x, y, radius, 2 * Math.PI, false);
ctx.fill();
ctx.closePath();
ctx.restore();
} function drawGrid() {
gridContext.save();
gridContext.strokeStyle = '#ddd';
gridContext.lineWidth = 1;
for (var i = 0; i < CANVAS_HEIGHT; i += 20) {
gridContext.beginPath();
gridContext.moveTo(0, i);
gridContext.lineTo(CANVAS_WIDTH, i);
gridContext.stroke();
}
for (var i = 0; i < CANVAS_WIDTH; i += 20) {
gridContext.beginPath();
gridContext.moveTo(i, 0);
gridContext.lineTo(i, CANVAS_HEIGHT);
gridContext.stroke();
gridContext.closePath();
}
gridContext.restore();
}
});
</script>
</body>
</html>
canvas贝塞尔曲线 - 1的更多相关文章
- html5 canvas贝塞尔曲线篇(下)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- html5 canvas贝塞尔曲线篇(上)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- canvas贝塞尔曲线
贝塞尔曲线 Bézier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线. 曲线定义:起始点.终止点.控制点.通过调整控制点,贝塞尔曲线的形状会发生变化. 1962年,法国数学家Pierr ...
- HTML5 Canvas ( 贝塞尔曲线, 一片星空加绿地 ) quadraticCurveTo, bezierCurveTo
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- canvas贝塞尔曲线 - 2
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAugAAAH7CAIAAAARkv1vAAAgAElEQVR4nOy9e5Ab13ngO7Z37dlsaM
- canvas-js贝塞尔曲线代码在线生成工具
详细内容请点击 canvas贝塞尔曲线代码在线生成工具 可以快速生成二次.三次贝塞尔曲线的源码生成器,方便经常使用到canvas画图的同学使用,可以直接预览效果随意画出自己想要的图像. 生成源码效果预 ...
- 用html5的canvas画布绘制贝塞尔曲线
查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...
- canvas绘制二次贝塞尔曲线----演示二次贝塞尔四个参数的作用
canvas中绘制二次贝塞尔曲线的方法为ctx.quadraticCurveTo(x1,y1,x2,y2); 四个参数分别为两个控制点的坐标.开始点即当前canvas中目前的点,如果想从指定的点开始, ...
- canvas绘制贝塞尔曲线
原文:canvas绘制贝塞尔曲线 1.绘制二次方贝塞尔曲线 quadraticCurveTo(cp1x,cp1y,x,y); 其中参数cp1x和cp1y是控制点的坐标,x和y是终点坐标 数学公式表示如 ...
随机推荐
- h5应用缓存及收藏时Icon显示
h5应用实现离线缓存,加载后,断网仍然可以继续使用. 一.需求 转行做h5,目前做赛道游戏,动手做了个赛道编辑器web版的,由于web版需要开启服务器才能使用,策划要想回家使用就要发布到外网服务器了, ...
- Docker 基础 : 数据管理
用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作.容器中管理数据主要有两种方式:数据 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇
<高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
- JSON扩展类——JsonHelper
1.引用Newtonsoft.Json库(JSON.NET). 2.复制粘贴JsonHelper吧. 源代码: using System; using System.Collections.Gener ...
- [Tool] github 入手教程
简单的介绍一下 Github 的基本操作. 主页:https://github.com/ 首先自然是在 GitHub 注册一个帐号了.然后开始正文吧. Git 基本介绍 Git 是属于分布式版本控制系 ...
- QML 从无到有 2 (移动适配)
随着项目深入,需要移植到安卓上,问题来了,QML安卓适配! 幸好PC端程序和手机屏幕长宽比例相似.虽然单位像素,尺寸不同,通过比例缩放,可以实现组件PC和安卓通用代码. 第一步:定义全局的转换函数(3 ...
- SHA-256算法
SHA-.h #ifndef _SHA_256_H #define _SHA_256_H #include<iostream> using namespace std; typedef u ...
- 数据库表结构设计方法及原则(li)
数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满 ...
- PHP 装饰器模式
装饰器模式:是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能. [装饰器模式中主要角色] 抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这 ...
- mysql can't create threads in threadpool
最近,我们在券商端的mysql运行一段时间后,发生mysql can't create threads in threadpool,如下所示: 据官网一个报告显示,目测是一个bug,内存紧张导致,那天 ...