\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{racheleva} \pdfinfo{ /Title (computer-graphics.pdf) /Creator (Cheatography) /Author (racheleva) /Subject (Computer Graphics Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A35D21} \definecolor{LightBackground}{HTML}{F9F4F1} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Computer Graphics Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{racheleva} via \textcolor{DarkBackground}{\uline{cheatography.com/217931/cs/48014/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}racheleva \\ \uline{cheatography.com/racheleva} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 27th April, 2026.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{UNIT 1}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{PART A} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{pixel}} - smallest addressable unit (on digital raster or display screen)} \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{video display devices}} - Raster Scan (more memory; entire pixel grid/frame buffer) and Random Scan (Vector Scan; drawing commands, less memory)} \tn % Row Count 6 (+ 3) % Row 3 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{CRT}} - Cathode Ray Tube (fig. 1)} \tn % Row Count 7 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{area filling primitives}} - (1) Polygon fill areas and (2) Curved boundary fill areas (or seed-filled regions)} \tn % Row Count 10 (+ 3) % Row 5 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{Polygon inside testing or Polygon scan conversion identifies {\bf{polygon's interior pixels}}} \tn % Row Count 12 (+ 2) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{types of refresh buffers}} - RAM (VRAM or DRAM)} \tn % Row Count 13 (+ 1) % Row 7 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{Object geometry}} - continuous; {\bf{raster representation}} - discrete approximation} \tn % Row Count 15 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{DDA}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{1. Calculate ∆x, ∆y and steps} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{∆x=x\textasciitilde{}2\textasciitilde{}-x\textasciitilde{}1\textasciitilde{}; ∆y=y\textasciitilde{}2\textasciitilde{}-y\textasciitilde{}1\textasciitilde{}; steps=max(|∆x,∆y|)} \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{increments: dx=∆x/steps; dy=∆y/steps} \tn % Row Count 4 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{start: x\textasciitilde{}1\textasciitilde{},y\textasciitilde{}1\textasciitilde{}; iterations x=x+dx, y=y+dy} \tn % Row Count 5 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Disadvantage}}: \newline Floating-point operations are \newline computationally slower and hardware-intensive.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Bresenham's Line Drawing Algorithm}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{find ∆x and ∆y} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{p\textasciitilde{}0\textasciitilde{}=2∆y-∆x} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{if p\textasciitilde{}k\textasciitilde{}\textless{}0; p\textasciitilde{}k+1\textasciitilde{}=p\textasciitilde{}k\textasciitilde{}+2∆y; x\textasciitilde{}k+1\textasciitilde{}=x\textasciitilde{}k\textasciitilde{}+1; y\textasciitilde{}k+1\textasciitilde{}=y\textasciitilde{}k\textasciitilde{}} \tn % Row Count 4 (+ 2) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{if p\textasciitilde{}k\textasciitilde{}\textgreater{}0; p\textasciitilde{}k+1\textasciitilde{}=p\textasciitilde{}k\textasciitilde{}+2∆y-2∆x; x\textasciitilde{}k+1\textasciitilde{}=x\textasciitilde{}k\textasciitilde{}+1; y\textasciitilde{}k+1\textasciitilde{}=y\textasciitilde{}k\textasciitilde{}+1} \tn % Row Count 6 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Mid-Point Circle Drawing}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{starting point : (0, r)} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{p\textasciitilde{}0\textasciitilde{}=1-r} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{p\textasciitilde{}k\textasciitilde{}\textless{}0 : x\textasciitilde{}k+1\textasciitilde{}=x\textasciitilde{}k\textasciitilde{}+1; y\textasciitilde{}k+1\textasciitilde{}=y\textasciitilde{}k\textasciitilde{}; p\textasciitilde{}k+1\textasciitilde{}=p\textasciitilde{}k\textasciitilde{}+2x\textasciitilde{}k+1\textasciitilde{}+1;} \tn % Row Count 4 (+ 2) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{p\textasciitilde{}k\textasciitilde{}\textgreater{}0 : x\textasciitilde{}k+1\textasciitilde{}=x\textasciitilde{}k\textasciitilde{}+1; y\textasciitilde{}k+1\textasciitilde{}=y\textasciitilde{}k\textasciitilde{}-1; p\textasciitilde{}k+1\textasciitilde{}=p\textasciitilde{}k\textasciitilde{}+2x\textasciitilde{}k+1\textasciitilde{}-2y\textasciitilde{}k+1\textasciitilde{}+1;} \tn % Row Count 6 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Definitions}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{Boundary fill}} colors inward until a specific boundary color is reached. \newline % Row Count 2 (+ 2) {\bf{Flood fill}} replaces a target color within a bounded area, regardless of the boundary color. \newline % Row Count 4 (+ 2) {\bf{Scan-line fill}} is more efficient, using horizontal lines to fill polygon interiors.% Row Count 6 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Flood Fill vs Boundary Fill}} \tn % Row 0 \SetRowColor{LightBackground} Flood Fill & Boundary Fill \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} Fills all connected pixels having the same old color. & Fills pixels until a boundary color is reached. \tn % Row Count 4 (+ 3) % Row 2 \SetRowColor{LightBackground} Stops when a different color is encountered. & Region is defined by a closed border. \tn % Row Count 7 (+ 3) % Row 3 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{Checking condition}}} \tn % Row Count 8 (+ 1) % Row 4 \SetRowColor{LightBackground} if (pixel\_color == old\_color) & if (pixel\_color != boundary\_color \&\& pixel\_color != fill\_color) \tn % Row Count 12 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Disadvantage}} \newline A 4-connected Flood Fill may leak when the boundary is not closed in the 4-connected sense, even if it appears visually closed.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Filled area vs. line drawing}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{For the Statement}} & {\bf{Against the Statement}} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} Fill algorithms handle large pixel regions (efficiency matters) & very frequently used per frame (constant memory) \tn % Row Count 6 (+ 4) % Row 2 \SetRowColor{LightBackground} Boundary Fill can be slow and may leak if the boundary is not properly closed (recursive stack) & Bresenham are highly optimized and essential \tn % Row Count 11 (+ 5) % Row 3 \SetRowColor{white} Scan-line Fill is fast, iterative, and reliable (minimal memory) & poor choice impacts overall rendering \tn % Row Count 15 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Application context:}} \newline In real-time systems (games), scan-line-based rasterization is preferred for speed and stability. \newline In paint programs, Boundary Fill is acceptable for smaller regions.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Raster vs. Random Scan}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Architectural Trade-offs}}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} {\bf{Raster Scan}} & {\bf{Random Scan}} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} Pixel-based, uses frame buffer (LCD/OLED displays) & Vector-based, draws only required lines \tn % Row Count 5 (+ 3) % Row 3 \SetRowColor{white} Scans entire screen sequentially & Stores line endpoints (display list) \tn % Row Count 7 (+ 2) % Row 4 \SetRowColor{LightBackground} Supports shading, textures, complex images & Produces smooth, high-quality lines \tn % Row Count 10 (+ 3) % Row 5 \SetRowColor{white} May have aliasing (jagged edges) & Limited to wireframe images \tn % Row Count 12 (+ 2) % Row 6 \SetRowColor{LightBackground} Requires continuous refresh & Limited by number of vectors per refresh \tn % Row Count 14 (+ 2) % Row 7 \SetRowColor{white} Real-time 3D / Gaming, Medical Imaging & It cannot efficiently render complex, filled, or continuous-tone images (only simple line drawings) \tn % Row Count 19 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Rendering Complexity:}} Raster: Highly suitable; Random: Not suitable (only wireframes) \newline {\bf{Interactivity:}} Raster: Good (because of GPU acceleration); Random: Poor for complex models \newline {\bf{Cost-effectiveness:}} Raster: Low cost; Random: High cost (requires specialized hardware)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Jagged lines}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{Causes}}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{Discrete Sampling}} - Continuous lines mapped to pixel grid → stair-step effect} \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{Nyquist Violation}} - Sampling rate too low → high-frequency details lost} \tn % Row Count 5 (+ 2) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{Binary Pixel Coverage}} - Pixel is either fully ON/OFF, no partial coverage → sharp edges} \tn % Row Count 7 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{Solution - Supersampling:}} \newline Render at higher resolution, then scaled down after sampling. \newline The system takes multiple samples within each pixel, rather than just one in the center, to calculate the accurate color of that pixel (Cause 3)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{fig. 1}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{5.377cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/racheleva_1777266441_Screenshot 2026-04-27 102052.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{fig. 2}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{5.377cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/racheleva_1777266483_Untitled-Diagram-94.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}