6f07e3d97fa1b76519f65f0868ea728e6fb830e7
[ipdf/sam.git] / chapters / Results.tex
1 \chapter{Results and Discussion}
2
3 \section{Qualitative Rendering Accuracy}
4         
5 Our ultimate goal is to be able to insert detail at an arbitrary point in the document. Therefore, we are interested in how the same test SVG would appear when scaled to the view coordinates, as the view coordinates are varied. 
6
7
8 \subsection{Applying the view transformation directly}
9
10 Figure \ref{qualitative-rendering-fox} shows the rendering of a vector image\footnote{Unfortunately, since a rendered vector image is a raster image and this figure must be scaled to fit the PDF, the figure as seen here is not a pixel perfect representation of the actual rendering. Most notably, antialiasing effects will be apparent}. Transformation \eqref{view-transformation} is applied to object coordinates with default IEEE-754 rounding behaviour (to nearest). The loss of precision in the second figure is obvious. This is because division by $10^{-6}$ increases the rounding error in $x - v_x$, by $10^{6}$, so the total error is of the order $10^6$ ulp which is of the order $0.25$
11
12 {\bf TODO: Calculate that properly, shouldn't be hard}
13
14
15
16 \begin{figure}[H]
17         \centering
18         \includegraphics[width=800px]{figures/fox-vector_screenshot2.png}
19         \includegraphics[width=800px]{figures/fox-vector_highzoom1.png}
20         \caption{The vector image from Figure \ref{vector-vs-raster} under two different scales}\label{qualitative-rendering-fox}
21 \end{figure}
22
23 \subsection{Applying cumulative transformations to all B\'{e}ziers}
24
25 Rather than applying \eqref{view-transformation} to object coordinates specified relative to the document, we can store the bounds of objects relative to the view and modify these bounds according to transformations \eqref{} and \eqref{} as the view is changed. This is convenient for an interactive document, as detail is typically added by inserting objects into the document within the view rectangle. As a result this approach makes the rendering of detail added to the document independent of the view coordinates --- until the view is moved.
26
27 Repeated transformations on the view will cause an accumulated error on the coordinates of object bounds. This is most noticable when zooming \emph{out} and then back into the document; the object coordinates will gradually underflow and eventually round to zero. An example of this effect is shown in Figure \ref{qualitative-rendering-fox-cumulative} b)
28 %label start
29 %setbounds 0.5 0.5 1e-6 1e-6
30 %loadsvg svg-tests/fox-vector.svg
31 %loop 1950 pxzoom 0 0 -1
32 %loop 200 wait
33 %debug hi
34 %loop 1950 pxzoom 0 0 1
35 %wait
36 \begin{figure}[H]
37         \centering
38         \includegraphics[width=800px]{figures/fox-vector_cumulative_before_transforms.png}
39         \includegraphics[width=800px]{figures/fox-vector_cumulative_after_transforms.png}
40         \caption{The effect of applying cumulative transformations to all B\'{e}ziers}\label{qualitative-rendering-fox-cumulative}
41 \end{figure}
42
43 \subsection{Applying cumulative transformations to Paths}
44
45 In Figure \ref{qualitative-rendering-fox}, transformations are applied to the bounds of each B\'{e}zier. Figure \ref{qualitative-rendering-fox-cumulative-relative} a) shows the effect of introducing an intermediate coordinate system expressing B\'{e}zier coordinates relative to the path which contains them. In this case, the rendering of a single path is accurate, but the overall positions of the paths drift as the view is moved. 
46
47 We can correct this drift whilst maintaining performance by using an arbitrary or high precision number representation to express the coordinates of the paths - but maintaining the floating point coordinates for B\'{e}zier curves relative to their path. As we will discuss in Section \ref{}, this offers an acceptable trade off between rendering accuracy and performance.
48
49 \begin{figure}[H]
50         \centering
51         \includegraphics[width=800px]{figures/fox-vector_cumulative_relative_to_path.png}
52         \includegraphics[width=800px]{figures/fox-vector_cumulative_relative_to_path_GMPrat.png}
53         \caption{Effect of cumulative transformations applied to Paths\\a) Path bounds represented using floats b) Path bounds represented using Rationals}\label{qualitative-rendering-fox-cumulative-relative}
54 \end{figure}
55         
56 \section{Quantitative Measurements of Rendering Accuracy}
57         
58 A useful test SVG is a simple grid of horizontal and vertical lines seperated by 1 pixel. When this SVG is correctly scaled to a view, all that should be visible is a coloured rectangle filling the screen. Increasing the magnification will reveal the grid of lines indicating how the original size of a pixel is scaled.
59
60 Figure \ref{grid-precision} illustrates the effect of applying the view transformation \eqref{view-transformation} directly to the grid. When the grid is correctly rendered, as in Figure \ref{grid-precision} a) it appears as a black rectangle. Further from the origin, not all pixels in the grid can be represented and individual lines become visible. As the distance from the origin increases, fewer pixel locations can be represented exactly after performing the view transformation.
61
62 An error of 1 ulp is increased by a factor of $10^6$ to end up comparable to the size of the display ($0 \to 1$).
63
64
65 \begin{figure}[H]
66         \centering
67         \includegraphics[width=800px]{figures/grid_0_1e-6.png}
68         \includegraphics[width=800px]{figures/{grid_0.5_1e-6}.png}
69         \includegraphics[width=800px]{figures/grid_1_1e-6.png}
70         \includegraphics[width=800px]{figures/grid_2_1e-6.png}
71         \caption{Effect of applying \eqref{view-transformation} to a grid of lines seperated by 1 pixel \\
72         a) Near origin (denormals) b), c), d) Increasing the exponent of $(v_x,v_y)$ by 1}\label{grid-precision}
73 \end{figure}
74
75
76 \subsection{Names of programs in figures}
77 \begin{itemize}
78         \item single - Single precision IEEE-754 with \eqref{view-transformation} applied directly
79         \item double - Double precision IEEE-754 with \eqref{view-transformation} applied directly
80         \item cumul-single - Single precision IEEE-754 with cumulative transforms to B\'{e}ziers
81         \item cumul-double - Double precision IEEE-754 with cumulative transforms to B\'{e}ziers
82         \item path-single -  Single precision IEEE-754 with cumulative transforms to Paths
83         \item path-double -  Single precision IEEE-754 with cumulative transforms to Paths
84         \item path-rat - GNU MP Rationals with cumulative transforms to Paths
85 \end{itemize}
86
87 \subsection{Precision for Fixed View}
88
89
90 By counting the number of distinctly representable lines within a particular view, we can show the degradation of precision quantitatively. The test grid is added to each view rectangle.
91
92
93 Figure \ref{loss_of_precision_grid_0.5.pdf} shows how precision degrades with $(v_x, v_y) = (0.5,0.5)$.
94 A constant line at $1401$ grid locations indicates no loss of precision.
95
96
97 \begin{figure}[H]
98         \centering
99                 \includegraphics[width=0.8\textwidth]{{figures/loss_of_precision_grid_0.5}.pdf}
100         \caption{Loss of precision of the grid}
101         \label{loss_of_precision_grid_0.5.pdf}
102 \end{figure}
103
104 \subsection{Accumulated error after changing the View}
105
106 Figure \ref{cumulative_error_grid.pdf} shows the total error in the coordinates of each line in the grid after the view is scaled (zooming \emph{out}) by repeated transformations. A constant line at $0$ indicates no accumulated error.
107
108 \begin{figure}[H]
109         \centering
110                 \includegraphics[width=0.8\textwidth]{figures/cumulative_error_grid.pdf}
111         \caption{Error in the coordinates of the grid}
112         \label{cumulative_error_grid.pdf}
113 \end{figure}
114
115 By considering Figure \ref{loss_of_precision_grid_0.5.pdf} and \ref{cumulative_error_grid.pdf}, \verb/path-rat/ is the winner.
116         
117 \section{Performance Measurements whilst Rendering}
118         
119 As discussed above, we succeeded in preserving rendering accuracy as defined above for an arbitrary view.
120 However this comes at a performance cost, as the size of the Rational number representation must grow accordingly. Figures \ref{memory.pdf} and \ref{time.pdf} were obtained by repeatedly clearing the document, scaling, and adding a fixed number of B\'{e}zier curves.
121
122 \begin{figure}[H]
123         \centering
124         \includegraphics[width=0.8\textwidth]{figures/memory.pdf}
125         \label{memory.pdf}
126         \caption{Memory used per Rational whilst zooming in}
127 \end{figure}
128
129 \begin{figure}[H]
130         \centering
131         \includegraphics[width=0.8\textwidth]{figures/time.pdf}
132         \label{time.pdf}
133         \caption{Time taken to scale about the fixed point}
134 \end{figure}
135

UCC git Repository :: git.ucc.asn.au