Understanding Bezier Curves vs. Circular/Elliptical/Other Arcs












1












$begingroup$


From what I've read, you cannot construct an elliptical or circular arc with a single bezier curve (though I read maybe you can if the arc is less than 1/4 of a circle or something small like that, or maybe it approximates it close enough).



I would like to know in detail how to think about curves in the general sense, whether the curve be bezier curves or elliptical or circular arcs. I would like to apply this to computer formulas.




  1. The first part of my question is, why you can't use (cubic) bezier curves to model circular/elliptical arcs.

  2. The second part is, if you can combine multiple (cubic) bezier curves to define an elliptical/circular arc, and if so, if there is a pattern or formula to it.

  3. If there are any classes of arcs or curves that are outside of these two that these two cannot model. That would at least introduce me to the idea of what is not possible with these in terms of modeling curves.


The reason for asking is because I was initially under the assumption that all curves were about the same and that they could be modeled by bezier curves, which turns out to be incorrect.



I also just read this:




Maybe you already know this, but it's impossible to convert nurbs to bezier splines exactly because nurbs are rational functions, and bezier splines are polynomials.




I would like to know as part of this if there is any way to transform a NURBS curve into a cubic bezier curve, similar to the other above points. Not necessarily how exactly to do it, but just to know if it is possible to get started.










share|cite|improve this question











