[cairo] Shouldn't Cairo use/offer degrees rather than radians?

Lawrence D'Oliveiro ldo at geek-central.gen.nz
Wed Jun 28 23:01:40 UTC 2017


On Wed, 28 Jun 2017 12:34:34 +0200, David Kastrup wrote:

> That is more than Cairo can deliver right now.

Only by special-casing
<http://git.ghostscript.com/?p=ghostpdl.git;a=blob;f=base/gsmisc.c;h=1ade8db12a9f0ac685396421107333e9347404a2;hb=HEAD>:

    static const int isincos[5] =
    {0, 1, 0, -1, 0};

    /* GCC with -ffast-math compiles ang/90. as ang*(1/90.), losing precission.
     * This doesn't happen when the numeral is replaced with a non-const variable.
     * So we define the variable to work around the GCC problem.
     */
    double const_90_degrees = 90.;

    double
    gs_sin_degrees(double ang)
    {
        double quot = ang / const_90_degrees;

        if (floor(quot) == quot) {
            /*
             * We need 4.0, rather than 4, here because of non-ANSI compilers.
             * The & 3 is because quot might be negative.
             */
            return isincos[(int)fmod(quot, 4.0) & 3];
        }
        return sin(ang * (M_PI / 180));
    }

    double
    gs_cos_degrees(double ang)
    {
        double quot = ang / const_90_degrees;

        if (floor(quot) == quot) {
            /* See above re the following line. */
            return isincos[((int)fmod(quot, 4.0) & 3) + 1];
        }
        return cos(ang * (M_PI / 180));
    }

Do you really want to see hacks like that in the Cairo code?


More information about the cairo mailing list