Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Cubic Bezier Curve Problem

  1. Feb 1, 2014 #1

    I have a program that, given a value for (x), needs to find the corresponding y-value along a cubic Bezier curve. So long as the Bezier does not switch direction in (x), there is always one, and only one, value of (y) for every value of (x).

    In solving for (y), I discovered that the solution was a cubic (not surprising, since the very name of this type of Bezier is "cubic"). Now, my experience with quadratics and what cubics I run into rarely, is that the way to find out which solution to use is to just test it...Most often, one will always work while the others will not, or in some rare cases all of them will work...Assuming that the values are always Real.

    At any rate, after testing the program, I found that, indeed, none of the three solutions always offered a Real result. Sometimes all three were Real, sometimes a mix of Real and Complex, other times all Complex. So my conundrum is this: I need a scalar (Real) value for (y), but when I move one of the control points of the Bezier, I run into a majority of cases where the result for (y) is complex, and no solution reliably results in a Real, scalar value for it. Therefore, there is no way to test for which solution to use.

    My question is, how am I to interpret a Complex result in this situation? It is a vector with an Imaginary component, when I need a scalar value. Proofing my math results suggests that I have the correct solutions, and whenever a Real value results, that (y) value is always correct. As far as I know, a Complex value may indicate that something is going on in a separate dimension, so I assume that since the Bezier I am using is 2-dimensional, that the Complex result is telling me that there is activity in a third, orthogonal direction. But that makes no sense as far as this Bezier is concerned.

    I am stumped. :(

    Any guidance would be really helpful.

    Many thanks!
  2. jcsd
  3. Feb 1, 2014 #2


    User Avatar
    Science Advisor

    I could use some more detail about what you are doing. Standard form for a plane curve is P=F(t), where P = (x,y), F(t) is a two dimensional cubic defined by control points, and 0≤t≤1. It is not at all surprising that you can't get solutions in some cases.
  4. Feb 1, 2014 #3


    User Avatar
    Science Advisor
    Homework Helper

    If you have a cubic equation with all real coefficients, and you got "three complex roots", that is just wrong. There is always one real root, unless coefficient of ##x^3## is 0 and the equation was not really a cubic.

    Find the bug in the code, and try again!
  5. Feb 1, 2014 #4
    Yes you are correct. I went back and plugged more values into my MathCAD solution and I always come up with at least one real solution. But it can jump from solution to solution. So in that respect, I'll need to test all three on every control point change. But what to do when you have three reel roots? Should it even happen?
  6. Feb 7, 2014 #5
    mathman> I think you are correct. This is the first time I have ever run into the problem where one root does not suffice for all cases in a particular problem. I have instead, resorted to an approximating numerical method which works fine. Bummer, since I always like analytical solutions over numerical ones.

    I'm not sure but I think the problem has its source in that a Bezier curve is never limited to not crossing back over itself in (x). Since a Bezier behaves without such a limit, it is perhaps unreasonable to assume that a general analytical solution COULD be limited in that fashion, since it cannot address a local region of a Bezier where there is always one (y) for every (x). That is not the global, general behavior of a Bezier, so the analytical solution will not behave that way either, without some special modifications, whatever those might be, if they even exist.
    Last edited: Feb 7, 2014
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook