Rational Quadratic Bézier

11 Oct 2023


This was a homework question from the class that I found interesting. The method I outline here is different from what Dr. Wang outlined in class.

§ Question 1

Circular Arc -- Let C\mathcal{C} be the unit circle centred at the origin and A,BCA, B \in \mathcal{C} be endpoints of an arc subtending a central angle of θ(0,π).\theta \in (0, \pi).

Represent this circular arc as a rational quadratic Bézier curve

P(t)=(1t)2P0+2wt(1t)P1+t2P2(1t)2+2wt(1t)+t2, t[0,1]. P(t) = \frac{(1-t)^2 P_0 + 2 w t (1-t) P_1 + t^2 P_2}{(1-t)^2 + 2 w t (1-t) + t^2},\ t \in [0, 1].

Give control points P0,P1,P2P_0, P_1, P_2 and weight ww, show that w=cos(θ/2)w = \cos(\theta / 2).

§ Solution

As the circular arc has endpoints A,BA, B, we set P(0)=A,P(1)=BP(0) = A, P(1) = B implying that P0=A,P2=BP_0 = A, P_2 = B

As AA and BB are points on the circle, there must be angles α\alpha and β\beta, respectively, that represent the angle of the point along the unit circle, i.e. P0=A=cosα,sinαP_0 = A = \langle\cos\alpha, \sin\alpha\rangle, P2=B=cosβ,sinβP_2 = B = \langle\cos\beta, \sin\beta\rangle, and the subtended angle is θ=βα\theta = \beta - \alpha (assuming, wlog., β>α\beta > \alpha).

The curve at t=0.5t=0.5 should represent the midpoint of the circular arc MM,

P(0.5)=M=0.25P0+0.5wP1+0.25P20.5+0.5w=0.5P0+wP1+0.5P21+w(1+w)M=12(P0+P2)+wP1(1+w)MwP1=12(P0+P2)X.\begin{align*} P(0.5) = M &= \frac{0.25P_0 + 0.5wP_1 + 0.25P_2}{0.5 + 0.5w}\\ &= \frac{0.5P_0 + wP_1 + 0.5P_2}{1+w}\\ (1+w)M &= \frac{1}{2}(P_0 + P_2) + wP_1\\ (1+w)M - wP_1 &= \underbrace{\frac{1}{2}(P_0 + P_2)}_{X}. \end{align*}

The above implies that XX, MM, and P1P_1 are colinear which allows them to be expressed as scalar multiples of one another, i.e. P1=zM=zkXP_1 = zM = zkX, yielding the constraint

X(1wkwzk)=(1wkwzk)X=1.(†) \|X(1 - wk - wzk)\| = (1 - wk - wzk)\|X\| = 1. \tag{\dag}

We have that MM is a scalar multiple of XX suggesting that there exists a kk such that M=kXM = kX and that M=1\|M\| = 1, therefore k=X1.k = \|X\|^{-1}. From the illustration, we have that XOP0=θ/2\angle{XOP_0} = \theta / 2 thus cos(θ/2)=X\cos(\theta / 2) = \|X\| and k=sec(θ/2)k = \sec(\theta / 2).

Next, notice that P1=zM=zM=z\|P_1\| = \|zM\| = z\|M\| = z is equivalent to finding X+XP1\|X\| + \|\overline{XP_1}\|.

X\|X\| was found previously, and XP1\|\overline{XP_1}\| can be found using trigonometry --- it is the length XP0\overline{XP_0} times the tangent of the angle P1P0X=γ\angle P_1P_0X = \gamma.

To find γ\gamma, we can use the fact the inner product of two direction vectors is proportional to the cosine of the angle, or cosθ=(AB)/(AB)\cos\theta = (A \cdot B) / (\|A\|\|B\|).

The direction of P1P0\overline{P_1P_0} is given by the tangent of the circle at P(0)P(0) by definition of the Bézier curve, and the direction of P0P2\overline{P_0P_2} is the difference between points.

