[Math] Finding the formula for Bezier curve ratios (hull/point : point/baseline)

interpolationna.numerical-analysis

Given a cubic Bezier curve defined by points $p_1$, $p_2$, $p_3$, and $p_4$, a point $B$ on that curve at some $t$ value (where $0 \leq t \leq 1$), a point $A$ on the line $(p_2 – p_3)$ at distance ratio $t$ from $p_2$, and a point $C$ that is the intersection of the line $(p_1- p_4)$ and the line that goes through $A$ and $B$, the ratio between distance $d_1 = |A – B|$ and $d_2 = |B – C|$ is a fixed value, regardless of the values for coordinates $p_1$, $p_2$, $p_3$, and $p_1$.

I'd like to find the formula that expresses this ratio as a function of $t$ (all interactive graphing experiments suggest that this function is an identical function for cubic Bezier curves, not actually being dependent on the coordinates used for the curve) but I'm having little success coming up with something satisfactory. My math skills are not sufficient…

I initially wrote up a quick data-generator using the "Processing" programming language to see if I could use that data for polynomial regression (based on the fact that the function is symmetrical around $t = 0.5$, finding the expression for the interval $t=0.5$ to $t=1$), but the fact that the ratio is actually asymptotic at $t = 0$ and $t = 1$ (towards positive infinity) means that it's not a straight-forward power function.

curve parameter -> ratio plot.

(note: the jsfiddle link doesn't actually log all 5000 step values; normal Processing does)

Would anyone know how to express this ratio function as a proper formula? I don't quite know how to approach this symbolically, as I'm using de Casteljau's algorithm to determine my red and green lines; since I don't know how to symbolically express the values $d_1$ and $d_2$, expressing the ratio $\frac{d_1}{d_2}$ as a function is quite hard.

N.B.: Apologies if the tags don't fit the question. I'll take suggestions on using the right ones instead; first question on MathOverflow.

Best Answer

A cubic bezier defined by $p_1, p_2, p_3, p_4$ has parametric equation $$B(t) = (1-t)^3p_1 + 3(1-t)^2tp_2 + 3(1-t)t^2p_3 + t^3p_4.$$

The setup here also defines $A(t) = (1-t) p_2 + tp_3$.

The way $C$ is defined, there are some real $s(t)$ and $u(t)$, both possibly depending on $p_1,\ldots,p_4$ such that $C = sA + (1-s)B = up_1 + (1-u)p_4$.

So $B - C = B - sA - (1-s)B = s(B-A)$. Hence $\frac{|B - C|}{|A - B|} = |s|$.

On the other hand, we want $sA + (1-s)B - up_1 - (1-u)p_4 = 0$. That comes out to

$$((1-s)(1-t)^3 - u)p_1 + (s(1-t) + 3(1-s)t(1-t)^2)p_2 + (st + 3(1-s)t^2(1-t))p_3 + ((1-s)t^3 - (1-u))p_4 = 0.$$

Set $$s = \frac{t^3+(1-t)^3-1}{t^3 + (1-t)^3}$$ and $$u = \frac{(1-t)^3}{t^3 + (1-t)^3}.$$

Then the coefficents of $p_1,\ldots,p_4$ in the above expression become identically 0. Note that the denominators of these expressions are never 0 for $t \in [0,1]$, so the divisions are ok.

So your ratio is given by the $|s|$ above (or its reciprocal, depending on how you're taking the ratio).

Related Question