File: ctsim-sgp.tex

package info (click to toggle)
ctsim 4.3.1-4
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 6,460 kB
  • ctags: 3,722
  • sloc: cpp: 26,759; sh: 3,518; ansic: 1,254; perl: 296; makefile: 265
file content (129 lines) | stat: -rw-r--r-- 5,361 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
\chapter{Simple Graphics Package}\label{sgp}\index{Simple Graphics Package}
\setheader{{\it Appendix \thechapter}}{}{}{\ctsimheadtitle}{}{{\it Appendix \thechapter}}%
\ctsimfooter%

Simple Graphics Package was created in 1980 by Kevin Rosenberg and
is modelled after the hypothetical graphics library described by Foley and van
Dam\cite{FOLEY82}. It is designed to be platform-independent.

\section{Transformation Sequence}
\latexonly{
\parbox{11cm}{
\centerline{Master coordinate (MC) level}
\centerline{$\downarrow$}
\centerline{Apply \emph{Current transformation matrix}}
\centerline{$\downarrow$}
\centerline{World coordinate (WC) level}
\centerline{$\downarrow$}
\centerline{Clipping against Window}
\centerline{$\downarrow$}
\centerline{Convert to Normalized device coordinates (NDC)}
\centerline{$\downarrow$}
\centerline{Clipping against Viewport}
\centerline{$\downarrow$}
\centerline{Convert to Physical device coordinates (PDC)}
}}
\latexignore{
\centerline{Master coordinate (MC) level}
\centerline{Apply \emph{Current transformation matrix}}
\centerline{World coordinate (WC) level}
\centerline{Clipping against Window}
\centerline{Convert to Normalized device coordinates (NDC)}
\centerline{Clipping against Viewport}
\centerline{Convert to Physical device coordinates (PDC)}
}

\section{Functions}%

\subsection{Master coordinate functions}
\begin{twocollist}
\twocolitem{\texttt{setWindow(xmin,ymin,xmax,ymax)}}{Set window for world
coordinates}
\twocolitem{\texttt{moveAbs(x,y)}}{Move graphics cursor to absolute position}
\twocolitem{\texttt{moveRel(dx,dy)}}{Move graphics cursor relative to current position}
\twocolitem{\texttt{pointAbs(x,y)}}{Draw point at current position}
\twocolitem{\texttt{pointRel(dx,dy)}}{Draw point relative to current position}
\twocolitem{\texttt{lineAbs(x,y)}}{Draw line from current position to
absolute position}
\twocolitem{\texttt{lineRel(dx,dy)}}{Draw line from current position to position
relative to current position}
\twocolitem{\texttt{markerAbs(x,y)}}{Draw marker at current position}
\twocolitem{\texttt{markerRel(dx,dy)}}{Draw marker relative to current position}
\twocolitem{\texttt{polylineAbs(x[],y[],n)}}{Draw a series of lines to absolute position}
\twocolitem{\texttt{polylineRel(dx[],dy[],n)}}{Draw series of lines relative to current position}
\twocolitem{\texttt{drawString(str)}}{Draw text string at current positon}
\twocolitem{\texttt{drawCircle(r)}}{Draw circle at current positon}
\twocolitem{\texttt{drawArc(r,start,stop)}}{Draw arc with center at current positon}
\twocolitem{\texttt{drawRect(xmin,ymin,xmax,ymax)}}{Draw rectangle}
\end{twocollist}

\subsection{Normalized coordinate functions}%
\begin{twocollist}
\twocolitem{\texttt{Viewport(xmin,ymin,xmax,ymax)}}{Viewport for window
in NDC}
\twocolitem{\texttt{stylus(x,y,beam)}}{Draw a line from current
position if beam = 1, otherwise move stylus to new position}
\twocolitem{\texttt{markerNDC(xndc,yndc)}}{Draw marker at NDC position}
\end{twocollist}

\subsection{Master coordinate to World coordinate transformations}%
These transformation functions operate on the \emph{Current transformation
matrix} (CTM).

\begin{twocollist}
\twocolitem{\texttt{clearCTM()}}{Sets the CTM to an identity matrix}
\twocolitem{\texttt{preTranslate(x,y)}}{Apply translation to CTM}
\twocolitem{\texttt{postTranslate(x,y)}}{Apply translation to CTM}
\twocolitem{\texttt{preScale(x,y)}}{Apply scale to CTM}
\twocolitem{\texttt{postScale(x,y)}}{Apply scale to CTM}
\twocolitem{\texttt{preRotate(angle)}}{Apply rotation to CTM}
\twocolitem{\texttt{postRotate(angle)}}{Apply rotation to CTM}
\twocolitem{\texttt{preShear(x,y)}}{Apply shear to CTM}
\twocolitem{\texttt{postShear(x,y)}}{Apply shear to CTM}
\end{twocollist}

\subsection{Coordinate transformation functions}%
\begin{twocollist}
\twocolitem{\texttt{transformMCtoNDC(\&x,\&y)}}{Convert from master
coordinates to NDC}
\twocolitem{\texttt{transformNDCtoMC(\&x,\&y)}}{Convert from NDC to master
coordinates}
\end{twocollist}

\subsection{State functions}
\begin{twocollist}
\twocolitem{\texttt{eraseWindow()}}{Clears the screen}
\twocolitem{\texttt{setColor(color)}}{Set current pen color}
\twocolitem{\texttt{setLinestyle(style)}}{Set current pen style}
\twocolitem{\texttt{setLinewidth(width)}}{Set current pen width}
\twocolitem{\texttt{setTextColor(foreground, background)}}{Set text colors}
\twocolitem{\texttt{setMarker(type,color)}}{Set marker attibutes}
\twocolitem{\texttt{setRasterOp(rasterOp)}}{Set raster operator}
\end{twocollist}

\section{Coordinate Mapping}

\subsection{Dimensions}
Window (World Coordinates):  $X_{wmin}, X_{wmax}, Y_{wmin}, Y_{wmax}$ \\
Viewport (Normalized Device Coordinates): $X_{vmin}, X_{vmax}, Y_{vmin}, Y_{vmax}$\\
Physical (Physicial Device Coordinates): $X_{pmax}, Y_{pmax}$\\

\subsection{Formulas}
To convert from Master coordinates to World coordinates: \\
\centerline{Apply \emph{current transformation matrix}}

To convert from WC to NDC:\\
\begin{equation}
X_{ndc} = X_{vmin} + (X_{vmax} - X_{vmin})  (X_{wc} - X_{wmin}) / (X_{wmax} - X_{wmin})
\end{equation}
\begin{equation}
Y_{ndc} = Y_{vmin} + (Y_{vmax} - Y_{vmin}) (Y_{wc} - Y_{wmin}) / (Y_{wmax} - Y_{wmin})
\end{equation}

To convert from NDC to PDC:
\begin{equation}
     X_{pdc} = X_{ndc} X_{pmax}
\end{equation}
\begin{equation}
     Y_{pdc} = X_{ndc} Y_{pmax}
\end{equation}