γ=arccos(P(0)P0P1P(0)P0P1)=arccos(sinα,cosαcosβcosα,sinβsinαcosβcosα,sinβsinα)=arccos(sin(α)(cosβcosα)+cos(α)(sinβsinα)(cosβcosα)2+(sinβsinα)2)=arccos(cosαsinβsinαcosβ22cos(βα))=arccos(sin(βα)22cos(βα))=arccos(sin(βα)22cos(βα))=arccos[(12sin(βα)1cos(βα))2]=arccos[12sin2(βα)1cos(βα)]=arccos[121cos2(βα)1cos(βα)]=arccos[12(1cos(βα))(1+cos(βα))1cos(βα)]=arccos[1+cos(βα)2]=arccos[cos(βα2)]=βα2=θ/2\begin{align*} \gamma &= \arccos\left(\frac{P'(0) \cdot \overline{P_0P_1}}{\|P'(0)\|\|\overline{P_0P_1}\|}\right)\\ &= \arccos\left(\frac{\langle -\sin\alpha, \cos\alpha\rangle \cdot \langle \cos\beta - \cos\alpha, \sin\beta - \sin\alpha \rangle}{\|\langle \cos\beta - \cos\alpha, \sin\beta - \sin\alpha \rangle\|}\right)\\ &= \arccos\left(\frac{-\sin(\alpha)(\cos\beta - \cos\alpha) + \cos(\alpha)(\sin\beta - \sin\alpha)}{\sqrt{(\cos\beta - \cos\alpha)^2 + (\sin\beta - \sin\alpha)^2}}\right)\\ &= \arccos\left(\frac{\cos\alpha\sin\beta - \sin\alpha\cos\beta}{\sqrt{2 - 2\cos(\beta - \alpha)}}\right)\\ &= \arccos\left(\frac{\sin(\beta - \alpha)}{\sqrt{2 - 2\cos(\beta - \alpha)}}\right)\\ &= \arccos\left(\left\|\frac{\sin(\beta - \alpha)}{\sqrt{2 - 2\cos(\beta - \alpha)}}\right\|\right)\tag{$\gamma \in \mathbb{R}^{+}$ by construction}\\ &= \arccos\left[\sqrt{\left(\frac{1}{\sqrt{2}}\cdot\frac{\sin(\beta - \alpha)}{\sqrt{1 - \cos(\beta - \alpha)}}\right)^2}\right]\tag{definition of abs. value}\\ &= \arccos\left[\sqrt{\frac{1}{2}\cdot\frac{\sin^2(\beta - \alpha)}{1 - \cos(\beta - \alpha)}}\right]\\ &= \arccos\left[\sqrt{\frac{1}{2}\cdot\frac{1 - \cos^2(\beta - \alpha)}{1 - \cos(\beta - \alpha)}}\right]\tag{using $\cos^2\theta + \sin^2\theta = 1$}\\ &= \arccos\left[\sqrt{\frac{1}{2}\cdot\frac{(1 - \cos(\beta - \alpha)) (1 + \cos(\beta - \alpha))}{1 - \cos(\beta - \alpha)}}\right]\tag{difference of squares}\\ &= \arccos\left[\sqrt{\frac{1 + \cos(\beta - \alpha)}{2}}\right]\tag{half angle identity}\\ &= \arccos\left[\cos\left(\frac{\beta - \alpha}{2}\right)\right]\\ &= \frac{\beta - \alpha}{2}\\ &= \theta / 2 \end{align*}

Solving for zz,

P1=z=X+XP0tanγ=cos(θ/2)+sin(θ/2)tan(θ/2)=sec(θ/2).\begin{align*} \|P_1\| = z &= \|X\| + \|\overline{XP_0}\|\tan\gamma\\ &= \cos(\theta / 2) + \sin(\theta / 2)\tan(\theta / 2)\\ &= \sec(\theta / 2). \end{align*}

Plugging z=k=sec(θ/2)z = k = \sec(\theta / 2) into (\dag) gives

1=(1wkwzk)X=[1wsec(θ/2)wsec2(θ/2)]cos(θ/2)sec(θ/2)=1wsec(θ/2)wsec2(θ/2)1=cos(θ/2)wwsec(θ/2)cos(θ/2)+1=w+wsec(θ/2)cos(θ/2)+1=w(1+sec(θ/2))w=cos(θ/2)+1sec(θ/2)+1w=cos(θ/2)\begin{align*} 1 &= (1 - wk - wzk)\|X\|\\ &= \left[1 - w\sec(\theta / 2) - w\sec^2(\theta / 2)\right]\cos(\theta/2)\\ \sec(\theta/2) &= 1 - w\sec(\theta / 2) - w\sec^2(\theta / 2)\\ 1 &= \cos(\theta / 2) - w - w\sec(\theta / 2)\\ \cos(\theta / 2) + 1 &= w + w\sec(\theta / 2)\\ \cos(\theta / 2) + 1 &= w(1 + \sec(\theta / 2))\\ w &= \frac{\cos(\theta / 2) + 1}{\sec(\theta / 2) + 1}\\ w &= \cos(\theta / 2) \end{align*}

Therefore, P0=A,P1=12sec2(θ/2)(A+B),P2=B,w=cos(θ/2)P_0 = A, P_1 = \frac{1}{2}\sec^2(\theta / 2) (A + B), P_2 = B, w = \cos(\theta / 2).

§ Question 2

Semi-circle -- Represent the semi-circle x2+y21=0,y0x^2 + y^2 - 1 = 0, y \geq 0 as a rational quadratic Bézier curve.

§ Solution

Plugging in the results from part A, we get the following expression

P(t)=(1t)2P0+sec(θ/2)t(1t)(P0+P2)+t2P2(1t)2+2cos(θ/2)t(1t)+t2, t[0,1]. P(t) = \frac{(1-t)^2 P_0 + \sec(\theta / 2) t (1-t) (P_0 + P_2) + t^2 P_2}{(1-t)^2 + 2 \cos(\theta / 2) t (1-t) + t^2},\ t \in [0, 1].

Taking the limit as θπ\theta \to \pi yields an expression for representing the semi-circle with the rational Bézier,

