Re: Shouldn't Cairo use/offer degrees rather than radians?

Simon Budig <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
Hi David.

David Kastrup ([email protected]) wrote:
> PostScript uses degrees.  PDF uses degrees.  Either have a numerically
> stable presentation of right angles, the most important angles a
> rectilinear coordinate system can work with.

You're (in my book) wrong about PDF. PDF does not have a generic
"rotate" operator, it always uses transformation matrices for this
purpose, leaving it up to the application developer to pick his tools.

There is a /Rotate-entry in various object dictionaries, that accepts
0/90/180/270 as value, however, these are the *only* values accepted,
they basically work as an enum, specifying the paper orientation. Using
this as an argument for degrees in cairo is comparing apples and
oranges.

> In contrast, Cairo uses radians.  For every floating point format, PI/4
> has different multiples, as opposed to 45.  You don't get guarantees
> like
> 
> (1.5*M_PI/2 - M_PI) == 0.5 * M_PI
> 
> which means that detecting almost any kind of right angle reliably is a
> gamble.

I am not sure what you're trying to prove that "==" returns false when
comparing -0.7854 to 1.5708...

Replacing M_PI with 180 makes that -45 == 90, which is very much false
as well.

Did you mean "(1.5*M_PI/2 - M_PI) == -0.25 * M_PI"?

#include "math.h"
#include "stdio.h"

int
main ()
{
  if (1.5 * M_PI / 2.0 - M_PI == -0.25 * M_PI)
    printf ("equal!\n");
  else
    printf ("not equal!\n");
  return 0;
}

returns "equal!" for me. However, I see your point that this is not
guaranteed, and that floating point math can give unexpected results.
Yeah, whenever you're dealing with floating point numbers, the "=="
operator is mostly useless, unless you know *very* exactly what you're
doing. But exchanging M_PI with 180.0 doesn't change that.

Obviously using integer degrees is too limiting for a library like
cairo, so we're always dealing with floats. And then there is no point
to offering degrees.

> So why not provide degrees (and use them internally) for Cairo?

Because

  a) 6.12323e-17 is sufficiently zero for basically all usecases
  b) the math library trigonometric functions are based on radians
  c) degrees are easily made available by a tiny macro.

Bye,
        Simon

-- 
              [email protected]              http://simon.budig.de/
-- 
cairo mailing list
[email protected]
https://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.