| Ilya Zakharevich on Wed, 18 Dec 2019 08:39:24 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: [PATCH v2.11.1] High-resolution PS plotting |
On Mon, Nov 11, 2019 at 11:35:42PM -0800, Ilya Zakharevich wrote:
> It looks like the low-precision problem is avoided with SVG, due to (≈l.2088)
>
> gen_draw(&pl, w, x, y, SVG_SCALE, SVG_SCALE);
>
> (Only 1/SVG_SCALE = 2⁻¹⁰ is later rounded by "%.2f"; I see no reason
> for such a strange code…)
A bit more clarification on the strangeness of the code:
• The coordinates are initially stored (inside the “rectangles”) as
floating point;
• Then SVG code in rect2svg() asks to scale it up 1024 times (still
to floats);
• Then gen_draw() converts it to integers to pass to the low-level
(format-specific) engine;
• Then every low-level entry point (such as svg_lines()) scales
these coordinates DOWN 1024 times (to floats);
• Then these coordinates are str_printf()ed with "%.2f").
Seems like whoever wrote SVG engine realized the problem with
low-level entry points taking integer values — but instead of
converting the API to behave sensibly they put in this mess with
scaling up/down (with the coefficient incompatible with the
printf-format!).
(This mess with integer coefficients is most probably MY fault!
Myself, I wanted to convert all the low-level API to “double”s
for more than a decade! — These functions are statics anyway!)
Hope this helps,
Ilya