limθπP(t)=limθπ(1t)2P0+sec(θ/2)t(1t)(P0+P2)+t2P2(1t)2+2cos(θ/2)t(1t)+t2=limθπ(1t)2P0+sec(θ/2)t(1t)(P0+P2)+t2P2limθπ(1t)2+2cos(θ/2)t(1t)+t2\begin{align*} \lim_{\theta \to \pi} P(t) &= \lim_{\theta \to \pi}\frac{(1-t)^2 P_0 + \sec(\theta / 2) t (1-t) (P_0 + P_2) + t^2 P_2}{(1-t)^2 + 2 \cos(\theta / 2) t (1-t) + t^2}\\ &= \frac{\lim_{\theta \to \pi} (1-t)^2 P_0 + \sec(\theta / 2) t (1-t) (P_0 + P_2) + t^2 P_2}{\lim_{\theta \to \pi} (1-t)^2 + 2 \cos(\theta / 2) t (1-t) + t^2} \end{align*}

The denominator limθπ(1t)2+2cos(θ/2)t(1t)+t2\lim_{\theta \to \pi} (1-t)^2 + 2 \cos(\theta / 2) t (1-t) + t^2 can be solved directly and equals (1t)2+t2 (1-t)^2 + t^2.

Next, we focus on solving the numerator by making the assumptions P0=cosα,sinαP_0 = \langle \cos\alpha, \sin\alpha \rangle and P2=cosβ,sinβP_2 = \langle \cos\beta, \sin\beta \rangle with the subtended angle θ=βα\theta = \beta - \alpha and β>α\beta > \alpha. With these assumptions, the limit as θπ\theta \to \pi is the same as the limit as both α0\alpha \to 0 and βπ\beta \to \pi.

With these assumptions, the numerator is rewritten as

(1t)2limα0cosα,sinα+t(1t)lim(α,β)(0,π)sec(βα2)cosα+cosβ,sinα+sinβ+t2limβπcosβ,sinβ.\begin{align*} &(1-t)^2\lim_{\alpha \to 0} \langle \cos\alpha, \sin\alpha\rangle\\ &\quad+ t (1-t) \lim_{(\alpha, \beta) \to (0, \pi)} \sec\left(\frac{\beta - \alpha}{2}\right) \left\langle \cos\alpha + \cos\beta, \sin\alpha + \sin\beta\right\rangle\\ &\quad+ t^2 \lim_{\beta \to \pi} \langle\cos\beta, \sin\beta\rangle. \end{align*}

Now we focus on the second limit as it is problematic due to limθπ/2secθ\lim_{\theta \to \pi / 2} \sec\theta being indeterminant.

lim(α,β)(0,π)sec(βα2)cosα+cosβ,sinα+sinβ=2lim(α,β)(0,π)sec(βα2)cos(α+β2)cos(αβ2),sin(α+β2)cos(αβ2)=2lim(α,β)(0,π)sec(βα2)cos(α+β2)cos(βα2),sin(α+β2)cos(βα2)=2lim(α,β)(0,π)cos(α+β2),sin(α+β2)= 2cos(π2),sin(π2)= 20,1\begin{align*} &\lim_{(\alpha, \beta) \to (0, \pi)}\sec\left(\frac{\beta - \alpha}{2}\right) \left\langle \cos\alpha + \cos\beta, \sin\alpha + \sin\beta\right\rangle\\ =&2\lim_{(\alpha, \beta) \to (0, \pi)}\sec\left(\frac{\beta - \alpha}{2}\right) \left\langle \cos\left(\frac{\alpha + \beta}{2}\right)\cos\left(\frac{\alpha - \beta}{2}\right), \sin\left(\frac{\alpha + \beta}{2}\right)\cos\left(\frac{\alpha - \beta}{2}\right)\right\rangle\\ =&2\lim_{(\alpha, \beta) \to (0, \pi)}\sec\left(\frac{\beta - \alpha}{2}\right) \left\langle \cos\left(\frac{\alpha + \beta}{2}\right)\cos\left(\frac{\beta - \alpha}{2}\right), \sin\left(\frac{\alpha + \beta}{2}\right)\cos\left(\frac{\beta - \alpha}{2}\right)\right\rangle\\ =&2\lim_{(\alpha, \beta) \to (0, \pi)}\left\langle \cos\left(\frac{\alpha + \beta}{2}\right), \sin\left(\frac{\alpha + \beta}{2}\right)\right\rangle\\ =&\ 2\Big\langle\cos\left(\frac{\pi}{2}\right), \sin\left(\frac{\pi}{2}\right)\Big\rangle\\ =&\ 2\langle 0, 1\rangle \end{align*}

Finally, the semi-circle is represented by the following rational quadratic Bézier curve

P(t)=(1t)21,0+2t(1t)0,1+t21,0(1t)2+t2.P(t) = \frac{(1-t)^2\langle 1, 0\rangle + 2t(1-t) \langle 0, 1\rangle + t^2 \langle -1, 0\rangle}{(1-t)^2 + t^2}.