$endgroup$

















    1












    $begingroup$


    From what I've read, you cannot construct an elliptical or circular arc with a single bezier curve (though I read maybe you can if the arc is less than 1/4 of a circle or something small like that, or maybe it approximates it close enough).



    I would like to know in detail how to think about curves in the general sense, whether the curve be bezier curves or elliptical or circular arcs. I would like to apply this to computer formulas.




    1. The first part of my question is, why you can't use (cubic) bezier curves to model circular/elliptical arcs.

    2. The second part is, if you can combine multiple (cubic) bezier curves to define an elliptical/circular arc, and if so, if there is a pattern or formula to it.

    3. If there are any classes of arcs or curves that are outside of these two that these two cannot model. That would at least introduce me to the idea of what is not possible with these in terms of modeling curves.


    The reason for asking is because I was initially under the assumption that all curves were about the same and that they could be modeled by bezier curves, which turns out to be incorrect.



    I also just read this:




    Maybe you already know this, but it's impossible to convert nurbs to bezier splines exactly because nurbs are rational functions, and bezier splines are polynomials.




    I would like to know as part of this if there is any way to transform a NURBS curve into a cubic bezier curve, similar to the other above points. Not necessarily how exactly to do it, but just to know if it is possible to get started.










    share|cite|improve this question











    $endgroup$















      1












      1








      1





      $begingroup$


      From what I've read, you cannot construct an elliptical or circular arc with a single bezier curve (though I read maybe you can if the arc is less than 1/4 of a circle or something small like that, or maybe it approximates it close enough).



      I would like to know in detail how to think about curves in the general sense, whether the curve be bezier curves or elliptical or circular arcs. I would like to apply this to computer formulas.




      1. The first part of my question is, why you can't use (cubic) bezier curves to model circular/elliptical arcs.

      2. The second part is, if you can combine multiple (cubic) bezier curves to define an elliptical/circular arc, and if so, if there is a pattern or formula to it.

      3. If there are any classes of arcs or curves that are outside of these two that these two cannot model. That would at least introduce me to the idea of what is not possible with these in terms of modeling curves.


      The reason for asking is because I was initially under the assumption that all curves were about the same and that they could be modeled by bezier curves, which turns out to be incorrect.



      I also just read this:




      Maybe you already know this, but it's impossible to convert nurbs to bezier splines exactly because nurbs are rational functions, and bezier splines are polynomials.




      I would like to know as part of this if there is any way to transform a NURBS curve into a cubic bezier curve, similar to the other above points. Not necessarily how exactly to do it, but just to know if it is possible to get started.










      share|cite|improve this question











      $endgroup$




      From what I've read, you cannot construct an elliptical or circular arc with a single bezier curve (though I read maybe you can if the arc is less than 1/4 of a circle or something small like that, or maybe it approximates it close enough).



      I would like to know in detail how to think about curves in the general sense, whether the curve be bezier curves or elliptical or circular arcs. I would like to apply this to computer formulas.




      1. The first part of my question is, why you can't use (cubic) bezier curves to model circular/elliptical arcs.

      2. The second part is, if you can combine multiple (cubic) bezier curves to define an elliptical/circular arc, and if so, if there is a pattern or formula to it.

      3. If there are any classes of arcs or curves that are outside of these two that these two cannot model. That would at least introduce me to the idea of what is not possible with these in terms of modeling curves.


      The reason for asking is because I was initially under the assumption that all curves were about the same and that they could be modeled by bezier curves, which turns out to be incorrect.



      I also just read this:




      Maybe you already know this, but it's impossible to convert nurbs to bezier splines exactly because nurbs are rational functions, and bezier splines are polynomials.




      I would like to know as part of this if there is any way to transform a NURBS curve into a cubic bezier curve, similar to the other above points. Not necessarily how exactly to do it, but just to know if it is possible to get started.







      circle curves bezier-curve






      share|cite|improve this question















      share|cite|improve this question













      share|cite|improve this question




      share|cite|improve this question








      edited Jan 15 at 22:04









      Jyrki Lahtonen

      110k13171386




      110k13171386










      asked Jan 13 at 19:46









      Lance PollardLance Pollard

      1,358926




      1,358926






















          2 Answers
          2






          active

          oldest

          votes


















          1












          $begingroup$

          For a point on a Bézier curve of degree $n$, the $x$ and $y$ coordinates are expressed by $n$-th degree polynomial functions of some parameter $t$, say $x=a(t)$ and $y=b(t)$. If the Bézier curve is a circle of radius $1$ centered at the origin, then $[a(t)]^2 + [b(t)]^2 = 1$ for all values of $t$. The left-hand side is a polynomial of degree $2n$, so it can't be identically equal to $1$ (unless it's constant, independent of $t$, which is an uninteresting corner case). So, an exact representation of a circle is not possible.



          A NURBS curve can be expressed exactly as a string of Bézier curves if and only if all of its weights are equal. If the weights are equal, then the "rational" quality of the NURBS curve degenerates, and it becomes a regular (polynomial) b-spline. In that case, you can divide the curve into its Bézier pieces using Boehm's algorithm, as described here.



          There are many curves for which you can't write parametric equations in any form, so certainly not in polynomial (Bézier) form. For example, the "curve" $xy=1$, or any other curve with several disconnected pieces.



          On the other hand, there is a mathematical theorem (the Weierstrass approximation theorem) that says you can approximate any continuous function as closely as you like by a polynomial. This implies that any parametric curve can be approximated as closely as you like by using a single Bézier curve of sufficiently high degree. However, in practice, instead of using a single Bézier curve with high degree, you'd typically use a string of quadratic or cubic Bézier curves strung end-to-end. In other words, you'd use a spline curve. You can look up "spline" to learn more.



          You'll find lots of info if you search for "approximate a circle with Bezier curve". For example: here.






          share|cite|improve this answer











          $endgroup$





















            0












            $begingroup$

            A cubic Bezier curve is expressed by polynomials of degree 3. An arc cannot be expressed by any polynomial function, the best you can do is a Taylor series, which is a limit of infinite-dimensional polynomials. But for arcs that are sufficiently short (in terms of the angle), a cubic Bezier curve will be a good approximation. Even a parabola might work, or even a straight line.



            Stitching multiple Bezier curves together should work for the general case, but there are better and more efficient algorithms for producing arcs. Sorry but I can't provide a more comprehensive answer right now.



            There are also higher-dimensional Bezier curves ($n>3$), but I don't know anything about their properties so I won't say anything more about them.






            share|cite|improve this answer









            $endgroup$













              Your Answer





              StackExchange.ifUsing("editor", function () {
              return StackExchange.using("mathjaxEditing", function () {
              StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
              StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
              });
              });
              }, "mathjax-editing");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "69"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              noCode: true, onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3072440%2funderstanding-bezier-curves-vs-circular-elliptical-other-arcs%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              1












              $begingroup$

              For a point on a Bézier curve of degree $n$, the $x$ and $y$ coordinates are expressed by $n$-th degree polynomial functions of some parameter $t$, say $x=a(t)$ and $y=b(t)$. If the Bézier curve is a circle of radius $1$ centered at the origin, then $[a(t)]^2 + [b(t)]^2 = 1$ for all values of $t$. The left-hand side is a polynomial of degree $2n$, so it can't be identically equal to $1$ (unless it's constant, independent of $t$, which is an uninteresting corner case). So, an exact representation of a circle is not possible.



              A NURBS curve can be expressed exactly as a string of Bézier curves if and only if all of its weights are equal. If the weights are equal, then the "rational" quality of the NURBS curve degenerates, and it becomes a regular (polynomial) b-spline. In that case, you can divide the curve into its Bézier pieces using Boehm's algorithm, as described here.



              There are many curves for which you can't write parametric equations in any form, so certainly not in polynomial (Bézier) form. For example, the "curve" $xy=1$, or any other curve with several disconnected pieces.



              On the other hand, there is a mathematical theorem (the Weierstrass approximation theorem) that says you can approximate any continuous function as closely as you like by a polynomial. This implies that any parametric curve can be approximated as closely as you like by using a single Bézier curve of sufficiently high degree. However, in practice, instead of using a single Bézier curve with high degree, you'd typically use a string of quadratic or cubic Bézier curves strung end-to-end. In other words, you'd use a spline curve. You can look up "spline" to learn more.



              You'll find lots of info if you search for "approximate a circle with Bezier curve". For example: here.






              share|cite|improve this answer











              $endgroup$


















                1












                $begingroup$

                For a point on a Bézier curve of degree $n$, the $x$ and $y$ coordinates are expressed by $n$-th degree polynomial functions of some parameter $t$, say $x=a(t)$ and $y=b(t)$. If the Bézier curve is a circle of radius $1$ centered at the origin, then $[a(t)]^2 + [b(t)]^2 = 1$ for all values of $t$. The left-hand side is a polynomial of degree $2n$, so it can't be identically equal to $1$ (unless it's constant, independent of $t$, which is an uninteresting corner case). So, an exact representation of a circle is not possible.



                A NURBS curve can be expressed exactly as a string of Bézier curves if and only if all of its weights are equal. If the weights are equal, then the "rational" quality of the NURBS curve degenerates, and it becomes a regular (polynomial) b-spline. In that case, you can divide the curve into its Bézier pieces using Boehm's algorithm, as described here.



                There are many curves for which you can't write parametric equations in any form, so certainly not in polynomial (Bézier) form. For example, the "curve" $xy=1$, or any other curve with several disconnected pieces.



                On the other hand, there is a mathematical theorem (the Weierstrass approximation theorem) that says you can approximate any continuous function as closely as you like by a polynomial. This implies that any parametric curve can be approximated as closely as you like by using a single Bézier curve of sufficiently high degree. However, in practice, instead of using a single Bézier curve with high degree, you'd typically use a string of quadratic or cubic Bézier curves strung end-to-end. In other words, you'd use a spline curve. You can look up "spline" to learn more.



                You'll find lots of info if you search for "approximate a circle with Bezier curve". For example: here.






                share|cite|improve this answer











                $endgroup$
















                  1












                  1








                  1





                  $begingroup$

                  For a point on a Bézier curve of degree $n$, the $x$ and $y$ coordinates are expressed by $n$-th degree polynomial functions of some parameter $t$, say $x=a(t)$ and $y=b(t)$. If the Bézier curve is a circle of radius $1$ centered at the origin, then $[a(t)]^2 + [b(t)]^2 = 1$ for all values of $t$. The left-hand side is a polynomial of degree $2n$, so it can't be identically equal to $1$ (unless it's constant, independent of $t$, which is an uninteresting corner case). So, an exact representation of a circle is not possible.



                  A NURBS curve can be expressed exactly as a string of Bézier curves if and only if all of its weights are equal. If the weights are equal, then the "rational" quality of the NURBS curve degenerates, and it becomes a regular (polynomial) b-spline. In that case, you can divide the curve into its Bézier pieces using Boehm's algorithm, as described here.



                  There are many curves for which you can't write parametric equations in any form, so certainly not in polynomial (Bézier) form. For example, the "curve" $xy=1$, or any other curve with several disconnected pieces.



                  On the other hand, there is a mathematical theorem (the Weierstrass approximation theorem) that says you can approximate any continuous function as closely as you like by a polynomial. This implies that any parametric curve can be approximated as closely as you like by using a single Bézier curve of sufficiently high degree. However, in practice, instead of using a single Bézier curve with high degree, you'd typically use a string of quadratic or cubic Bézier curves strung end-to-end. In other words, you'd use a spline curve. You can look up "spline" to learn more.



                  You'll find lots of info if you search for "approximate a circle with Bezier curve". For example: here.






                  share|cite|improve this answer











                  $endgroup$



                  For a point on a Bézier curve of degree $n$, the $x$ and $y$ coordinates are expressed by $n$-th degree polynomial functions of some parameter $t$, say $x=a(t)$ and $y=b(t)$. If the Bézier curve is a circle of radius $1$ centered at the origin, then $[a(t)]^2 + [b(t)]^2 = 1$ for all values of $t$. The left-hand side is a polynomial of degree $2n$, so it can't be identically equal to $1$ (unless it's constant, independent of $t$, which is an uninteresting corner case). So, an exact representation of a circle is not possible.



                  A NURBS curve can be expressed exactly as a string of Bézier curves if and only if all of its weights are equal. If the weights are equal, then the "rational" quality of the NURBS curve degenerates, and it becomes a regular (polynomial) b-spline. In that case, you can divide the curve into its Bézier pieces using Boehm's algorithm, as described here.



                  There are many curves for which you can't write parametric equations in any form, so certainly not in polynomial (Bézier) form. For example, the "curve" $xy=1$, or any other curve with several disconnected pieces.



                  On the other hand, there is a mathematical theorem (the Weierstrass approximation theorem) that says you can approximate any continuous function as closely as you like by a polynomial. This implies that any parametric curve can be approximated as closely as you like by using a single Bézier curve of sufficiently high degree. However, in practice, instead of using a single Bézier curve with high degree, you'd typically use a string of quadratic or cubic Bézier curves strung end-to-end. In other words, you'd use a spline curve. You can look up "spline" to learn more.



                  You'll find lots of info if you search for "approximate a circle with Bezier curve". For example: here.







                  share|cite|improve this answer














                  share|cite|improve this answer



                  share|cite|improve this answer








                  edited Jan 14 at 2:03

























                  answered Jan 14 at 1:22









                  bubbabubba

                  30.7k33188




                  30.7k33188























                      0












                      $begingroup$

                      A cubic Bezier curve is expressed by polynomials of degree 3. An arc cannot be expressed by any polynomial function, the best you can do is a Taylor series, which is a limit of infinite-dimensional polynomials. But for arcs that are sufficiently short (in terms of the angle), a cubic Bezier curve will be a good approximation. Even a parabola might work, or even a straight line.



                      Stitching multiple Bezier curves together should work for the general case, but there are better and more efficient algorithms for producing arcs. Sorry but I can't provide a more comprehensive answer right now.



                      There are also higher-dimensional Bezier curves ($n>3$), but I don't know anything about their properties so I won't say anything more about them.






                      share|cite|improve this answer









                      $endgroup$


















                        0












                        $begingroup$

                        A cubic Bezier curve is expressed by polynomials of degree 3. An arc cannot be expressed by any polynomial function, the best you can do is a Taylor series, which is a limit of infinite-dimensional polynomials. But for arcs that are sufficiently short (in terms of the angle), a cubic Bezier curve will be a good approximation. Even a parabola might work, or even a straight line.



                        Stitching multiple Bezier curves together should work for the general case, but there are better and more efficient algorithms for producing arcs. Sorry but I can't provide a more comprehensive answer right now.



                        There are also higher-dimensional Bezier curves ($n>3$), but I don't know anything about their properties so I won't say anything more about them.






                        share|cite|improve this answer









                        $endgroup$
















                          0












                          0








                          0





                          $begingroup$

                          A cubic Bezier curve is expressed by polynomials of degree 3. An arc cannot be expressed by any polynomial function, the best you can do is a Taylor series, which is a limit of infinite-dimensional polynomials. But for arcs that are sufficiently short (in terms of the angle), a cubic Bezier curve will be a good approximation. Even a parabola might work, or even a straight line.



                          Stitching multiple Bezier curves together should work for the general case, but there are better and more efficient algorithms for producing arcs. Sorry but I can't provide a more comprehensive answer right now.



                          There are also higher-dimensional Bezier curves ($n>3$), but I don't know anything about their properties so I won't say anything more about them.






                          share|cite|improve this answer









                          $endgroup$



                          A cubic Bezier curve is expressed by polynomials of degree 3. An arc cannot be expressed by any polynomial function, the best you can do is a Taylor series, which is a limit of infinite-dimensional polynomials. But for arcs that are sufficiently short (in terms of the angle), a cubic Bezier curve will be a good approximation. Even a parabola might work, or even a straight line.



                          Stitching multiple Bezier curves together should work for the general case, but there are better and more efficient algorithms for producing arcs. Sorry but I can't provide a more comprehensive answer right now.



                          There are also higher-dimensional Bezier curves ($n>3$), but I don't know anything about their properties so I won't say anything more about them.







                          share|cite|improve this answer












                          share|cite|improve this answer



                          share|cite|improve this answer










                          answered Jan 13 at 21:24









                          Cuspy CodeCuspy Code

                          32626




                          32626






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Mathematics Stack Exchange!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              Use MathJax to format equations. MathJax reference.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3072440%2funderstanding-bezier-curves-vs-circular-elliptical-other-arcs%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Human spaceflight

                              Can not write log (Is /dev/pts mounted?) - openpty in Ubuntu-on-Windows?

                              張江高科駅