Hi All, I wanted to know your opinion on the rounding errors when splitting Bezier segments. This is what FreeType is doing for a conic segment (p1,p2,p3). Two new segments are as follows
q1 = p1; q2 = (p1 + p2)/2; <-- rounding down here r2 = (p2 + p3)/2; <-- rounding down here r3 = p3; q3 = r1 = (q2+r2)/2 <- rounding down here again The last line is applied to the already-rounded numbers, so it is double rounded so to speak. What one could do instead is this: q3 = r1 = (p1 + 2*p2 + p3)/4 with less error. For example, (10,25,20) -> (10,17,19)(19,22,20) with current method (10,25,20) -> (10,17,20)(20,22,20) with alternative method So we have an off-by-1 error because 20 is the correct answer for the middle point. The situation is even worse with cubic segments where we have triple rounding with possible off-by-2 error. Of course, there is price for extra accuracy: the alternative method would overflow one bit quicker for conic and 3 bits quicker for cubic segments. Is this something worth improving? What's your opinion? Thank you, Alexei _______________________________________________ Freetype-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/freetype-devel
