ab3fbcd314d850fc288bd06b0abc853e7efbd3f9
[ipdf/sam.git] / chapters / Background / CoordinateSystems.tex
1 Basic vector primitives composed of B{\'e}ziers may be rendered using only integer operations, once the starting and ending positions are rounded to the nearest pixel.
2
3 However, a complete document will contain many such primitives which in general cannot all be shown on a display at once. A ``View'' rectangle can be defined to represent the size of the display relative to the document. To interact with the document a user can change this view through scaling or translating with the mouse.
4
5 Primitives which are contained within the view rectangle will be visible on the display. This involves the transformation from coordinates within the document to relative coordinates within the view rectangle as illustrated in Figure \ref{view_transformation_minimal.pdf}. A point $(X,Y)$ in the document will transform to a point $(S_X,S_Y)$ in the display by:
6 \begin{align}
7         S_X = \frac{X - V_x}{V_w} &\quad\quad S_Y = \frac{Y - V_y}{V_h}\label{view-transformation}
8 \end{align}
9 Where $(V_x,V_y)$ are the coordinates of the top left corner and $(V_w,V_h)$ are the dimensions of the view rectangle.
10
11
12 The transformation may also be written as a 3x3 matrix $\matx{V}$ if we introduce a third coordinate $z = 1$
13 \begin{align}
14         \left( \begin{array}{c} S_X \\ S_Y \\ 1 \end{array}\right) &= 
15         \left( \begin{array}{ccc} 
16                 \frac{1}{V_w} & 0 & \frac{V_x}{V_w} \\
17                 0 & \frac{1}{V_h} & \frac{V_y}{V_h} \\
18                 0 & 0 & 1 
19         \end{array}\right) 
20         \left( \begin{array}{c} X \\ Y \\ 1 \end{array}\right)\label{view-transformation-matrix}
21 \end{align}
22
23
24 \begin{figure}[H]
25         \centering
26         \includegraphics[width=0.7\textwidth]{figures/view_transformation_minimal.pdf}
27         \caption{Illustration of view transformation \eqref{view-transformation}}\label{view_transformation_minimal.pdf}
28 \end{figure}
29
30 \subsection{View Transformations}
31
32 Moving the mouse\footnote{or on a touch screen, swiping the screen} by a distance $(\Delta x, \Delta y)$ relative to the size of the view should translate it by the same amount\cite{}:
33 \begin{align}
34         V_x \to V_x + \Delta x \\
35         V_y \to V_y + \Delta y
36 \end{align}
37
38 The document can be scaled by a factor of $s$ about a point $(x_0,y_0)$ specified relative to the view (such as the position of the mouse cursor)\cite{}:
39 \begin{align}
40         V_x \to V_x + x_0 V_w(1 - s) \\
41         V_y \to V_y + y_0 V_h(1 - s) \\
42         V_w \to s V_w \\
43         V_h \to s V_h
44 \end{align}
45
46 The effect of this transformation is that, measured relative to the view rectangle, the distance of primitives with coordinates $(x, y)$ to the point $(x_0, y_0)$ will decrease by a factor of $s$. For $s < 1$ the operation is ``zooming out'' and for $s > 1$, ``zooming in''.
47
48
49 %TODO List
50 % Mention that these transformations affect precision more than eg: drawing a line
51 % Discuss floating point errors that could occur?
52 % Convert operations to Matrix form, more standard
53 % Cite some UI paper or something

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