Skip to content

Instantly share code, notes, and snippets.

@carlos-adir
Last active March 26, 2024 20:31
Show Gist options
  • Save carlos-adir/12b3ed11063d66c57a4c3361b5a263cd to your computer and use it in GitHub Desktop.
Save carlos-adir/12b3ed11063d66c57a4c3361b5a263cd to your computer and use it in GitHub Desktop.
Describes Circle and Hyperbola with Rational Bezier Curves
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Rational Bezier Curve"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Circle\n",
"\n",
"It's possible to describe a segment of a circle by using Rational Bezier Curve.\n",
"\n",
"$$\n",
"\\cos^2 x + \\sin^2 x = 1\n",
"$$\n",
"\n",
"These functions on $t$ satisfies the above equation\n",
"\n",
"$$\n",
"\\cosh x = \\dfrac{1-t^2}{1+t^2}\n",
"$$\n",
"$$\n",
"\\sinh x = \\dfrac{2t}{1+t^2}\n",
"$$\n",
"\n",
"So, we can draw it using rational beziers of degree 2."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from compmec.nurbs import GeneratorKnotVector, Curve\n",
"\n",
"knotvector = GeneratorKnotVector.bezier(2)\n",
"curve = Curve(knotvector)\n",
"curve.ctrlpoints = np.array([[1, 0], [1, 1], [0, 1]])\n",
"curve.weights = (1, 1, 2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we show the curve"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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XowfPx5ZWVmmQ3z5+flISUnBzJkzbVKzPenpv58OcUPW66moqEBzczMCAwPbLA8MDERubm6HY7RabYfra7XaHqvTVqzpxy89++yzCAkJaffBczTW9OLAgQN47733kJ2dbYMKbceaXuTn5+Pbb7/FvHnzkJKSgry8PCxZsgQGgwHJycm2KLtHWNOLuXPnoqKiAhMnToQgCGhqasITTzyB559/3hYl25Vr/f3U6XRoaGiAm5tbl97f4feUqHutXr0aW7duxRdffAG1Wi12OTZVU1OD+fPnY+PGjfDz8xO7HNEZjUYEBARgw4YNiI6Oxpw5c/DCCy9g/fr1Ypdmc+np6XjllVfw9ttv4/Dhw/j888+xc+dOrFy5UuzSnI7D7yn5+flBJpOhtLS0zfLS0lIEBQV1OCYoKMii9R2JNf1o9dprr2H16tX45ptvMHLkyJ4s0yYs7cXZs2dRWFiI2bNnm5YZjUYAgFwux6lTpzBgwICeLbqHWPO5CA4OhkKhgEwmMy0bMmQItFotGhsboVQqe7TmnmJNL5YvX4758+dj0aJFAIARI0agrq4Ojz32GF544YVffUaQM7nW309PT88u7yUBTrCnpFQqER0djbS0NNMyo9GItLQ0xMbGdjgmNja2zfoAkJqaes31HYk1/QCAV199FStXrsSuXbswZswYW5Ta4yztRWRkJI4fP47s7GzT15133ompU6ciOzvboZ98bM3nYsKECcjLyzMFMwCcPn0awcHBDhtIgHW9qK+vbxc8rWEtuNjtQ3v872e3TJcQ2datWwWVSiVs3rxZOHnypPDYY48J3t7eglarFQRBEObPny8899xzpvW///57QS6XC6+99pqQk5MjJCcnO92UcEv6sXr1akGpVAqfffaZcPHiRdNXTU2NWL9Ct7G0F7/kTLPvLO1FUVGR4OHhISQkJAinTp0SvvrqKyEgIED4y1/+Itav0G0s7UVycrLg4eEhfPzxx0J+fr6wZ88eYcCAAcIDDzwg1q/QbWpqaoQjR44IR44cEQAIa9asEY4cOSKcO3dOEARBeO6554T58+eb1m+dEv6nP/1JyMnJEdatW8cp4R158803hb59+wpKpVIYN26c8MMPP5h+NnnyZGHhwoVt1v/kk0+EQYMGCUqlUhg2bJiwc+dOG1fcsyzpR79+/QQA7b6Sk5NtX3gPsPSz8b+cKZQEwfJeHDx4UIiJiRFUKpUQEREh/PWvfxWamppsXHXPsKQXBoNB+POf/ywMGDBAUKvVQlhYmLBkyRLh8uXLti+8m+3du7fD//5bf/+FCxcKkydPbjdm1KhRglKpFCIiIoT333+/2+rhoyuIiMhuOPw5JSIich4MJSIishsMJSIishsMJSIishsMJSIishsMJSIishsMJSIishsMJSIishsMJSIishsMJSIishsMJSIishsMJSIishv/Dw59XQm3US2lAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from matplotlib import pyplot as plt\n",
"import numpy\n",
"\n",
"tsample = numpy.linspace(0, 1, 129)\n",
"xvals, yvals = np.transpose(curve(tsample)) # Circle\n",
"plt.plot(xvals, yvals)\n",
"plt.gca().set_aspect(\"equal\")\n",
"plt.grid()\n",
"plt.title(\"Quarter Circle\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Hyperbola\n",
"\n",
"It's possible to describe a segment of an hyperbola by using Rational Bezier Curve.\n",
"\n",
"See that\n",
"\n",
"$$\n",
"\\cosh^2 x - \\sinh^2 x = 1\n",
"$$\n",
"\n",
"These functions on $t$ satisfies the above equation\n",
"\n",
"$$\n",
"\\cosh x = \\dfrac{4+t^2}{4-t^2}\n",
"$$\n",
"$$\n",
"\\sinh x = \\dfrac{4t}{4-t^2}\n",
"$$\n",
"\n",
"So, we can draw it using rational beziers of degree 2."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Hyperbola')"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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n/vBBx/E1q1b8cgjj2DChAnIysrCqlWr0L9/f5SXl7e4RiIyPYYZImrQtGnTMH/+/AYP/P39GBsbG6xYsQL5+fkIDg7Ge++9B29vb/2Y/v3749ChQ0hISEBSUhKKiorg4eGBoKAgxMXFGVXTxo0bERcXhwULFsDW1hbR0dF48803DcZ88sknCAgIQFJSErZt2wYvLy/ExsY2u7vo6aefRm5uLj788EPs2bMH/fv3x7p167B582akpqYaVScRmZZC/H6bKhHRLStXrsQLL7yA7OxsdOvWzeB72dnZ6N69O958803MmzdPogqJiOrwmBkiqkcIgdWrV2PUqFH1ggwRkbnhbiYi0quoqMCXX36Jffv24dixY9ixY4fUJRERNYthhoj0CgoKEBUVhQ4dOuCVV17BQw89JHVJRETNMvqYme+//x5vvvkmDh8+jGvXrmHbtm2IjIxs0bw//fQTRo0ahYEDByIzM7MV5RIREREZMvqYmYqKCgQGBta73kNziouLMW3aNNx///3GLpKIiIioUXd0NpNCoWjxlpknnngCvXr1glKpxPbt25vcMqPRaKDRaPSPb9/0rXPnzq26TDkRERGZnhACZWVl6NKlC2xs2u+cI5McM/Ppp5/iwoULWLduHf71r381O37JkiVISEgwQWVERETU3i5duoSuXbu22/O3e5g5e/YsFixYgB9++AG2ti1bXGxsLGJiYvSPS0pK0K1bN2RlZcHZ2bnZ+bVaLfbt24cxY8ZApVK1unZLIbd+Afn1LLd+Afn1LLd+Afn1LLd+AeD69evo3bt3i35334l2DTO1tbWIiopCQkICevfu3eL51Go11Gp1vemdOnWCi4tLs/NrtVo4Ojqic+fOsnjDyK1fQH49y61fQH49y61fQH49y63f32vvQ0TaNcyUlZXh0KFDyMjIQHR0NIC641+EELC1tcU333yD++67rz1LICIiIivXrmHGxcUFx44dM5j2/vvv47vvvsOWLVvQvXv39lw8ERERyYDRYaa8vBznzp3TP87KykJmZiY6deqEbt26ITY2FleuXMFnn30GGxsbDBw40GB+Dw8P2Nvb15tORERE1BpGh5lDhw5hzJgx+se3D9SdPn06kpKScO3aNeTk5LRdhURERERNMDrMjB49Gk1dmiYpKanJ+RctWoRFixYZu1giIiKiBvGu2URERGTRGGaI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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"curve = Curve(knotvector)\n",
"curve.ctrlpoints = np.array([[1, 0], [1, 1/2], [5/3, 4/3]])\n",
"curve.weights = (4, 4, 3)\n",
"\n",
"tsample = numpy.linspace(0, 1, 129)\n",
"xvals, yvals = np.transpose(curve(tsample)) # Hyperbola\n",
"plt.plot(xvals, yvals)\n",
"plt.gca().set_aspect(\"equal\")\n",
"plt.grid()\n",
"plt.xlim(-0.05, 2)\n",
"plt.title(\"Hyperbola\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Drawing $\\cosh$ curve\n",
"\n",
"Plotting the curve $f(t) = \\cosh t$ directly using nurbs is impossible.\n",
"One way would be calling expensive functions like logarithm to do it:\n",
"\n",
"$$y = \\cosh x \\Rightarrow x = \\ln \\left(y + \\sqrt{y^2-1}\\right)$$"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Function $f(t) = \\\\cosh t$')"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tsample = np.linspace(0, 1, 129)\n",
"yvals, _ = np.transpose(curve(tsample))\n",
"xvals = np.log(yvals + np.sqrt(yvals**2 - 1))\n",
"\n",
"plt.plot(xvals, yvals)\n",
"plt.gca().set_aspect(\"equal\")\n",
"plt.grid()\n",
"plt.ylim(-0.05, 2)\n",
"plt.title(r\"Function $f(t) = \\cosh t$\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Approximating $\\cosh$ function\n",
"\n",
"The nurbs package can fits an arbitrary function:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Approx $f(t) = \\\\cosh t$')"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def cosh(x):\n",
" return np.cosh(x)\n",
"\n",
"knotvector = GeneratorKnotVector.uniform(degree=3, npts=10) # in [0, 1]\n",
"knotvector.scale(4) # interval [0, 4]\n",
"knotvector.shift(-2) # interval [-2, 2]\n",
"curve = Curve(knotvector)\n",
"curve.fit(cosh)\n",
"\n",
"tsample = np.linspace(-2, 2, 129)\n",
"plt.plot(tsample, curve(tsample))\n",
"plt.gca().set_aspect(\"equal\")\n",
"plt.grid()\n",
"plt.ylim(-0.05, 4)\n",
"plt.title(r\"Approx $f(t) = \\cosh t$\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.10.11"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment