\chapter{Results and Discussion}


\section{Qualitative Rendering Accuracy}
	
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. 

applying Transformation \eqref{view-transformation}. We will use single precision floats for coordinates unless otherwise stated.

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).



\begin{figure}[H]
	\centering
	\includegraphics[width=800px]{figures/fox-vector_screenshot2.png}
	\includegraphics[width=800px]{figures/fox-vector_highzoom1.png}
	\caption{The vector image from Figure \ref{vector-vs-raster} under two different scales}\label{qualitative-rendering-fox}
\end{figure}

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 approach significantly improves the range over which an image can be rendered correctly, and it is convenient for interactively created documents as no transformation must be applied to add new detail. 

However, repeated transformations on the view will cause an accumulated error on the coordinates of object bounds. This is most noticable when zooming out and then back into the document; the object bounds coordinates will gradually underflow and eventually round to zero. An example of this effect is shown in Figure \ref{qualitative-rendering-fox-cumulative} b)
%label start
%setbounds 0.5 0.5 1e-6 1e-6
%loadsvg svg-tests/fox-vector.svg
%loop 1950 pxzoom 0 0 -1
%loop 200 wait
%debug hi
%loop 1950 pxzoom 0 0 1
%wait
\begin{figure}[H]
	\centering
	\includegraphics[width=800px]{figures/fox-vector_cumulative_before_transforms.png}
	\includegraphics[width=800px]{figures/fox-vector_cumulative_after_transforms.png}
	\caption{The effect of applying cumulative transformations to all B\'{e}ziers}\label{qualitative-rendering-fox-cumulative}
\end{figure}

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. 

We can correct this drift whilst maintaining performance by using an arbitrary 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.

\begin{figure}[H]
	\centering
	\includegraphics[width=800px]{figures/fox-vector_cumulative_relative_to_path.png}
	\includegraphics[width=800px]{figures/fox-vector_cumulative_relative_to_path_GMPrat.png}
	\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}
\end{figure}
	
\section{Quantitative Measurements of Rendering Accuracy}
	
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.

Figures \ref{} show the effect of scaling the grid to different view coordinates using single precision. This illustrates the trade off between precision and range; as the top left corner of the view moves further away from the origin, the width for which the grid appears unaltered decreases, or if the width is kept fixed, then there are fewer locations on the grid that can be correctly transformed from document to view space.

Figure \ref{} shows a plot of the number of lines visible in the grid as a function of distance from the origin for IEEE-754 floats and several different precision settings for the MPFR library. 

Figure \ref{} shows the obvious 
	
\section{Performance Measurements whilst Rendering}
	
As discussed above, we succeeded in preserving rendering accuracy as defined above for an arbitrary view.
However this comes at a performance cost, as the size of the number representation must grow accordingly.



