X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fsam.git;a=blobdiff_plain;f=presentation%2Fpresentation.tex;h=8b4108cebdd398803dfe57ad4af5cb705bcfd2f4;hp=7d5494b8602e242c60b0813fdee46066bc929c4e;hb=253d241eb8279be539ad72a0283d3f1575b537ab;hpb=67c33e185edd820e2ea6fef334455645bacd432b diff --git a/presentation/presentation.tex b/presentation/presentation.tex index 7d5494b..8b4108c 100644 --- a/presentation/presentation.tex +++ b/presentation/presentation.tex @@ -64,23 +64,24 @@ } -\begin{frame}[plain] -\frametitle{Contents} - \tableofcontents - % You might wish to add the option [pausesections] -\end{frame} \begin{frame} \frametitle{Summary} \begin{itemize} - \item Vector graphics allow scaling but not arbitrary scaling - \item We implemented a vector graphics viewer that does allow arbitrary scaling - \item ... but it will take an arbitrary amount of time + \item Vector graphics allow detail to be scaled but not by an arbitrary amount + \item We've implemented a vector graphics viewer which does allow arbitrary scaling \end{itemize} \end{frame} +%\begin{frame}[plain] +%\frametitle{Contents} +% \tableofcontents + % You might wish to add the option [pausesections] +%\end{frame} + + % Start of presentation slides -\section{Motivation \& Background} +\section{Motivation} \begin{frame} \frametitle{Graphics Formats} \begin{itemize} @@ -95,14 +96,19 @@ \end{frame} + + + \begin{frame} -\frametitle{Why is there a zoom limit?} +\frametitle{Is there a zoom limit?} \centering \includegraphics{../figures/koch1.pdf} \end{frame} +\section{Floating Point} + \begin{frame} -\frametitle{Why is there a zoom limit?} +\frametitle{Is there a zoom limit?} \begin{itemize} \item SVG, PostScript, PDF specify IEEE-754 \emph{single} floating point number representations \item Range of values: $\approx 3 \times 10^{-38} \to 3 \times 10^{+38}$ @@ -127,6 +133,20 @@ \includegraphics[width=0.8\textwidth]{../figures/floats.pdf} \end{frame} +\begin{frame} +\frametitle{Visualisation of Floats II} +\begin{itemize} + \item Difference between successive floats +\end{itemize} +\centering +\includegraphics[width=0.8\textwidth]{../figures/floats_diff.pdf} +\end{frame} + +\begin{frame} + \frametitle{Precision is limited} + \centering + \includegraphics[width=0.8\textwidth]{../figures/fox-vector_highzoom1.png} +\end{frame} \begin{frame} \frametitle{Structure of Vector Graphics} @@ -140,9 +160,11 @@ \end{frame} +\section{Vector Graphics Viewer} \begin{frame} -\frametitle{Structure of Vector Graphics III} +\frametitle{Structure of Vector Graphics II} \begin{itemize} + \item \small{Upload \emph{bounding rectangles} of individual objects to renderer (OpenGL)} \item Rectangles show individual B\'{e}ziers forming outline of the Fox \end{itemize} \centering @@ -150,17 +172,56 @@ \end{frame} +\begin{frame} +\frametitle{Viewing Vector Graphics} +\begin{itemize} + \item Tranform coordinates in document $\to$ display +\end{itemize} +\centering +\includegraphics[width=0.8\textwidth]{../figures/view_transformation.pdf} +\end{frame} + + +\section{Precision Issues} + + + \begin{frame} \frametitle{Floating point calculations \\ go wrong} \begin{itemize} - \item Scaled to $~1\times 10^{-6}$, the fox is very sick + \item Example: Insert objects at very small scale \end{itemize} \centering - \includegraphics[width=0.5\textwidth]{../figures/fox-vector_highzoom1.png} + \includegraphics[width=0.8\textwidth]{../figures/view_transformation_fail.pdf} + +\end{frame} + +\begin{frame} +\frametitle{Reducing error} + \begin{itemize} + \item Don't apply view transformation directly + \item Store object bounds relative to the display + \item When modifying the view, modify object bounds + \item Detail inserted into the view looks good, But... + \end{itemize} +\centering + \includegraphics[width=0.9\textwidth]{../figures/view_transformation_cumulative.pdf} +\end{frame} + +\begin{frame} +\frametitle{Cumulated Errors \\ with intermediate coord system} + \begin{itemize} + \item Apply transformations to Paths not individual B\'{e}ziers + \item Paths render correctly, but drift appart + \end{itemize} +\centering + \includegraphics[width=0.9\textwidth]{../figures/view_transformation_paths.pdf} \end{frame} +\section{Arbitrary Precision Rationals} + \begin{frame} \frametitle{Arbitrary Precision Rationals} \begin{align} @@ -174,29 +235,29 @@ \end{align} \begin{itemize} \item $d_i$ are fixed size integers, $\beta = 2^{64}$ - \item Size $S$ grows as needed + \item {\bf Size $S$ grows as needed} \item Operations are always exact \item Implemented by GNU Multiple Precision Library \end{itemize} \end{frame} \begin{frame} - \frametitle{Replace floats with rationals?} + \frametitle{Use Rationals to represent \\ Path Coordinates} \begin{itemize} - \item Rationals are \emph{slow} - \item Screen coordinates always in range $0 \to 1$ - \item Introduce intermediate coordinate system - \begin{itemize} - \item Many B\'{e}ziers contained in a Path - \item Use Rationals for bounds of the Path - \item Use floats to transform B\'{e}zier coordinates - \end{itemize} + \item Can move view to arbitrary point + \item Insert detail (ie: Test SVG image) in Display coordinates + \item Move view to another arbitrary point + \item Move view back + \item Detail is unchanged \end{itemize} \end{frame} -\section{Live Demo} + + + +\section{Demonstration} \begin{frame} -\frametitle{Live Demo} +\frametitle{Demonstration} \begin{itemize} \item We can import standard SVGs wherever we want \item If we are willing to wait long enough @@ -208,23 +269,23 @@ \section{Conclusions} \begin{frame} - \frametitle{Conclusions} -\begin{itemize} - \item What we have done? + \frametitle{What was done} \begin{itemize} \item Implemented a basic SVG viewer \item Demonstrated how precision affects rendering vector graphics \item Using GMP rationals, demonstrated the ability to render SVGs scaled to an arbitrary position in a document \end{itemize} - \item Possible future work +\end{frame} + +\begin{frame} + \frametitle{Future work} \begin{itemize} \item Implement more of the SVG standard \item Trial alternative number representations \item Allow for saving and loading SVGs with arbitrary precision \end{itemize} -\end{itemize} \end{frame} -\section{References} +%\section{References} \begin{frame} \frametitle{References \& More information} \begin{itemize} @@ -240,25 +301,15 @@ \item Kahan's website \url{http://http.cs.berkeley.edu/~wkahan} \end{itemize} \end{frame} -\section{Questions} +%\section{Questions} -\begin{frame} -\frametitle{Q: Why don't you have colour?} -\begin{itemize} - \item We do!\footnote{If you are willing to wait long enough} - \item A complete implementation of SVG is ``future work'' -\end{itemize} -\centering -\includegraphics[width=0.5\textwidth]{../figures/shady-the-fox.png} -\includegraphics[width=0.5\textwidth]{../figures/who-the-hell-needs-antialiasing-anyway.png} -\end{frame} \begin{frame} -\frametitle{Q: Why not just use doubles?} +\frametitle{Q: Why not just increase \\ floating point precision?} \begin{itemize} \item Any fixed precision format will still give inexact results - \item But the inexact results will appear slower + \item Eg: Accuracy of rendering a grid \end{itemize} \end{frame} @@ -282,29 +333,16 @@ \end{itemize} \end{frame} - \begin{frame} - \frametitle{Floating Point calculations \\ go wrong} - \begin{itemize} - \item Plank Length: $1.61 \times 10^{-35}$ metres $ > 3\times10^{-38}$ - \item Size of Universe: $4.3 \times 10^{26}$ metres $ << 3 \times10^{38}$ - \item Why isn't this good enough for $1\times 10^{-6}$ - \end{itemize} -\end{frame} +\frametitle{Q: Why don't you have colour?} +\begin{itemize} + \item We do!\footnote{If you are willing to wait long enough} + \item A complete implementation of SVG is ``future work'' +\end{itemize} +\centering +\includegraphics[width=0.5\textwidth]{../figures/shady-the-fox.png} +\includegraphics[width=0.5\textwidth]{../figures/who-the-hell-needs-antialiasing-anyway.png} -\begin{frame} - \frametitle{Floating point calculations \\ go wrong} - \begin{itemize} - \item Transforming from document $(x,y)$ $\to$ screen $(X,Y)$ - \item View is at $(v_x,v_y)$ in document, has dimensions $(v_w,v_h)$ - \end{itemize} - \begin{align} - X = \frac{x - v_x}{v_w} &,\quad\quad Y = \frac{y - v_y}{v_h} - \end{align} - \begin{itemize} - \item Division by $v_w \approx 10^{-6}$ increases the error due to $x - v_x$ - \item Using \emph{double} precision, render correctly down to $v_w \approx 10^{-37}$ - \end{itemize} \end{frame}