[metapost] turningnumber bug?

Dan Luecking luecking at uark.edu
Fri Jul 6 23:54:37 CEST 2007

Dear MetaPosters:

I wonder if a few of you would try the following code and tell
me what you get. My MetaPost (TeXLive2007) claims this version:
   This is MetaPost, Version 1.000 (Web2C 7.5.5) (mem=mpost 2007.6.26)

I checked the bug tracker at foundry.supelec.fr/projects/metapost/
without finding any mention of a possible bug.

Here is the code:
  path P;
  message "";
  P := (4,-0.00012) -- (-16,49) -- (17,32)
       --(17.0,0)..controls (13.0,0) and (9,0)..cycle;
  % shows -2 and a warning:
  show turningnumber P;

  P:=reverse P;
  % shows 1:
  show turningnumber P;

  % make a tiny change in point 0:
  P := (4,0.000) -- (-16,49) -- (17,32)
       --(17.0,0)..controls (13.0,0) and (9,0)..cycle;
  % correctly shows -1:
  show turningnumber P;

Here is the rest of the log:
Warning: The turningnumber algorithms do not agree. The current 
computed value is -2, but the 'connect-the-dots' algorithm returned -1
 >> -2
 >> 1
 >> -1 )

I can pin the problem down to the last segment of the path:

The algorithm (as I understood it when we discussed it here)
should show that there are no changes in the curvature of
this last segment, and that the curvature is positive (leftward
turning). Thus, the change in angle along this segment should be
the angular difference between the direction vector leaving (17,0)
(which is (-1,0)) and the direction vector entering (4,-.00012)
(which is about (-1, -0.00003)). That change is about .00175 degrees.
I am guessing there is an incorrect calculation that subtracts
     -179.99825 - 180 = -359.99825
instead of determining the actual amount of rotation.[*]
This would account for the difference of -1 between the two
turningnumber calculations.

[*] Since the leftward turning implies a change in angle strictly
between 0 and 360, the incorrect angle difference of -359.99825
should be corrected by adding 360.


Daniel H. Luecking
Department of Mathematical Sciences
University of Arkansas
"I reject your reality, and substitute my own" --Adam Savage

More information about the metapost mailing list