# [metapost] workaround for turningnumber bug

Werner LEMBERG wl at gnu.org
Fri Feb 4 00:50:28 CET 2005

> \gamma(t) = K0 + K1 t + K2 t^2 + K3 t^3
>
> K0 = P
> K1 = 3 (P+ - P)
> K2 = 3 (Q- - 2P+ + P)
> K3 = Q - 3 Q- + 3 P+ - P
>
> The conditions for self-intersection are given by the existence of
> solutions in [0,1] of the equation
>
> (*) (K2 x K3)^2 t^2 +
>     (K1 x K3)(K2 x K3) t +
>     (K1 x K3)^2 - (K1 x K2)(K2 x K3) = 0
>
> The required conditions are (a-e) above, which I have not been able
> to simplify in any sensible way. IMHO it's easier to just solve (*)
> (if (a) is verified) and then check manually if the solutions are
> both between 0 and 1.

either have two different solutions (a real self-intersection) or a
double-solution (a cusp) in (*):

+           +
---------+---------+---------
+     +
+

+           +
+         +
+     +
--------------+--------------

The first derivate of (*), set to zero, gives the point where the
tangent is parallel to the x axis, and this point must be in the
interval ]0,1[, between the two solutions.  After some simple math we
have the constraint

K1 x K3
0 < - ------- < 2
K2 x K3

as a quick first test whether a self-intersection does exist.

Werner