     static func getccenter( _ p1: CGPoint, _ p2: CGPoint, _ p3: CGPoint, _ interval: Interval) -> Arc {
         let d1 = p2 - p1
         let d2 = p3 - p2
-        let d1p = CGPoint(x: d1.x * cos(quart) - d1.y * sin(quart),
-                          y: d1.x * sin(quart) + d1.y * cos(quart))
-        let d2p = CGPoint(x: d2.x * cos(quart) - d2.y * sin(quart),
-                          y: d2.x * sin(quart) + d2.y * cos(quart))
+        let d1p = CGPoint(x: d1.x * cos(CGFloat(quart)) - d1.y * sin(CGFloat(quart)),
+                          y: d1.x * sin(CGFloat(quart)) + d1.y * cos(CGFloat(quart)))
+        let d2p = CGPoint(x: d2.x * cos(CGFloat(quart)) - d2.y * sin(CGFloat(quart)),
+                          y: d2.x * sin(CGFloat(quart)) + d2.y * cos(CGFloat(quart)))
         // chord midpoints
         let m1 = 0.5 * (p1 + p2)
         let m2 = 0.5 * (p2 + p3)

    }
    
    // cube root function yielding real roots
    static func crt(_ v: CGFloat) -> CGFloat {
        return (v < 0) ? -pow(-v,1.0/3.0) : pow(v,1.0/3.0)
    }
    

            // if m<s<e, arc(e, s + tau)
            // if s<e<m, arc(e, s + tau)
            if s>m || m>e {
                s += CGFloat(tau)
            }
            if s>e {
                swap(&s, &e)
