{(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)} defining a cubic bezier.
with Xi, Yi all expressed in Qm.n
Define an efficient, closed-form expression/constant time algorithm
to characterize (describe) the curve.
Nice and terse -- like on an EXAM!
Started by ●July 27, 2015
Reply by ●July 27, 20152015-07-27
On Mon, 27 Jul 2015 06:53:11 -0700, Don Y wrote:> {(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)} defining a cubic bezier. > with Xi, Yi all expressed in Qm.n > > Define an efficient, closed-form expression/constant time algorithm to > characterize (describe) the curve.Yup. Have fun. Are these the control points, or four points on the curve? If they're the control points then I'm pretty sure that you can just scrape the real- number answer out of Wikipedia and it'll work right. It is, IIRC, straightforward adds and multiplies, so converting it to Qm.n should be easy. -- Tim Wescott Wescott Design Services http://www.wescottdesign.com
Reply by ●July 28, 20152015-07-28
On 7/27/2015 10:48 AM, Tim Wescott wrote:> On Mon, 27 Jul 2015 06:53:11 -0700, Don Y wrote: > >> {(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)} defining a cubic bezier. >> with Xi, Yi all expressed in Qm.n >> >> Define an efficient, closed-form expression/constant time algorithm to >> characterize (describe) the curve. > > Yup. Have fun. > > Are these the control points, or four points on the curve?If they were "four points on the curve", then they wouldn't define *A* cubic bezier but, rather, a *family* of curves. Given that there are 4 points and that you need 4 points to uniquely define *a* cubic bezier, that seems the most obvious explanation. I.e., if encountered on an *exam*, you'd have to make some educated guess as to its meaning, right? How would the rest of the question make sense in the context of a "family of curves"? [You should be able to *casually* come up with curves where you can put all four points on a curve and dramatically change the characteristics of that curve without dislodging any of those points. Solution left as an exercise for the reader -- if you spend more than 10 seconds on it, you don't understand the problem!]> If they're > the control points then I'm pretty sure that you can just scrape the real- > number answer out of Wikipedia and it'll work right.What "real number answer"? The only "numbers" that could apply *might* be things like total length of curve or net displacement, etc. Those are aspects of a particular curve but don't characterize/describe it. If Pi=(Xi,Yi) then consider the curves: {P1, P2, P3, P4} -- as initially "given" {P1, P2, P4, P3} {P1, P3, P2, P4} {P1, P3, P4, P2} {P1, P4, P2, P3} {P1, P4, P3, P2} etc. Each use the same set of four points yet yield very different curves. Even holding the endpoints constant and swapping the two intermediary control points yields very different curves: {P1, P2, P3, P4} {P1, P3, P2, P4} that would be described differently. (try real numbers as examples)> It is, IIRC, > straightforward adds and multiplies, so converting it to Qm.n should be > easy.Qm.n is an acknowledgement that we don't work in a continuous space. E.g., your "display" doesn't have infinite "precision"/resolution. So, while a curve might mathematically pass through (or *originate* at) the point (1/9, 1/3), you will only be able to plot points in that *vicinity*. How close you can get to that point depends on the values of 'm' and 'n'. Furthermore, any "characterization" of the curve would have to be well-behaved in boundary conditions. To create a concrete (non-abstract) example, consider how you would describe the curve {(0,0),(0,2),(1,2),(1,0)} in Q10.5? Then, again, in Q15.0! (oops! not quite so easy, eh? In fact, the very *nature* of the curve changes dramatically!) Assuming a continuous, infinitely resolvable domain means you end up with bugs when reality and math diverge. [Of course, I could have mentioned this -- along with the specific examples that I've been using in my ongoing email discussions on the subject -- but then I would be considered as too verbose or having obfuscated the question by including too much detail. All of which could have clarified the problem by explicitly pointing out the issues that folks invariably *wouldn't* have noticed from a CASUAL read. I'm sure those same folks would interpret this a posteriori explanation as too verbose, as well! And, try as I might, I simply couldn't figure out how to express the math as Haiku...]
Reply by ●July 28, 20152015-07-28
On Tue, 28 Jul 2015 00:04:12 -0700, Don Y wrote:> On 7/27/2015 10:48 AM, Tim Wescott wrote: >> On Mon, 27 Jul 2015 06:53:11 -0700, Don Y wrote: >> >>> {(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)} defining a cubic bezier. >>> with Xi, Yi all expressed in Qm.n >>> >>> Define an efficient, closed-form expression/constant time algorithm to >>> characterize (describe) the curve. >> >> Yup. Have fun. >> >> Are these the control points, or four points on the curve? > > If they were "four points on the curve", then they wouldn't define *A* > cubic bezier but, rather, a *family* of curves. Given that there are 4 > points and that you need 4 points to uniquely define *a* cubic bezier, > that seems the most obvious explanation. I.e., if encountered on an > *exam*, you'd have to make some educated guess as to its meaning, right? > How would the rest of the question make sense in the context of a > "family of curves"?OK. Clearly you know way more about this than I do. So it was pointless to ask the question because you already know the answer. Have fun. -- Tim Wescott Wescott Design Services http://www.wescottdesign.com
Reply by ●July 28, 20152015-07-28
On 7/28/2015 9:23 AM, Tim Wescott wrote:> On Tue, 28 Jul 2015 00:04:12 -0700, Don Y wrote: > >> On 7/27/2015 10:48 AM, Tim Wescott wrote: >>> On Mon, 27 Jul 2015 06:53:11 -0700, Don Y wrote: >>> >>>> {(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)} defining a cubic bezier. >>>> with Xi, Yi all expressed in Qm.n >>>> >>>> Define an efficient, closed-form expression/constant time algorithm to >>>> characterize (describe) the curve. >>> >>> Yup. Have fun. >>> >>> Are these the control points, or four points on the curve? >> >> If they were "four points on the curve", then they wouldn't define *A* >> cubic bezier but, rather, a *family* of curves. Given that there are 4 >> points and that you need 4 points to uniquely define *a* cubic bezier, >> that seems the most obvious explanation. I.e., if encountered on an >> *exam*, you'd have to make some educated guess as to its meaning, right? >> How would the rest of the question make sense in the context of a >> "family of curves"? > > OK. Clearly you know way more about this than I do. So it was pointless > to ask the question because you already know the answer.If I *knew* the answer I wouldn't have asked or been engaged in the ongoing email discussions. It's not an easy problem to solve. If you'd played with various "example" point sets and seen the resulting "curves", you'd understand. "Hmmm... how do I *predict* what the curve will look like just from an examination of this set of four points? Obviously they exactly define the curve so that information is encoded in them, *somehow*. Without bearing the expense of actually drawing them and examining them with human eyes, how can I extract that information algorithmically?"
Reply by ●July 28, 20152015-07-28
On 7/28/2015 12:23 PM, Tim Wescott wrote:> On Tue, 28 Jul 2015 00:04:12 -0700, Don Y wrote: > >> On 7/27/2015 10:48 AM, Tim Wescott wrote: >>> On Mon, 27 Jul 2015 06:53:11 -0700, Don Y wrote: >>> >>>> {(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)} defining a cubic bezier. >>>> with Xi, Yi all expressed in Qm.n >>>> >>>> Define an efficient, closed-form expression/constant time algorithm to >>>> characterize (describe) the curve. >>> >>> Yup. Have fun. >>> >>> Are these the control points, or four points on the curve? >> >> If they were "four points on the curve", then they wouldn't define *A* >> cubic bezier but, rather, a *family* of curves. Given that there are 4 >> points and that you need 4 points to uniquely define *a* cubic bezier, >> that seems the most obvious explanation. I.e., if encountered on an >> *exam*, you'd have to make some educated guess as to its meaning, right? >> How would the rest of the question make sense in the context of a >> "family of curves"? > > OK. Clearly you know way more about this than I do. So it was pointless > to ask the question because you already know the answer. > > Have fun.You replied with a question that was not answered, but rather you were presented with other questions which look like an attempt at an answer. All from a guy who says he can't figure out how to write more concisely. Does anyone understand what Don is asking? -- Rick
Reply by ●July 28, 20152015-07-28
Tim Wescott <seemywebsite@myfooter.really> wrote:> On Mon, 27 Jul 2015 06:53:11 -0700, Don Y wrote:>> {(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)} defining a cubic bezier. >> with Xi, Yi all expressed in Qm.n>> Define an efficient, closed-form expression/constant time algorithm to >> characterize (describe) the curve.> Are these the control points, or four points on the curve? If they're > the control points then I'm pretty sure that you can just scrape the real- > number answer out of Wikipedia and it'll work right. It is, IIRC, > straightforward adds and multiplies, so converting it to Qm.n should be > easy.Metafont does it for appropriate values of m and n. As well as I remember it, Metafont has a routine that will take a Qm.n value (Maybe with m=9 and n=22, plus sign) multiply it by some value (generating a double length product) and dividing by another value. As this is two instructions on many computers, it is suggested to use an assembly routine, but he does it in Pascal. Anyway, you might need wider intermediate values. -- glen
Reply by ●July 28, 20152015-07-28
On Tue, 28 Jul 2015 09:33:10 -0700, Don Y wrote:> On 7/28/2015 9:23 AM, Tim Wescott wrote: >> On Tue, 28 Jul 2015 00:04:12 -0700, Don Y wrote: >> >>> On 7/27/2015 10:48 AM, Tim Wescott wrote: >>>> On Mon, 27 Jul 2015 06:53:11 -0700, Don Y wrote: >>>> >>>>> {(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)} defining a cubic bezier. >>>>> with Xi, Yi all expressed in Qm.n >>>>> >>>>> Define an efficient, closed-form expression/constant time algorithm >>>>> to characterize (describe) the curve. >>>> >>>> Yup. Have fun. >>>> >>>> Are these the control points, or four points on the curve? >>> >>> If they were "four points on the curve", then they wouldn't define *A* >>> cubic bezier but, rather, a *family* of curves. Given that there are >>> 4 points and that you need 4 points to uniquely define *a* cubic >>> bezier, that seems the most obvious explanation. I.e., if encountered >>> on an *exam*, you'd have to make some educated guess as to its >>> meaning, right? >>> How would the rest of the question make sense in the context of a >>> "family of curves"? >> >> OK. Clearly you know way more about this than I do. So it was >> pointless to ask the question because you already know the answer. > > If I *knew* the answer I wouldn't have asked or been engaged in the > ongoing email discussions. It's not an easy problem to solve. > If you'd played with various "example" point sets and seen the resulting > "curves", you'd understand. > > "Hmmm... how do I *predict* what the curve will look like just from an > examination of this set of four points? > Obviously they exactly define the curve so that information is encoded > in them, *somehow*. Without bearing the expense of actually drawing > them and examining them with human eyes, > how can I extract that information algorithmically?"OK. I am not going to do this for you, because I'm rather exasperated. But I will repeat my first answer in detail: Step 1: Find wikipedia. If you can't do this, go back to the 1980's. Step 2: Enter "Bezier" in the search window. If you can't figure out how to enter things in a search window, ask for help. Step 3: Find the relevant page. Ditto on asking for help. Step 4: Find the EASY AND VERY RELEVANT math under the heading "Cubic Besier Curves". ONCE YOU HAVE DONE THAT, if you still don't understand, ask again. Frankly, the only response that I could see if you had actually done that would be "whoa! nifty! this is what I needed!". -- Tim Wescott Wescott Design Services http://www.wescottdesign.com
Reply by ●July 28, 20152015-07-28
On 7/28/2015 1:16 PM, Tim Wescott wrote:> On Tue, 28 Jul 2015 09:33:10 -0700, Don Y wrote: > >> On 7/28/2015 9:23 AM, Tim Wescott wrote: >>> On Tue, 28 Jul 2015 00:04:12 -0700, Don Y wrote: >>> >>>> On 7/27/2015 10:48 AM, Tim Wescott wrote: >>>>> On Mon, 27 Jul 2015 06:53:11 -0700, Don Y wrote: >>>>> >>>>>> {(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)} defining a cubic bezier. >>>>>> with Xi, Yi all expressed in Qm.n >>>>>> >>>>>> Define an efficient, closed-form expression/constant time algorithm >>>>>> to characterize (describe) the curve. >>>>> >>>>> Yup. Have fun. >>>>> >>>>> Are these the control points, or four points on the curve? >>>> >>>> If they were "four points on the curve", then they wouldn't define *A* >>>> cubic bezier but, rather, a *family* of curves. Given that there are >>>> 4 points and that you need 4 points to uniquely define *a* cubic >>>> bezier, that seems the most obvious explanation. I.e., if encountered >>>> on an *exam*, you'd have to make some educated guess as to its >>>> meaning, right? >>>> How would the rest of the question make sense in the context of a >>>> "family of curves"? >>> >>> OK. Clearly you know way more about this than I do. So it was >>> pointless to ask the question because you already know the answer. >> >> If I *knew* the answer I wouldn't have asked or been engaged in the >> ongoing email discussions. It's not an easy problem to solve. >> If you'd played with various "example" point sets and seen the resulting >> "curves", you'd understand. >> >> "Hmmm... how do I *predict* what the curve will look like just from an >> examination of this set of four points? >> Obviously they exactly define the curve so that information is encoded >> in them, *somehow*. Without bearing the expense of actually drawing >> them and examining them with human eyes, >> how can I extract that information algorithmically?" > > OK. I am not going to do this for you, because I'm rather exasperated. > But I will repeat my first answer in detail: > > Step 1: Find wikipedia. If you can't do this, go back to the 1980's. > > Step 2: Enter "Bezier" in the search window. If you can't figure out how > to enter things in a search window, ask for help. > > Step 3: Find the relevant page. Ditto on asking for help. > > Step 4: Find the EASY AND VERY RELEVANT math under the heading "Cubic > Besier Curves". > > ONCE YOU HAVE DONE THAT, if you still don't understand, ask again.It's not a question of "understanding" (at least not on *my* part! :> ) Rather, the fact that the information I seek is simply not available.> Frankly, the only response that I could see if you had actually done that > would be "whoa! nifty! this is what I needed!".(sigh) No, you clearly don't understand the question being asked. Do you think I *didn't* use Wikipedia, Google, my bookshelf full of Computer Graphics texts and various other technical periodicals *before* posing the question? Or, do you think that I simply couldn't RECOGNIZE the OBVIOUS ANSWER to my question before posting it, here? Perhaps you've only a casual familiarity with cubic beziers? And, as such, aren't aware of (or haven't considered) the variety of different curves that can be generated from the canonical form? So, the idea of *characterizing* a curve based on the coefficients (parameters) plugged into said form doesn't mean anything to you? Let's try something simpler. Pretend we're talking about *lines*! You'd expect the canonical form to be something like: y = mx + b Examining that equation, you'd characterize the plot it *would* generate (if you fed it into a fancy plotting program with appropriate values for 'm' and 'b') as: a line a line of slope of m (positive signifying "climbing with increasing x") a line with x- and y-intercepts of '-b/m' and 'b' So, if I *changed* m or b, the characteristics of that *line* would change, accordingly. Beyond the naive representation, if you opted to code an algorithm to *draw* said lines, you'd eventually stumble on a class of lines that don't fit that form: x = C (oops!) These you would *characterize* as "vertical lines" instead of "horizontal" or "diagonal" lines. OK, lines are pretty boring. Let's try circles! You recognize: (x-X0)^2 + (y-Y0)^2 = R^2 and, based on a set of X0, Y0 and R, you'd characterize things of this form as: a circle a circle of radius R a circle centered at (X0,Y0) etc. You wouldn't even waste the time to feed that to the fancy graphing program -- you *know* what it's going to look like without burning all those electrons trying to render an image of it! And, after a moment of thought, you'd realize that for R=0, this degenerates to a *point* -- at (X0, Y0). Move on to ellipses (yeah, I'm using lots of keystrokes -- but introducing higher order constructs as we creep up on the Bezier's complexity!). You'd see: (x-X0)^2 / a^2 + (y-Y0)^2 / b^2 = 1 as the canonical form for an ellipse. And would characterize it as: an ellipse an ellipse "centered" at (X0,Y0) an ellipse having eccentricity sqrt(1-(b/a)^2) an ellipse having major/minor axis of lengths 2a and 2b etc. Again, you wouldn't bother graphing it as these characteristics are evident from a casual inspection of the equation. Repeat this exercise with various higher-order polynomials and you can characterize aspects of those curves just from an examination of the appropriate coefficients (knowing the form of the polynomial). Parabolae ("holds water", "spills water"), hyperbolae, etc. *NOW*, do the same for a cubic Bezier -- by moving the control points. You will end up with: a simple curve (concave/convex -- though with potentially tightening *or* loosening radius an 'ess' shaped curve (to the left, then right; or vice versa) a 'double ess' curve a *loop* with "pigtails" a *cusp* a *closed* loop a straight line (segment) a line that folds back over some portion of itself a line that folds back over itself *twice* a *point* (!) (I think those are all of the cases) As with each of the other classes of "curves" that I've discussed, here, all of this information is encoded in the parameters (control points) present in the standard form of the curve. As *drawing* (plotting) a Bezier is relatively EXPEN$IVE, you wouldn't want to have to draw each candidate curve and then heuristically examine the DRAWN CURVE to identify which of these cases is represented in the rendering. (it's far more work to write a piece of code to analyze an arbitrary *image* than it would be to analyze the data that *drives* the creation of that image!) [A colleague already stumbled upon a solution (in the theoretical sense) for this part of the problem. But, it falls down when you map it onto the numerical representations that you encounter in a computational environment -- limited precision, etc. And, falls down in a potentially *big* way -- unless you arbitrarily constrain the choices for the various parameters/"control points"] Perhaps now you understand why lots of pretty equations on Wikipedia are completely USELESS in addressing this issue?
Reply by ●July 29, 20152015-07-29
*This* is how the email conversation started. I've elided things
that I don't want discussed in a public forum (e.g., the "what"
and "why" motivating the question). Of course, had I posted something
*this* long, *here*, folks with short attention spans wouldn't have
been able to make it to the end of the post... (I guess they've
never had to read or write 100's of pages of detailed specifications,
"rationales", etc. for their products; just bulleted "feature lists" :< )
So, instead, I post a very *terse* question -- then spend MORE keystrokes
clarifying misunderstandings, etc.
-----8<-------8<-------8<-------
For example, given an equation of the form:
y = mx+ b
damn near everyone would describe this as something akin to:
a line
a line having slope 'm'
a line having slope 'm' with a y-intercept of 'b'
a line having x- and y-intercepts of '-b/m' and 'b'
etc.
Similarly, given:
r^2 = (x-X0)^2 + (y-Y0)^2
would be described as one of:
a circle
a circle having radius 'r'
a circle of radius 'r' centered at (X0,Y0)
etc. E.g., you *wouldn't* (typically) hear it described as:
a circle having an area of pi*r^2 units
The same holds true for parabolae, ellipses, etc. Along
with polynomials of various degrees.
The "equation" encodes the behavior of the "graph" while the
*coefficients* determine the CHARACTEISTICS of a particular
*instance*. E.g., a parabola that holds/spills water, an
ellipse with high eccentricity, a circle with a large diameter,
etc.
YOU DON'T NEED TO *PLOT* THE FUNCTION TO BE ABLE TO DETERMINE
WHAT IT WILL LOOK LIKE!! (plotting/drawing is an expensive and
unbounded operation!)
[Skip the following if already *intimately* familiar with characteristics
of cubic Bezier curves. I.e., are familiar with various boundary
conditions, etc. Or, consult the attached PDF or a more detailed
analysis that addresses all of these concerns. But, a brief review is
in order to ensure we, at least, adopt a consistent lexicon.]
A cubic bezier is a parameterized curve (in t, typically) as:
x = {Xa * (1-t)^3} + {Xb * t * (1-t)^2} + {Xc * t^2 * (1-t)} + {Xd * t^3}
y = {Ya * (1-t)^3} + {Yb * t * (1-t)^2} + {Yc * t^2 * (1-t)} + {Yd * t^3}
where:
Pa = (Xa,Ya)
Pb = (Xb,Yb)
Pc = (Xc,Yc)
Pd = (Xd,Yd)
[Sorry, no subscripts -- not wanting to send HTML/non-ASCII -- so I've
opted for uppercase variables in an attempt to make the subscripts
"look smaller" :> ]
Here, the curve progresses from a starting point *at* 'Pa' to
an ending point *at* 'Pd'. As the curve departs Pa, it heads
directly towards Pb -- for an *instant* (i.e., the curve is tangent
to PaPb *at* Pa). Similarly, as it *approaches* Pd, it arrives
on a tangent PcPd.
Pb and Pc control the general direction of the curve IN THEIR
"(t) VICINITY" as per the blending functions. Typically, the
curve does not pass through Pb *or* Pc (as it does for Pa and Pd).
However, there are degenerate curves that will do so (see below).
For convenience, I'll refer to each curve using the notation
"{Pa, Pb, Pc, Pd}". Note that this is an *ordered* list of points!
Note that {Pa, Pb, Pc, Pd} and {Pd, Pc, Pb, Pa} "look" the
same; the difference lies only in the order in which the
curve is traced as t moves from 0 to 1. I.e., the latter
is what you would obtain if you evaluated t from 1 to 0.
However, holding the endpoints constant, reordering the two
intermediate control points produces different "looking"
curves; curves with very different *characteristics*!
[The attached PDF illustrates how you can plot each of these
examples with Mathematica. For those folks with "deep pockets
but SHORT ARMS" ;-) gnuplot should be able to do this as well;
I just haven't used it in a decade or more so can't comment on
how well it is maintained for your platforms, etc. Historically,
I frequently encountered builds that were buggy -- usually
because the person building the binary knew how to run a compiler
but didn't understand the code he was compiling! :< ]
By way of examples, figure 1 (see attached images) illustrates
{(0,0), (0,1), (1,1), (1,0)} -- a clean CW "curve". You can
see how reversing the order of the points would result in a
curve that coincided/overlaid *exactly* -- but was drawn CCW!
Swap Pc and Pd (figure 2) and the simple curve becomes S-shaped
(it's "direction" -- misnomer -- changing in the middle!)
Instead, swapping the Pb and Pc (restoring the original Pd) and
the curve resembles the original -- but with significant differences
(figure 3)!
Move Pb and Pc farther afield (figure 4) and a *loop* is introduced!
*Tweek* Pb and Pc and you can reduce that loop to a *discontinuity*
in the curve -- a cusp (figure 5).
You can similarly massage these points to create a curve that
"changes direction" *twice* -- as in figure 6 (look closely!)
[Of course, you could also get similar results by twiddling with the
endpoints, instead]
You can also get creative and create *closed* loops (e.g., Pa=Pd)
as in figure 7.
And, line segments (e.g., Pa=Pb, Pc=Pd -- and many variations thereon)
as in figure 8.
And, "folded" lines (e.g., Pa<Pc<Pb<Pd collinear) like figure 9.
And, "aborted" lines (e.g., some Pc<Pa<Pd<Pb collinear) in figure 10.
And, degenerate *points* (Pa=Pb=Pc=Pd).
[All of this is nicely spelled out in the PDF along with the math, etc.]
One important observation is that the "shape"/character of the curve
is independent of transformations in the coordinate system. E.g., a
"loop" remains a loop -- even if the entire curve is rotated or translated!
("direction" may change in reflections -- e.g., CW->CCW -- but not *form*)
So, the first problem ("The reason I've called you all together so early
in the morning..." :> ) is:
Given an *arbitrary* {Pa, Pb, Pc, Pd}:
Determine: a computationally efficient, constant time, closed-form
expression/algorithm to define which of these "forms" (shapes?) the
"curve" will take -- *characterize* the curve.
I.e., a circle is always round. It's size and location can vary but
it's always round. A line is always straight -- though its slope
can be altered or it can be translated wrt O. An eclipse is always
an "oval" -- though it's oblateness/roundness can be varied (along
with the direction of the major axis).
EACH OF THESE CHARACTERISTICS CAN BE EXTRACTED FROM THE COEFFICIENTS
OF A canonical form REPRESENTATION OF THE "FIGURE". THE SAME IS
TRUE OF CUBIC BEZIERS!
Once that is known, adjust it to reflect the fact that math automata
are not infinitely precise! For example, in the abstract, points can
be located at (pi,sqrt2), (1/3,5/9), (REALLY_BIG_NUMBER, EPSILON),
etc. And, "abstract math" will always yield The Right Answer.
But, in a machine, you have to deal with the precision available, rounding
errors, overflows, etc. And, you don't have anyone watching over the
result to handle crashes, "can't happens", results that don't make
sense, etc.!
This manifests as a minimum of two different issues:
- how precisely the control points can be specified
- how precisely the points *on* the curve can be represented (drawn)
(recall, Pb and Pc most often do not reside *on* the resulting curve
while Pa and Pd *do*; yet Pb and Pc *can*, as well!)
Additionally, the limitations of the automata determine how precisely
and accurately we can *model* the computations! So, it's not just
where the points *can* be (drawn) but how well the math can determine
those locations!
Ultimately, I use a fixed binary point representation for the control
point representations for expediency (~16b). The "characterization"
algorithm(s)/calculations can be far LESS efficient as they are
expected to be non-iterative -- just plug in 4 pairs of numbers and
have 'result(s)' pop out.
Your mission, should you choose to accept it, is "getting that result(s)"!
[This email will self-destruct in 5 seconds. Good luck, Jim.]
:>
[I'll send along some docs in a followup email that might prove helpful
in showing the "academic research" that I've turned up on the subject.
They address the first of these questions -- but not in the context of
"machine math"! Typical mathematicians... heads in the clouds while
expecting everything to be "sunny"!]
OK, you can all go back to bed (*I* am! :> What idiot invented "AM"?)
As always, thanks for any insights!
-----8<-------8<-------8<-------







