static float angle_between ( const fz_point u , const fz_point v ) {
 float det = u . x * v . y - u . y * v . x ;
 float sign = ( det < 0 ? - 1 : 1 ) ;
 float magu = u . x * u . x + u . y * u . y ;
 float magv = v . x * v . x + v . y * v . y ;
 float udotv = u . x * v . x + u . y * v . y ;
 float t = udotv / ( magu * magv ) ;
 if ( t < - 1 ) t = - 1 ;
 if ( t > 1 ) t = 1 ;
 return sign * acosf ( t ) ;
 }
static float angle_between ( const fz_point u , const fz_point v ) {
 float det = u . x * v . y - u . y * v . x ;
 float sign = ( det < 0 ? - 1 : 1 ) ;
 float magu = u . x * u . x + u . y * u . y ;
 float magv = v . x * v . x + v . y * v . y ;
 float udotv = u . x * v . x + u . y * v . y ;
 float t = udotv / ( magu * magv ) ;
 if ( t < - 1 ) t = - 1 ;
 if ( t > 1 ) t = 1 ;
 return sign * acosf ( t ) ;
 }