├── .gitignore ├── requirements.txt ├── _static └── css │ └── custom.css ├── .pre-commit-config.yaml ├── VTKBook ├── Figures │ ├── README.md │ ├── FigureTemplates.txt │ └── Equations.txt ├── 00Preface.md ├── 01Chapter1.md ├── 02Chapter2.md └── 13Glossary.md ├── index.md ├── COPYING ├── .readthedocs.yaml ├── citing.md ├── .github └── workflows │ └── pre-commit.yml ├── Makefile ├── make.bat ├── README.md ├── conf.py ├── about_page.md └── LICENSES ├── Apache-2.0.txt └── CC-BY-4.0.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023 VTK Book Authors and Contributors 2 | # SPDX-License-Identifier: Apache-2.0 3 | _build 4 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023 VTK Book Authors and Contributors 2 | # SPDX-License-Identifier: Apache-2.0 3 | myst-parser[linkify] 4 | pygments 5 | sphinx 6 | sphinx-book-theme 7 | -------------------------------------------------------------------------------- /_static/css/custom.css: -------------------------------------------------------------------------------- 1 | /* SPDX-FileCopyrightText: Copyright 2023 VTK Book Authors and Contributors */ 2 | /* SPDX-License-Identifier: Apache-2.0 */ 3 | 4 | .figure-target { 5 | height: 0px; 6 | margin: 0px; 7 | } 8 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023 VTK Book Authors and Contributor 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | repos: 5 | - repo: https://github.com/fsfe/reuse-tool 6 | rev: "v1.1.2" 7 | hooks: 8 | - id: reuse 9 | -------------------------------------------------------------------------------- /VTKBook/Figures/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Where are the figures ? 4 | 5 | Figures are stored in https://github.com/Kitware/vtk-book under releases section: 6 | https://github.com/Kitware/vtk-book/releases/tag/book-resources. 7 | -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # VTK Book 4 | 5 | We are pleased to provide an update on efforts to update the online 6 | resources for the fourth edition of the [VTK textbook](https://vtk.org/vtk-textbook). 7 | 8 | 9 | ```{toctree} 10 | :maxdepth: 1 11 | :caption: Contents 12 | :glob: 13 | about_page 14 | citing 15 | VTKBook/* 16 | ``` 17 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | VTK Book content and the website source code for the page structure are 2 | separately licensed. 3 | 4 | The VTK Book content, including all text, figures, and code examples, is 5 | licensed under: 6 | 7 | SPDX-License-Identifier: CC-BY-4.0 8 | 9 | The website source code used to generate the page structure of the VTK Book 10 | website is licensed under: 11 | 12 | SPDX-License-Identifier: Apache-2.0 13 | 14 | All contributions to the VTK Book are subject to this COPYING file. 15 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023 VTK Book Authors and Contributors 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # Read the Docs configuration file 5 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 6 | 7 | version: 2 8 | 9 | build: 10 | os: ubuntu-22.04 11 | tools: 12 | python: "3" # Last stable CPython version 13 | 14 | sphinx: 15 | configuration: conf.py 16 | 17 | # If using Sphinx, optionally build your docs in additional formats such as PDF 18 | formats: 19 | - pdf 20 | 21 | python: 22 | install: 23 | - requirements: requirements.txt 24 | -------------------------------------------------------------------------------- /citing.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Citing 4 | 5 | When citing VTK in your scientific research, please mention the following work to support increased visibility and dissemination of our software: 6 | 7 | > Schroeder, Will; Martin, Ken; Lorensen, Bill (2006), The Visualization Toolkit (4th ed.), Kitware, ISBN 978-1-930934-19-1 8 | 9 | For your convenience here is a bibtex entry: 10 | 11 | ```bibtex 12 | @Book{vtkBook, 13 | author = "Will Schroeder and Ken Martin and Bill Lorensen", 14 | title = "The Visualization Toolkit (4th ed.)", 15 | publisher = "Kitware", 16 | year = "2006", 17 | isbn = "978-1-930934-19-1", 18 | } 19 | ``` 20 | -------------------------------------------------------------------------------- /.github/workflows/pre-commit.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023 VTK Book Authors and Contributor 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | name: pre-commit 5 | 6 | on: 7 | workflow_dispatch: 8 | pull_request: 9 | push: 10 | branches: 11 | - main 12 | 13 | concurrency: 14 | group: ${{ github.workflow }}-${{ github.ref }} 15 | cancel-in-progress: true 16 | 17 | jobs: 18 | pre-commit: 19 | runs-on: ubuntu-latest 20 | steps: 21 | - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 22 | 23 | - uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # v4.6.1 24 | with: 25 | python-version: '3.11' 26 | 27 | - uses: pre-commit/action@646c83fcd040023954eafda54b4db0192ce70507 # v3.0.0 28 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023 VTK Book Authors and Contributors 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # Minimal makefile for Sphinx documentation 5 | # 6 | 7 | # You can set these variables from the command line, and also 8 | # from the environment for the first two. 9 | SPHINXOPTS ?= 10 | SPHINXBUILD ?= sphinx-build 11 | SOURCEDIR = . 12 | BUILDDIR = _build 13 | 14 | # Put it first so that "make" without argument is like "make help". 15 | help: 16 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 17 | 18 | .PHONY: help Makefile 19 | 20 | # Catch-all target: route all unknown targets to Sphinx using the new 21 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 22 | %: Makefile 23 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 24 | -------------------------------------------------------------------------------- /make.bat: -------------------------------------------------------------------------------- 1 | REM SPDX-FileCopyrightText: Copyright 2023 VTK Book Authors and Contributors 2 | REM SPDX-License-Identifier: Apache-2.0 3 | @ECHO OFF 4 | 5 | pushd %~dp0 6 | 7 | REM Command file for Sphinx documentation 8 | 9 | if "%SPHINXBUILD%" == "" ( 10 | set SPHINXBUILD=sphinx-build 11 | ) 12 | set SOURCEDIR=. 13 | set BUILDDIR=_build 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.https://www.sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | if "%1" == "" goto help 29 | 30 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 31 | goto end 32 | 33 | :help 34 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 35 | 36 | :end 37 | popd 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # VTK Book 4 | 5 | [![Documentation Status](https://readthedocs.org/projects/vtk-book/badge/?version=latest)](https://book.vtk.org/en/latest/?badge=latest) 6 | [![License: CC BY 4.0](https://img.shields.io/badge/License-CC_BY_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by/4.0/) 7 | 8 | ## Citing 9 | 10 | When citing VTK in your scientific research, please mention the following work to support increased visibility and dissemination of our software: 11 | 12 | > Schroeder, Will; Martin, Ken; Lorensen, Bill (2006), The Visualization Toolkit (4th ed.), Kitware, ISBN 978-1-930934-19-1 13 | 14 | For your convenience here is a bibtex entry: 15 | 16 | ```bibtex 17 | @Book{vtkBook, 18 | author = "Will Schroeder and Ken Martin and Bill Lorensen", 19 | title = "The Visualization Toolkit (4th ed.)", 20 | publisher = "Kitware", 21 | year = "2006", 22 | isbn = "978-1-930934-19-1", 23 | } 24 | ``` 25 | 26 | ## Build environment 27 | 28 | To compile the document locally create a python virtual environment and install the required packages. 29 | For example in Linux / MacOS: 30 | ``` 31 | python -m venv env 32 | source env/bin/activate 33 | pip install -r requirements.txt 34 | ``` 35 | 36 | Use `make html` in this directory to build the documentation. 37 | Open `_build/html/index.html` in your browser to inspect the result. 38 | 39 | ## License 40 | 41 | The content of this repository is licensed under several licenses. We follow the [REUSE specification](https://reuse.software/) to indicate which license applies to the files specifically. Here are some general hints: 42 | 43 | * The VTK Book content, including all text, figures, and code examples, is licensed under `CC BY 4.0` 44 | 45 | * The website source code used to generate the page structure of the VTK Book website is licensed under `Apache-2.0` 46 | 47 | For more details on the licenses, please have a look at the file headers or associated `*.license` files. The terms of all used licenses are located in the [LICENSES](https://github.com/Kitware/vtk-book/tree/master/LICENSES) directory. 48 | -------------------------------------------------------------------------------- /conf.py: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023 VTK Book Authors and Contributors 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # Configuration file for the Sphinx documentation builder. 5 | # 6 | # For the full list of built-in configuration values, see the documentation: 7 | # https://www.sphinx-doc.org/en/master/usage/configuration.html 8 | 9 | # -- Project information ----------------------------------------------------- 10 | # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information 11 | 12 | from datetime import date 13 | 14 | project = "VTK Book" 15 | copyright = f"2006-{date.today().year}, VTK Book Authors and Contributors" 16 | author = "VTK Book Authors and Contributors" 17 | 18 | # -- General configuration --------------------------------------------------- 19 | # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration 20 | 21 | 22 | # Define the canonical URL if you are using a custom domain on Read the Docs 23 | import os 24 | html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "") 25 | 26 | # Tell Jinja2 templates the build is running on Read the Docs 27 | if os.environ.get("READTHEDOCS", "") == "True": 28 | if "html_context" not in globals(): 29 | html_context = {} 30 | html_context["READTHEDOCS"] = True 31 | 32 | # Add any Sphinx extension module names here, as strings. They can be 33 | # extensions coming with Sphinx (named "sphinx.ext.*") or your custom 34 | # ones. 35 | extensions = [ 36 | "myst_parser", 37 | ] 38 | 39 | myst_enable_extensions = [ 40 | "amsmath", 41 | "attrs_block", 42 | "dollarmath", # support latex equation inside $ $ 43 | "linkify", # convert bare links to hyperlinks 44 | ] 45 | myst_heading_anchors = 7 46 | 47 | templates_path = ["_templates"] 48 | exclude_patterns = [ 49 | "_build", 50 | "Thumbs.db", 51 | ".DS_Store", 52 | "README.md", 53 | "VTKBook/Figures/README.md", 54 | ] 55 | 56 | # -- Options for HTML output ------------------------------------------------- 57 | # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output 58 | 59 | html_theme = "sphinx_book_theme" 60 | html_theme_options = { 61 | "repository_url": "https://github.com/Kitware/vtk-book", 62 | "use_repository_button": True, 63 | } 64 | html_title = "VTK Book" 65 | html_static_path = ["_static"] 66 | html_css_files = [ 67 | "css/custom.css", 68 | ] 69 | -------------------------------------------------------------------------------- /about_page.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # The Three Efforts 4 | 5 | There are three coordinated efforts ongoing each with a different goal. Currently, none of the efforts will rewrite sections of the fourth edition. These are the first steps to a possible fifth edition, but that effort will require significant resources. 6 | 7 | The printed and free online PDF of the VTK textbook is the gold standard for this edition. The online PDF is a low-resolution version that exhibits some difficulty converting equations. It is available as one, down-loadable PDF with no active links. FrameMaker produces the PDF from FrameMaker files capable of producing different PDF resolutions. Editing the FrameMaker files requires a license from Adobe. It is unlikely the VTK community will have access to these proprietary files. Major contributors include Will Schroeder and other Kitware employees. See the PDF [here](https://www.vtk.org/vtk-textbook/). 8 | 9 | A VTK LaTeX version of the VTK textbook is a work-in-progress effort. The goal is to produce a version populated with links to figures, references, equations, examples, etc. The PDF version is down-loadable as a single file. The figures that exist as VTK Examples are linked to the nightly output of the regression testing. Once this work is stable, the user community will be able to push merge requests to fix problems with the Latex. The major contributor is Andrew Maclean. You can follow the progress [here](https://kitware.github.io/vtk-examples/site/VTKBookLaTeX/VTKTextBook/). 10 | 11 | A markdown version of the VTK textbook is also a work-in-progress. The goal is to produce an interactive, platform friendly version of the book. The entire text is available on as a Chapter by Chapter web site. The figures that exist as VTK Examples are linked to the nightly output of the regression testing. Once this work is stable, the user community will be able to push merge requests to fix problems with the markdown. The major contributors are Bill Lorensen and Bernhard Meehan. Bernhard has produced Latex for all 100 equations in the text. You can follow the progress [here](https://github.com/Kitware/vtk-book). 12 | 13 | # About this effort 14 | 15 | The markdown chapters started with the textbook PDF. We used a PDF to HTML Converter followed by an HTML to Markdown converter. The resulting Markdown file requires lots of hand editing, but much of this editing is repetitive. For the most part we did not edit the text. This means that Tcl in-line code still remains. Also API changes and new features in VTK are not included. A rewrite of the text is a much larger effort and may happen in the future. 16 | 17 | We did add code to link figure references to the figures. We used a set of [standard templates](VTKBook/Figures/FigureTemplates.txt) to caption the figures. We also link all references to VTK classes to their Doxygen documentation. 18 | 19 | We handle two special cases: 20 | 21 | 1) Equations - Berhdard Meehan encoded all of the 100 equations in the text into [Latex equations](VTKBook/Figures/Equations.txt). 22 | 23 | 2) Figures - We used the [VTKBookFigures](https://kitware.github.io/vtk-examples/site/VTKBookFigures) to populate all of the figures generated by C++ or Tcl examples. Since Tcl is no longer supported, We translated the Tcl to C++ and Python. Also, Andrew Maclean created Python examples for all of the VTKBookFigures. Some figures do not have associated code, so we captured those figures from the PDF using screen captures. 24 | -------------------------------------------------------------------------------- /VTKBook/Figures/FigureTemplates.txt: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2016 VTK Book Authors and Contributors 2 | # SPDX-License-Identifier: CC-BY-4.0 3 | 4 | Code to hide vtk objects in Figures 5 | v 6 | 7 | Template for example references to the VTK Book figures. 8 | 9 | !!! info 10 | See [Figure YY](XXChapterXX/#Figure-YY/) in [Chapter XX](/XXChapterXX) in the [VTK Textbook](01Chapter1/). 11 | 12 | Template for manually created figures 13 | 14 |
15 | FigureNUMBER 16 |
Figure NUMBER. Physical generation of an image.
17 |
18 | 19 | Templates for automaticaly created figures 20 | 21 | One figure 22 | 23 |
24 | Figure NUMBER 25 |
Figure NUMBER. Contouring examples. See ONE.cxx and ONE.py.
26 |
27 | 28 | Two figures a,b 29 | 30 |
31 |
32 | Figure NUMBERa 33 |
(a)
34 |
35 |
36 | Figure NUMBERb 37 |
(b)
38 |
39 |
Figure NUMBER. Contouring examples. (a) See ONE.cxx and ONE.py.; (b). See TWO.cxx and TWO.py.
40 |
41 | 42 | Three figures a,b,c 43 | 44 |
45 |
46 | Figure NUMBERa 47 |
(a)
48 |
49 |
50 | Figure NUMBERb 51 |
(b)
52 |
53 |
54 | Figure NUMBERc 55 |
(c)
56 |
57 |
Figure NUMBER. Contouring examples. (a) See ONE.cxx and ONE.py.; (b). See TWO.cxx and TWO.py.; (c) See THREE.cxx and THREE.py.
58 |
59 | 60 | Four Figures a,b,c,d 61 | 62 |
63 |
64 | Figure NUMBERa 65 |
(a)
66 |
67 |
68 | Figure NUMBERb 69 |
(b)
70 |
71 |
72 | Figure NUMBERc 73 |
(c)
74 |
75 |
76 | Figure NUMBERd 77 |
(d)
78 |
79 |
Figure NUMBER. Contouring examples. (a) See ONE.cxx and ONE.py.; (b). See TWO.cxx and TWO.py.; (c) See THREE.cxx and THREE.py.; (d) See FOUR.cxx and FOUR.py.
81 |
82 | -------------------------------------------------------------------------------- /VTKBook/00Preface.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Preface 4 | 5 | *V*isualization is a great field to work in these days. Advances in computer hardware and software have brought this technology into the reach of nearly every computer system. Even the ubiquitous personal computer now offers specialized 3D graphics hardware at discount prices. And with recent releases of the Windows operating systems such as XP, OpenGL has become the de facto standard API for 3D graphics. 6 | 7 | We view visualization and visual computing as nothing less than a new form of communication. All of us have long known the power of images to convey information, ideas, and feelings. Recent trends have brought us 2D images and graphics as evidenced by the variety of graphical user interfaces and business plotting software. But 3D images have been used sparingly, and often by specialists using specialized systems. Now this is changing. We believe we are entering a new era where 3D images, visualizations, and animations will begin to extend, and in some cases, replace the current communication paradigm based on words, mathematical symbols, and 2D images. Our hope is that along the way the human imagination will be freed like never before. 8 | 9 | This text and companion software offers one view of visualization. The field is broad, including elements of computer graphics, imaging, computer science, computational geometry, numerical analysis, statistical methods, data analysis, and studies in human perception. We certainly do not pretend to cover the field in its entirety. However, we feel that this text does offer you a great opportunity to learn about the fundamentals of visualization. Not only can you learn from the written word and companion images, but the included software will allow you to *practice* visualization. You can start by using the sample data we have provided here, and then move on to your own data and applications. We believe that you will soon appreciate visualization as much as we do. 10 | 11 | In this, the third edition of *_Visualization Toolkit_* textbook, we have added several new features since the first and second editions. Volume rendering is now extensively supported, including the ability to combine opaque surface graphics with volumes. We have added an extensive image processing pipeline that integrates conventional 3D visualization and graphics with imaging. Besides several new filters such as clipping, smoothing, 2D/3D Delaunay triangulation, and new decimation algorithms, we have added several readers and writers, and better support net-based tools such as Java and VRML. VTK now supports cell attributes, and attributes have been generalized into data arrays that are labeled as being scalars, vectors, and so on. Parallel processing, both shared-memory and distributed models, is a major addition. For example, VTK has been used on a large 1024-processor computer at the US National Labs to process nearly a pit-a-pat of data. A suite of 3D widgets is now available in VTK, enabling powerful data interaction techniques. Finally, VTK's cross-platform support has greatly improved with the addition of CMake---a very nice tool for managing the compile process ( http://www.cmake.org ). 12 | 13 | The additions of these features required the support of three special contributors to the text: Lisa Sobierajski Avila, Rick Avila, and C. Charles Law. Rick and Lisa worked hard to create an object-oriented design for volume rendering, and to insure that the design and software is fully compatible with the surface-based rendering system. Charles is the principle architect and implementor for the imaging pipeline. We are proud of the streaming and caching capability of the architecture: It allows us to handle large data sets despite limited memory resources. 14 | 15 | Especially satisfying has been the response from users of the text and software. Not only have we received a warm welcome from these wonderful people, but many of them have contributed code, bug fixes, data, and ideas that greatly improved the system. In fact, it would be best to categorize these people as co-developers rather than users of the system. We would like to encourage anyone else who is interested in sharing their ideas, code, or data to contact the VTK user community at http://www.vtk.org , or one of the authors. We would very much welcome any contributions you have to make. Contact us at http://www.kitware.com. 16 | 17 | # Acknowledgments 18 | 19 | *D*uring the creation of the _Visualization Toolkit_ we were fortunate to have the help of many people. Without their aid this book and the associated software might never have existed. Their contributions included performing book reviews, discussing software ideas, creating a supportive environment, and providing key suggestions for some of our algorithms and software implementations. 20 | 21 | We would like to first thank our management at the General Electric Corporate R&D Center who allowed us to pursue this project and utilize company facilities: Peter Meenan, Manager of the Computer Graphics and Systems Program, and Kirby Vosburgh, Manager of the Electronic Systems Laboratory. We would also like to thank management at GE Medical Systems who worked with us on the public versus proprietary software issues: John Lalonde, John Heinen, and Steve Roehm. 22 | 23 | We thank our co-workers at the R&D Center who have all been supportive: Matt Turek, for proof reading much of the second edition; also Majeid Alyassin, Russell Blue, Jeanette Bruno, Shane Chang, Nelson Corby, Rich Hammond, Margaret Kelliher, Tim Kelliher, Joyce Langan, Paul Miller, Chris Nafis, Bob Tatar, Chris Volpe, Boris Yamrom, Bill Hoffman (now at Kitware), Harvey Cline and Siegwalt Ludke. We thank former co-workers Skip Montanaro (who created a FAQ for us), Dan McLachlan and Michelle Barry. We'd also like to thank our friends and co-workers at GE Medical Systems: Ted Hudacko (who managed the first VTK users mailing list), Darin Okerlund, and John Skinner. Many ideas, helpful hints, and suggestions to improve the system came from this delightful group of people. 24 | 25 | The third edition is now published by Kitware, Inc. We very much appreciate the efforts of the many contributors at Kitware who have helped make VTK one of the leading visualization systems in the world today. Sébastien Barré, Andy Cedilnik, Berk Geveci, Amy Henderson, and Brad King have each made significant contributions. Thank also to the folks at GE Global Research such as Jim Miller who continue to push the quality of the system, particularly with the creation of the DART system for regression testing. The US National Labs, led by Jim Ahrens of Los Alamos, has been instrumental in adding parallel processing support to VTK. An additional special thanks to Kitware for accepting the challenge of publishing this book. 26 | 27 | Many of the bug fixes and improvements found in the second and third editions came from talented people located around the world. Some of these people are acknowledged in the software and elsewhere in the text, but most of them have contributed their time, knowledge, code, and data without regard for recognition and acknowledgment. It is this exchange of ideas and information with people like this that makes the *_Visualization Toolkit_* such a fun and exciting project to work on. In particular we would like to thank John Biddiscombe, Charl P. Botha, David Gobbi, Tim Hutton, Dean Inglis, and Prabhu Ramachandran. Thank you very much. 28 | 29 | A special thanks to the software and text reviewers who spent their own time to track down some nasty bugs, provide examples, and offer suggestions and improvements. Thank you Tom Citriniti, Mark Miller, George Petras, Hansong Zhang, Penny Rheingans, Paul Hinker, Richard Ellson, and Roger Crawfis. We'd also like to mention that Tom Citriniti at Rensselaer, and Penny Rheingans at the University of Mississippi (now at the University of Maryland Baltimore County) were the first faculty members to teach from early versions of this text. Thank you Penny and Tom for your feedback and extra effort. 30 | 31 | Most importantly we would like to thank our friends and loved ones who supported us patiently during this project. We know that you shouldered extra load for us. You certainly saw a lot less of us! But we're happy to say that we're back. Thank you. 32 | 33 | -------------------------------------------------------------------------------- /LICENSES/Apache-2.0.txt: -------------------------------------------------------------------------------- 1 | Valid-License-Identifier: Apache-2.0 2 | SPDX-URL: https://spdx.org/licenses/Apache-2.0.html 3 | License-Text: 4 | Apache License 5 | Version 2.0, January 2004 6 | http://www.apache.org/licenses/ 7 | 8 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 9 | 10 | 1. Definitions. 11 | 12 | "License" shall mean the terms and conditions for use, reproduction, 13 | and distribution as defined by Sections 1 through 9 of this document. 14 | 15 | "Licensor" shall mean the copyright owner or entity authorized by 16 | the copyright owner that is granting the License. 17 | 18 | "Legal Entity" shall mean the union of the acting entity and all 19 | other entities that control, are controlled by, or are under common 20 | control with that entity. For the purposes of this definition, 21 | "control" means (i) the power, direct or indirect, to cause the 22 | direction or management of such entity, whether by contract or 23 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 24 | outstanding shares, or (iii) beneficial ownership of such entity. 25 | 26 | "You" (or "Your") shall mean an individual or Legal Entity 27 | exercising permissions granted by this License. 28 | 29 | "Source" form shall mean the preferred form for making modifications, 30 | including but not limited to software source code, documentation 31 | source, and configuration files. 32 | 33 | "Object" form shall mean any form resulting from mechanical 34 | transformation or translation of a Source form, including but 35 | not limited to compiled object code, generated documentation, 36 | and conversions to other media types. 37 | 38 | "Work" shall mean the work of authorship, whether in Source or 39 | Object form, made available under the License, as indicated by a 40 | copyright notice that is included in or attached to the work 41 | (an example is provided in the Appendix below). 42 | 43 | "Derivative Works" shall mean any work, whether in Source or Object 44 | form, that is based on (or derived from) the Work and for which the 45 | editorial revisions, annotations, elaborations, or other modifications 46 | represent, as a whole, an original work of authorship. For the purposes 47 | of this License, Derivative Works shall not include works that remain 48 | separable from, or merely link (or bind by name) to the interfaces of, 49 | the Work and Derivative Works thereof. 50 | 51 | "Contribution" shall mean any work of authorship, including 52 | the original version of the Work and any modifications or additions 53 | to that Work or Derivative Works thereof, that is intentionally 54 | submitted to Licensor for inclusion in the Work by the copyright owner 55 | or by an individual or Legal Entity authorized to submit on behalf of 56 | the copyright owner. For the purposes of this definition, "submitted" 57 | means any form of electronic, verbal, or written communication sent 58 | to the Licensor or its representatives, including but not limited to 59 | communication on electronic mailing lists, source code control systems, 60 | and issue tracking systems that are managed by, or on behalf of, the 61 | Licensor for the purpose of discussing and improving the Work, but 62 | excluding communication that is conspicuously marked or otherwise 63 | designated in writing by the copyright owner as "Not a Contribution." 64 | 65 | "Contributor" shall mean Licensor and any individual or Legal Entity 66 | on behalf of whom a Contribution has been received by Licensor and 67 | subsequently incorporated within the Work. 68 | 69 | 2. Grant of Copyright License. Subject to the terms and conditions of 70 | this License, each Contributor hereby grants to You a perpetual, 71 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 72 | copyright license to reproduce, prepare Derivative Works of, 73 | publicly display, publicly perform, sublicense, and distribute the 74 | Work and such Derivative Works in Source or Object form. 75 | 76 | 3. Grant of Patent License. Subject to the terms and conditions of 77 | this License, each Contributor hereby grants to You a perpetual, 78 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 79 | (except as stated in this section) patent license to make, have made, 80 | use, offer to sell, sell, import, and otherwise transfer the Work, 81 | where such license applies only to those patent claims licensable 82 | by such Contributor that are necessarily infringed by their 83 | Contribution(s) alone or by combination of their Contribution(s) 84 | with the Work to which such Contribution(s) was submitted. If You 85 | institute patent litigation against any entity (including a 86 | cross-claim or counterclaim in a lawsuit) alleging that the Work 87 | or a Contribution incorporated within the Work constitutes direct 88 | or contributory patent infringement, then any patent licenses 89 | granted to You under this License for that Work shall terminate 90 | as of the date such litigation is filed. 91 | 92 | 4. Redistribution. You may reproduce and distribute copies of the 93 | Work or Derivative Works thereof in any medium, with or without 94 | modifications, and in Source or Object form, provided that You 95 | meet the following conditions: 96 | 97 | (a) You must give any other recipients of the Work or 98 | Derivative Works a copy of this License; and 99 | 100 | (b) You must cause any modified files to carry prominent notices 101 | stating that You changed the files; and 102 | 103 | (c) You must retain, in the Source form of any Derivative Works 104 | that You distribute, all copyright, patent, trademark, and 105 | attribution notices from the Source form of the Work, 106 | excluding those notices that do not pertain to any part of 107 | the Derivative Works; and 108 | 109 | (d) If the Work includes a "NOTICE" text file as part of its 110 | distribution, then any Derivative Works that You distribute must 111 | include a readable copy of the attribution notices contained 112 | within such NOTICE file, excluding those notices that do not 113 | pertain to any part of the Derivative Works, in at least one 114 | of the following places: within a NOTICE text file distributed 115 | as part of the Derivative Works; within the Source form or 116 | documentation, if provided along with the Derivative Works; or, 117 | within a display generated by the Derivative Works, if and 118 | wherever such third-party notices normally appear. The contents 119 | of the NOTICE file are for informational purposes only and 120 | do not modify the License. You may add Your own attribution 121 | notices within Derivative Works that You distribute, alongside 122 | or as an addendum to the NOTICE text from the Work, provided 123 | that such additional attribution notices cannot be construed 124 | as modifying the License. 125 | 126 | You may add Your own copyright statement to Your modifications and 127 | may provide additional or different license terms and conditions 128 | for use, reproduction, or distribution of Your modifications, or 129 | for any such Derivative Works as a whole, provided Your use, 130 | reproduction, and distribution of the Work otherwise complies with 131 | the conditions stated in this License. 132 | 133 | 5. Submission of Contributions. Unless You explicitly state otherwise, 134 | any Contribution intentionally submitted for inclusion in the Work 135 | by You to the Licensor shall be under the terms and conditions of 136 | this License, without any additional terms or conditions. 137 | Notwithstanding the above, nothing herein shall supersede or modify 138 | the terms of any separate license agreement you may have executed 139 | with Licensor regarding such Contributions. 140 | 141 | 6. Trademarks. This License does not grant permission to use the trade 142 | names, trademarks, service marks, or product names of the Licensor, 143 | except as required for reasonable and customary use in describing the 144 | origin of the Work and reproducing the content of the NOTICE file. 145 | 146 | 7. Disclaimer of Warranty. Unless required by applicable law or 147 | agreed to in writing, Licensor provides the Work (and each 148 | Contributor provides its Contributions) on an "AS IS" BASIS, 149 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 150 | implied, including, without limitation, any warranties or conditions 151 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 152 | PARTICULAR PURPOSE. You are solely responsible for determining the 153 | appropriateness of using or redistributing the Work and assume any 154 | risks associated with Your exercise of permissions under this License. 155 | 156 | 8. Limitation of Liability. In no event and under no legal theory, 157 | whether in tort (including negligence), contract, or otherwise, 158 | unless required by applicable law (such as deliberate and grossly 159 | negligent acts) or agreed to in writing, shall any Contributor be 160 | liable to You for damages, including any direct, indirect, special, 161 | incidental, or consequential damages of any character arising as a 162 | result of this License or out of the use or inability to use the 163 | Work (including but not limited to damages for loss of goodwill, 164 | work stoppage, computer failure or malfunction, or any and all 165 | other commercial damages or losses), even if such Contributor 166 | has been advised of the possibility of such damages. 167 | 168 | 9. Accepting Warranty or Additional Liability. While redistributing 169 | the Work or Derivative Works thereof, You may choose to offer, 170 | and charge a fee for, acceptance of support, warranty, indemnity, 171 | or other liability obligations and/or rights consistent with this 172 | License. However, in accepting such obligations, You may act only 173 | on Your own behalf and on Your sole responsibility, not on behalf 174 | of any other Contributor, and only if You agree to indemnify, 175 | defend, and hold each Contributor harmless for any liability 176 | incurred by, or claims asserted against, such Contributor by reason 177 | of your accepting any such warranty or additional liability. 178 | 179 | END OF TERMS AND CONDITIONS 180 | 181 | APPENDIX: How to apply the Apache License to your work. 182 | 183 | To apply the Apache License to your work, attach the following 184 | boilerplate notice, with the fields enclosed by brackets "{}" 185 | replaced with your own identifying information. (Don't include 186 | the brackets!) The text should be enclosed in the appropriate 187 | comment syntax for the file format. We also recommend that a 188 | file or class name and description of purpose be included on the 189 | same "printed page" as the copyright notice for easier 190 | identification within third-party archives. 191 | 192 | Copyright {yyyy} {name of copyright owner} 193 | 194 | Licensed under the Apache License, Version 2.0 (the "License"); 195 | you may not use this file except in compliance with the License. 196 | You may obtain a copy of the License at 197 | 198 | http://www.apache.org/licenses/LICENSE-2.0 199 | 200 | Unless required by applicable law or agreed to in writing, software 201 | distributed under the License is distributed on an "AS IS" BASIS, 202 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 203 | See the License for the specific language governing permissions and 204 | limitations under the License. 205 | -------------------------------------------------------------------------------- /LICENSES/CC-BY-4.0.txt: -------------------------------------------------------------------------------- 1 | Valid-License-Identifier: CC-BY-4.0 2 | SPDX-URL: https://spdx.org/licenses/CC-BY-4.0.html 3 | License-Text: 4 | 5 | Attribution 4.0 International 6 | 7 | ======================================================================= 8 | 9 | Creative Commons Corporation ("Creative Commons") is not a law firm and 10 | does not provide legal services or legal advice. Distribution of 11 | Creative Commons public licenses does not create a lawyer-client or 12 | other relationship. Creative Commons makes its licenses and related 13 | information available on an "as-is" basis. Creative Commons gives no 14 | warranties regarding its licenses, any material licensed under their 15 | terms and conditions, or any related information. Creative Commons 16 | disclaims all liability for damages resulting from their use to the 17 | fullest extent possible. 18 | 19 | Using Creative Commons Public Licenses 20 | 21 | Creative Commons public licenses provide a standard set of terms and 22 | conditions that creators and other rights holders may use to share 23 | original works of authorship and other material subject to copyright 24 | and certain other rights specified in the public license below. The 25 | following considerations are for informational purposes only, are not 26 | exhaustive, and do not form part of our licenses. 27 | 28 | Considerations for licensors: Our public licenses are 29 | intended for use by those authorized to give the public 30 | permission to use material in ways otherwise restricted by 31 | copyright and certain other rights. Our licenses are 32 | irrevocable. Licensors should read and understand the terms 33 | and conditions of the license they choose before applying it. 34 | Licensors should also secure all rights necessary before 35 | applying our licenses so that the public can reuse the 36 | material as expected. Licensors should clearly mark any 37 | material not subject to the license. This includes other CC- 38 | licensed material, or material used under an exception or 39 | limitation to copyright. More considerations for licensors: 40 | wiki.creativecommons.org/Considerations_for_licensors 41 | 42 | Considerations for the public: By using one of our public 43 | licenses, a licensor grants the public permission to use the 44 | licensed material under specified terms and conditions. If 45 | the licensor's permission is not necessary for any reason--for 46 | example, because of any applicable exception or limitation to 47 | copyright--then that use is not regulated by the license. Our 48 | licenses grant only permissions under copyright and certain 49 | other rights that a licensor has authority to grant. Use of 50 | the licensed material may still be restricted for other 51 | reasons, including because others have copyright or other 52 | rights in the material. A licensor may make special requests, 53 | such as asking that all changes be marked or described. 54 | Although not required by our licenses, you are encouraged to 55 | respect those requests where reasonable. More considerations 56 | for the public: 57 | wiki.creativecommons.org/Considerations_for_licensees 58 | 59 | ======================================================================= 60 | 61 | Creative Commons Attribution 4.0 International Public License 62 | 63 | By exercising the Licensed Rights (defined below), You accept and agree 64 | to be bound by the terms and conditions of this Creative Commons 65 | Attribution 4.0 International Public License ("Public License"). To the 66 | extent this Public License may be interpreted as a contract, You are 67 | granted the Licensed Rights in consideration of Your acceptance of 68 | these terms and conditions, and the Licensor grants You such rights in 69 | consideration of benefits the Licensor receives from making the 70 | Licensed Material available under these terms and conditions. 71 | 72 | 73 | Section 1 -- Definitions. 74 | 75 | a. Adapted Material means material subject to Copyright and Similar 76 | Rights that is derived from or based upon the Licensed Material 77 | and in which the Licensed Material is translated, altered, 78 | arranged, transformed, or otherwise modified in a manner requiring 79 | permission under the Copyright and Similar Rights held by the 80 | Licensor. For purposes of this Public License, where the Licensed 81 | Material is a musical work, performance, or sound recording, 82 | Adapted Material is always produced where the Licensed Material is 83 | synched in timed relation with a moving image. 84 | 85 | b. Adapter's License means the license You apply to Your Copyright 86 | and Similar Rights in Your contributions to Adapted Material in 87 | accordance with the terms and conditions of this Public License. 88 | 89 | c. Copyright and Similar Rights means copyright and/or similar rights 90 | closely related to copyright including, without limitation, 91 | performance, broadcast, sound recording, and Sui Generis Database 92 | Rights, without regard to how the rights are labeled or 93 | categorized. For purposes of this Public License, the rights 94 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 95 | Rights. 96 | 97 | d. Effective Technological Measures means those measures that, in the 98 | absence of proper authority, may not be circumvented under laws 99 | fulfilling obligations under Article 11 of the WIPO Copyright 100 | Treaty adopted on December 20, 1996, and/or similar international 101 | agreements. 102 | 103 | e. Exceptions and Limitations means fair use, fair dealing, and/or 104 | any other exception or limitation to Copyright and Similar Rights 105 | that applies to Your use of the Licensed Material. 106 | 107 | f. Licensed Material means the artistic or literary work, database, 108 | or other material to which the Licensor applied this Public 109 | License. 110 | 111 | g. Licensed Rights means the rights granted to You subject to the 112 | terms and conditions of this Public License, which are limited to 113 | all Copyright and Similar Rights that apply to Your use of the 114 | Licensed Material and that the Licensor has authority to license. 115 | 116 | h. Licensor means the individual(s) or entity(ies) granting rights 117 | under this Public License. 118 | 119 | i. Share means to provide material to the public by any means or 120 | process that requires permission under the Licensed Rights, such 121 | as reproduction, public display, public performance, distribution, 122 | dissemination, communication, or importation, and to make material 123 | available to the public including in ways that members of the 124 | public may access the material from a place and at a time 125 | individually chosen by them. 126 | 127 | j. Sui Generis Database Rights means rights other than copyright 128 | resulting from Directive 96/9/EC of the European Parliament and of 129 | the Council of 11 March 1996 on the legal protection of databases, 130 | as amended and/or succeeded, as well as other essentially 131 | equivalent rights anywhere in the world. 132 | 133 | k. You means the individual or entity exercising the Licensed Rights 134 | under this Public License. Your has a corresponding meaning. 135 | 136 | 137 | Section 2 -- Scope. 138 | 139 | a. License grant. 140 | 141 | 1. Subject to the terms and conditions of this Public License, 142 | the Licensor hereby grants You a worldwide, royalty-free, 143 | non-sublicensable, non-exclusive, irrevocable license to 144 | exercise the Licensed Rights in the Licensed Material to: 145 | 146 | a. reproduce and Share the Licensed Material, in whole or 147 | in part; and 148 | 149 | b. produce, reproduce, and Share Adapted Material. 150 | 151 | 2. Exceptions and Limitations. For the avoidance of doubt, where 152 | Exceptions and Limitations apply to Your use, this Public 153 | License does not apply, and You do not need to comply with 154 | its terms and conditions. 155 | 156 | 3. Term. The term of this Public License is specified in Section 157 | 6(a). 158 | 159 | 4. Media and formats; technical modifications allowed. The 160 | Licensor authorizes You to exercise the Licensed Rights in 161 | all media and formats whether now known or hereafter created, 162 | and to make technical modifications necessary to do so. The 163 | Licensor waives and/or agrees not to assert any right or 164 | authority to forbid You from making technical modifications 165 | necessary to exercise the Licensed Rights, including 166 | technical modifications necessary to circumvent Effective 167 | Technological Measures. For purposes of this Public License, 168 | simply making modifications authorized by this Section 2(a) 169 | (4) never produces Adapted Material. 170 | 171 | 5. Downstream recipients. 172 | 173 | a. Offer from the Licensor -- Licensed Material. Every 174 | recipient of the Licensed Material automatically 175 | receives an offer from the Licensor to exercise the 176 | Licensed Rights under the terms and conditions of this 177 | Public License. 178 | 179 | b. No downstream restrictions. You may not offer or impose 180 | any additional or different terms or conditions on, or 181 | apply any Effective Technological Measures to, the 182 | Licensed Material if doing so restricts exercise of the 183 | Licensed Rights by any recipient of the Licensed 184 | Material. 185 | 186 | 6. No endorsement. Nothing in this Public License constitutes or 187 | may be construed as permission to assert or imply that You 188 | are, or that Your use of the Licensed Material is, connected 189 | with, or sponsored, endorsed, or granted official status by, 190 | the Licensor or others designated to receive attribution as 191 | provided in Section 3(a)(1)(A)(i). 192 | 193 | b. Other rights. 194 | 195 | 1. Moral rights, such as the right of integrity, are not 196 | licensed under this Public License, nor are publicity, 197 | privacy, and/or other similar personality rights; however, to 198 | the extent possible, the Licensor waives and/or agrees not to 199 | assert any such rights held by the Licensor to the limited 200 | extent necessary to allow You to exercise the Licensed 201 | Rights, but not otherwise. 202 | 203 | 2. Patent and trademark rights are not licensed under this 204 | Public License. 205 | 206 | 3. To the extent possible, the Licensor waives any right to 207 | collect royalties from You for the exercise of the Licensed 208 | Rights, whether directly or through a collecting society 209 | under any voluntary or waivable statutory or compulsory 210 | licensing scheme. In all other cases the Licensor expressly 211 | reserves any right to collect such royalties. 212 | 213 | 214 | Section 3 -- License Conditions. 215 | 216 | Your exercise of the Licensed Rights is expressly made subject to the 217 | following conditions. 218 | 219 | a. Attribution. 220 | 221 | 1. If You Share the Licensed Material (including in modified 222 | form), You must: 223 | 224 | a. retain the following if it is supplied by the Licensor 225 | with the Licensed Material: 226 | 227 | i. identification of the creator(s) of the Licensed 228 | Material and any others designated to receive 229 | attribution, in any reasonable manner requested by 230 | the Licensor (including by pseudonym if 231 | designated); 232 | 233 | ii. a copyright notice; 234 | 235 | iii. a notice that refers to this Public License; 236 | 237 | iv. a notice that refers to the disclaimer of 238 | warranties; 239 | 240 | v. a URI or hyperlink to the Licensed Material to the 241 | extent reasonably practicable; 242 | 243 | b. indicate if You modified the Licensed Material and 244 | retain an indication of any previous modifications; and 245 | 246 | c. indicate the Licensed Material is licensed under this 247 | Public License, and include the text of, or the URI or 248 | hyperlink to, this Public License. 249 | 250 | 2. You may satisfy the conditions in Section 3(a)(1) in any 251 | reasonable manner based on the medium, means, and context in 252 | which You Share the Licensed Material. For example, it may be 253 | reasonable to satisfy the conditions by providing a URI or 254 | hyperlink to a resource that includes the required 255 | information. 256 | 257 | 3. If requested by the Licensor, You must remove any of the 258 | information required by Section 3(a)(1)(A) to the extent 259 | reasonably practicable. 260 | 261 | 4. If You Share Adapted Material You produce, the Adapter's 262 | License You apply must not prevent recipients of the Adapted 263 | Material from complying with this Public License. 264 | 265 | 266 | Section 4 -- Sui Generis Database Rights. 267 | 268 | Where the Licensed Rights include Sui Generis Database Rights that 269 | apply to Your use of the Licensed Material: 270 | 271 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 272 | to extract, reuse, reproduce, and Share all or a substantial 273 | portion of the contents of the database; 274 | 275 | b. if You include all or a substantial portion of the database 276 | contents in a database in which You have Sui Generis Database 277 | Rights, then the database in which You have Sui Generis Database 278 | Rights (but not its individual contents) is Adapted Material; and 279 | 280 | c. You must comply with the conditions in Section 3(a) if You Share 281 | all or a substantial portion of the contents of the database. 282 | 283 | For the avoidance of doubt, this Section 4 supplements and does not 284 | replace Your obligations under this Public License where the Licensed 285 | Rights include other Copyright and Similar Rights. 286 | 287 | 288 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 289 | 290 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 291 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 292 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 293 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 294 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 295 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 296 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 297 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 298 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 299 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 300 | 301 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 302 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 303 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 304 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 305 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 306 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 307 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 308 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 309 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 310 | 311 | c. The disclaimer of warranties and limitation of liability provided 312 | above shall be interpreted in a manner that, to the extent 313 | possible, most closely approximates an absolute disclaimer and 314 | waiver of all liability. 315 | 316 | 317 | Section 6 -- Term and Termination. 318 | 319 | a. This Public License applies for the term of the Copyright and 320 | Similar Rights licensed here. However, if You fail to comply with 321 | this Public License, then Your rights under this Public License 322 | terminate automatically. 323 | 324 | b. Where Your right to use the Licensed Material has terminated under 325 | Section 6(a), it reinstates: 326 | 327 | 1. automatically as of the date the violation is cured, provided 328 | it is cured within 30 days of Your discovery of the 329 | violation; or 330 | 331 | 2. upon express reinstatement by the Licensor. 332 | 333 | For the avoidance of doubt, this Section 6(b) does not affect any 334 | right the Licensor may have to seek remedies for Your violations 335 | of this Public License. 336 | 337 | c. For the avoidance of doubt, the Licensor may also offer the 338 | Licensed Material under separate terms or conditions or stop 339 | distributing the Licensed Material at any time; however, doing so 340 | will not terminate this Public License. 341 | 342 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 343 | License. 344 | 345 | 346 | Section 7 -- Other Terms and Conditions. 347 | 348 | a. The Licensor shall not be bound by any additional or different 349 | terms or conditions communicated by You unless expressly agreed. 350 | 351 | b. Any arrangements, understandings, or agreements regarding the 352 | Licensed Material not stated herein are separate from and 353 | independent of the terms and conditions of this Public License. 354 | 355 | 356 | Section 8 -- Interpretation. 357 | 358 | a. For the avoidance of doubt, this Public License does not, and 359 | shall not be interpreted to, reduce, limit, restrict, or impose 360 | conditions on any use of the Licensed Material that could lawfully 361 | be made without permission under this Public License. 362 | 363 | b. To the extent possible, if any provision of this Public License is 364 | deemed unenforceable, it shall be automatically reformed to the 365 | minimum extent necessary to make it enforceable. If the provision 366 | cannot be reformed, it shall be severed from this Public License 367 | without affecting the enforceability of the remaining terms and 368 | conditions. 369 | 370 | c. No term or condition of this Public License will be waived and no 371 | failure to comply consented to unless expressly agreed to by the 372 | Licensor. 373 | 374 | d. Nothing in this Public License constitutes or may be interpreted 375 | as a limitation upon, or waiver of, any privileges and immunities 376 | that apply to the Licensor or You, including from the legal 377 | processes of any jurisdiction or authority. 378 | 379 | 380 | ======================================================================= 381 | 382 | Creative Commons is not a party to its public 383 | licenses. Notwithstanding, Creative Commons may elect to apply one of 384 | its public licenses to material it publishes and in those instances 385 | will be considered the “Licensor.” The text of the Creative Commons 386 | public licenses is dedicated to the public domain under the CC0 Public 387 | Domain Dedication. Except for the limited purpose of indicating that 388 | material is shared under a Creative Commons public license or as 389 | otherwise permitted by the Creative Commons policies published at 390 | creativecommons.org/policies, Creative Commons does not authorize the 391 | use of the trademark "Creative Commons" or any other trademark or logo 392 | of Creative Commons without its prior written consent including, 393 | without limitation, in connection with any unauthorized modifications 394 | to any of its public licenses or any other arrangements, 395 | understandings, or agreements concerning use of licensed material. For 396 | the avoidance of doubt, this paragraph does not form part of the 397 | public licenses. 398 | 399 | Creative Commons may be contacted at creativecommons.org. 400 | -------------------------------------------------------------------------------- /VTKBook/Figures/Equations.txt: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2016 VTK Book Authors and Contributors 2 | # SPDX-License-Identifier: CC-BY-4.0 3 | 4 | Chapter 4 5 | % Equation 4-1 6 | 7 | $$ 8 | \begin{equation*} 9 | F(x,y,z) = a_0 x^2 + a_1 y^2 + a_2 z^2 + a_3 x y + a_4 y z + a_5 x z + a_6 x + a_7 y + a_8 z + a_9 10 | \end{equation*} 11 | \bf\tag{4-1} 12 | $$ 13 | 14 | Chapter 6 15 | 16 | Figure 6-1 17 | $$ 18 | \left. \begin{aligned} 19 | &s_i = min, i = 0 \\ 20 | &s_i > max, i = n-1 \\ 21 | &i =n \left(\frac{s_i - min}{max - min}\right) 22 | \end{aligned}\right. 23 | 24 | Figure 6-12 - PNG generated with http://latex2png.com/ 25 | Figure 6-12 26 | s_i = \frac{(p_i-p_j) \cdot (p_h-p_l)}{|p_h-p_l|^2} 27 | Figure 6-21c - PNG generated with http://latex2png.com/ 28 | 29 | $$ 30 | \large\sigma{_x} &=& -\frac{P}{2 \pi \rho ^2}\left(\frac{3zx^2}{\rho ^3} -(1-2v)\left((\frac{z}{\rho\ 31 | } - \frac{\rho}{\rho+z}+\frac{x ^2 (2 \rho + z)}{\rho ( \rho + z) ^2} \right) \right) \\ 32 | \large\sigma{_y} &=& -\frac{P}{2 \pi \rho ^2}\left(\frac{3zy^2}{\rho ^3} -(1-2v)\left((\frac{z}{\rho\ 33 | } - \frac{\rho}{\rho+z}+\frac{y ^2 (2 \rho + z)}{\rho ( \rho + z) ^2} \right) \right) \\ \\ 34 | \large\sigma{_z} &=& -\frac{3Pz^3}{2 \pi \rho ^5} 35 | $$ 36 | 37 | $$ 38 | \tau_{xy} &=& \tau_{yx}=-\frac{P}{2 \pi \rho ^2}\left( \frac{3xyz}{\rho ^3} - (1-2v)\left(\frac{xy(2 \rho + z)}{\rho ( \rho + z) ^2}\right)\right) \\ 39 | \tau_{xz}&=&\tau_{zx} = -\frac{3Pxz^2}{2 \pi \rho ^5}\\ 40 | \tau_{yz}&=&=\tau_{zy} = -\frac{3Pyz^2}{2 \pi \rho ^5} 41 | $$ 42 | 43 | Figure 6-20a 44 | \huge\left[\begin{array}{ccc} 45 | \sigma{_x} & \tau{_{xy}} & \tau{_{xz}} \\ 46 | \tau{_{yx}} & \sigma{_y} & \tau{_{yz}} \\ 47 | \tau{_{zx}} & \tau{_{zy}} & \sigma{_z} 48 | \end{array}\right] 49 | 50 | Figure 6-20b 51 | \huge\left[\begin{array}{ccc} 52 | \frac{\partial u}{\partial x} & (\frac{\partial u}{\partial y} + \frac{\partial v}{\partial z})& (\frac{\partial u}{\partial z} + \frac{\partial w}{\partial x})\\ \\ 53 | (\frac{\partial u}{\partial y} + \frac{\partial v}{\partial z}) & \frac{\partial v}{\partial y} & (\frac{\partial v}{\partial z} + \frac{\partial w}{\partial y}) \\ \\ 54 | (\frac{\partial u}{\partial z} + \frac{\partial w}{\partial x}) & (\frac{\partial v}{\partial z} + \frac{\partial w}{\partial y})& 55 | \frac{\partial w}{\partial z} 56 | \end{array}\right] 57 | 58 | ------- Chapter 7 59 | from Bernard Mehan 60 | 61 | % EQUATION 7-1 62 | \begin{eqnarray*} 63 | R &=& (1 - A_s) R_b + A_s R_s \\ 64 | G &=& (1 - A_s) G_b + A_s G_s \\ 65 | B &=& (1 - A_s) B_b + A_s B_s \\ 66 | A &=& (1 - A_s) A_b + A_s 67 | \end{eqnarray*} 68 | \bf\tag{7-1} 69 | 70 | % EQUATION 7-2 71 | \begin{equation*} 72 | \left(x, y, z\right) = \left(x_0, y_0, z_0\right) + \left(a, b, c\right) t 73 | \end{equation*} 74 | \bf\tag{7-2} 75 | 76 | % EQUATION 7-3 77 | \begin{eqnarray*} 78 | g_x &=& \frac{f(x + \Delta x, y, z) - f(x - \Delta x, y, z)}{2 \Delta x} \\ 79 | g_y &=& \frac{f(x, y + \Delta y, z) - f(x, y - \Delta y, z)}{2 \Delta y} \\ 80 | g_z &=& \frac{f(x, y, z + \Delta z) - f(x, y, z - \Delta z)}{2 \Delta z} 81 | \end{eqnarray*} 82 | \bf\tag{7-3} 83 | 84 | % EQUATION 7-4 85 | \begin{equation*} 86 | I\left(t_0, \vec{\omega}\right) = \int_{t_0}^{\infty} Q\left(\tau\right) e^{\left(-\int_{t_0}^{t} \sigma_\text{a}\left(\tau\right) + \sigma_\text{sc}\left(\tau\right) \, \text{d} \tau\right)} \, \text{d}\tau 87 | \end{equation*} 88 | \bf\tag{7-4} 89 | 90 | % EQUATION 7-5 91 | % perhaps with a note that capital omega is "over all solid angles" 92 | \begin{equation*} 93 | Q(t) = E(t) + \sigma_\text{sc}(t) \int_{\Omega} \rho_{sc}(\omega' \to \omega) I(t, \omega') \, \text{d}\omega' 94 | \end{equation*} 95 | \bf\tag{7-5} 96 | 97 | % EQUATION 7-6 98 | \begin{equation*} 99 | I\left(t_0, \vec{\omega}\right) = \int_{t_0}^{\infty} E\left(\tau\right) e^\left(-\int_{t_0}^{t} \sigma_\text{a}\left(\tau\right) \, \text{d} \tau \right) \, \text{d}\tau 100 | \end{equation*} 101 | \bf\tag{7-6} 102 | 103 | % EQUATION 7-7 104 | \begin{equation*} 105 | I(t_\text{near}, \vec{\omega}) = \sum_{t = t_\text{near}}^{t \leq t_\text{far}} \alpha(t) \prod_{t' = t_\text{near}}^{t' < t_\text{far}}\left(1 - a(t') \right) 106 | \end{equation*} 107 | \bf\tag{7-7} 108 | 109 | % EQUATION 7-8 110 | \begin{equation*} 111 | I(t_n, \vec{\omega}) = \alpha(t_n) + \left(1 - \alpha(t_n) \right) I(t_{n + 1}, \vec{\omega}) 112 | \end{equation*} 113 | \bf\tag{7-8} 114 | 115 | % EQUATION 7-9 116 | \begin{eqnarray*} 117 | \frac{\partial Z}{\partial x} &\simeq& \frac{Z\left(x_p + \Delta x, y_p\right) - Z\left(x_p - \Delta x, y_p\right)}{2 \Delta x} \\ 118 | \frac{\partial Z}{\partial y} &\simeq& \frac{Z\left(x_p, y_p + \Delta y\right) - Z\left(x_p, y_p - \Delta y\right)}{2 \Delta y} \\ 119 | \frac{\partial Z}{\partial z} &\simeq& 1 120 | \end{eqnarray*} 121 | \bf\tag{7-9} 122 | 123 | % EQUATION 7-10 124 | \begin{equation*} 125 | \frac{\partial Z}{\partial x} \simeq \frac{Z(x_p + \Delta x, y_p) - Z(x_p, y_p)}{\Delta x} 126 | \end{equation*} 127 | \bf\tag{7-10} 128 | 129 | % EQUATION 7-11 130 | \begin{equation*} 131 | \frac{\partial Z}{\partial x} \simeq \frac{Z(x_p, y_p) - Z(x_p - \Delta x, y_p)}{\Delta x} 132 | \end{equation*} 133 | \bf\tag{7-11} 134 | 135 | % EQUATION 7-12 136 | \begin{equation*} 137 | I(t_\text{near}, \vec{\omega}) = \sum_{t = t_\text{near}}^{t \leq t_\text{far}} \alpha(t)\left(I_\text{a} + I_\text{d} + I_\text{s}\right) \prod_{t' = t_\text{near}}^{t' < t_\text{far}}\left(1 - a(t') \right) 138 | \end{equation*} 139 | \bf\tag{7-12} 140 | 141 | % EQUATION 7-13 142 | \begin{eqnarray*} 143 | \vec{f}_\text{new} &=& \left(\vec{f}\cdot \textbf{M}_\text{WD} + \vec{O}_\text{p}\right)\cdot \textbf{M}_\text{DW} \\ 144 | \vec{O}_\text{w} &=& \vec{f}_\text{new} - \vec{f} \\ 145 | \vec{p}_\text{new} &=& \vec{p} + \vec{O}_\text{w} 146 | \end{eqnarray*} 147 | \bf\tag{7-13} 148 | 149 | Chapter 8 150 | 151 | % EQUATION 8-1 152 | \begin{equation*} 153 | x(r) = (1 - r) x_i + r x_{i + 1} 154 | \end{equation*} 155 | 156 | % EQUATION 8-2 157 | \begin{equation*} 158 | p_\text{id} = i_p +j_p n_x + k_p n_y 159 | \end{equation*} 160 | 161 | % EQUATION 8-3 162 | \begin{equation*} 163 | \text{cell}_\text{id} = i_p + j_p (n_x - 1) + k_p (n_x - 1)(n_y - 1) 164 | \end{equation*} 165 | 166 | % EQUATION 8-4 167 | \begin{equation*} 168 | d = \sum_{i = 0}^{n - 1}W_i\, d_i 169 | \end{equation*} 170 | 171 | % EQUATION 8-5 172 | % check me on this one - I was reading and guessing the meaning 173 | \begin{equation*} 174 | W_i = 1, W_{j \neq i} = 0 \quad \text{when} \quad p = p_i 175 | \end{equation*} 176 | 177 | % EQUATION 8-6 178 | % check me on this one - I was reading and guessing the meaning 179 | \begin{equation*} 180 | \sum W_i = 1, \quad 0 \leq W_i \leq 1 181 | \end{equation*} 182 | 183 | % FIGURE 8-3 184 | \begin{eqnarray*} 185 | W_0 &=& 1-r \\ 186 | W_1 &=& r 187 | \end{eqnarray*} 188 | 189 | % FIGURE 8-4 190 | \begin{eqnarray*} 191 | W_0 &=& (1-r)(1 - s) \\ 192 | W_1 &=& r(1 - s) \\ 193 | W_2 &=& (1 - r)s \\ 194 | W_3 &=& r s 195 | \end{eqnarray*} 196 | 197 | % FIGURE 8-5 198 | \begin{eqnarray*} 199 | W_0 &=& (1-r)(1 - s) \\ 200 | W_1 &=& r(1 - s) \\ 201 | W_2 &=& r s \\ 202 | W_3 &=& (1 - r)s 203 | \end{eqnarray*} 204 | 205 | % FIGURE 8-6 206 | \begin{eqnarray*} 207 | W_0 &=& 1 - r - s \\ 208 | W_1 &=& r \\ 209 | W_2 &=& s \\ 210 | \end{eqnarray*} 211 | 212 | % FIGURE 8-7 213 | \begin{eqnarray*} 214 | W_i &=& \frac{r_i^{-2}}{\sum r_i^{-2}} \\ 215 | r_i &=& \vert p_i - x \vert 216 | \end{eqnarray*} 217 | 218 | % FIGURE 8-9 219 | \begin{eqnarray*} 220 | W_0 &=& 1 - r - s - t \\ 221 | W_1 &=& r \\ 222 | W_2 &=& s \\ 223 | W_3 &=& t 224 | \end{eqnarray*} 225 | 226 | % FIGURE 8-10 227 | \begin{eqnarray*} 228 | W_0 &=& (1 - r)(1 - s)(1 - t) \\ 229 | W_1 &=& r (1-s)(1 -t) \\ 230 | W_2 &=& (1-r)s(1-t) \\ 231 | W_3 &=& rs(1 - t) \\ 232 | W_4 &=& (1 - r)(1 - s) t \\ 233 | W_5 &=& r (1-s)t \\ 234 | W_6 &=& (1 - r)s t \\ 235 | W_7 &=& r s t 236 | \end{eqnarray*} 237 | 238 | % FIGURE 8-11 239 | \begin{eqnarray*} 240 | W_0 &=& (1 - r)(1 - s)(1 - t) \\ 241 | W_1 &=& r (1-s)(1 -t) \\ 242 | W_2 &=& rs (1-t) \\ 243 | W_3 &=& (1-r)s(1 - t) \\ 244 | W_4 &=& (1 - r)(1 - s) t \\ 245 | W_5 &=& r (1-s)t \\ 246 | W_6 &=& rs t \\ 247 | W_7 &=& (1-r)st 248 | \end{eqnarray*} 249 | 250 | % FIGURE 8-12 251 | \begin{eqnarray*} 252 | W_0 &=& (1 - r - s)(1 - t) \\ 253 | W_1 &=& r (1-t) \\ 254 | W_2 &=& s (1 - t) \\ 255 | W_3 &=& (1 - r - s)t \\ 256 | W_4 &=& r t \\ 257 | W_5 &=& s t 258 | \end{eqnarray*} 259 | 260 | % FIGURE 8-13 261 | \begin{eqnarray*} 262 | W_0 &=& (1-r)(1-s)(1-t) \\ 263 | W_1 &=& r(1-s)(1-t) \\ 264 | W_2 &=& r s (1-t) \\ 265 | W_3 &=& (1-r)s(1-t) \\ 266 | W_4 &=& t 267 | \end{eqnarray*} 268 | 269 | % FIGURE 8-14 270 | % there are several blocks of these - not sure if you needed them separate 271 | \begin{eqnarray*} 272 | x_i &=& \frac{1}{2}\left(1 +\cos\left(\frac{5\pi}{4} + i \frac{2\pi}{5}\right)\right) \\ 273 | y_i &=& \frac{1}{2}\left(1 +\sin\left(\frac{5\pi}{4} + i \frac{2\pi}{5}\right)\right) \\ 274 | i &\in& \lbrace 0, 1, 2, 3, 4 \rbrace 275 | \end{eqnarray*} 276 | 277 | \begin{eqnarray*} 278 | A &=& x_2 - x_1 \\ 279 | B &=& y_2 - y_1 \\ 280 | C &=& x_1 y_2 - x_2 y_1 \\ 281 | D &=& x_2 - x_3 \\ 282 | E &=& x_2 y_3 - x_3 y_2 \\ 283 | F &=& x_0 - x_4 \\ 284 | G &=& y_4 - y_0 \\ 285 | H &=& x_0 y_4 - x_4 y_0 286 | \end{eqnarray*} 287 | 288 | \begin{eqnarray*} 289 | W_0 &=& -N(-As + Br - C)(Bs-Ar-C)(t - 1) \\ 290 | W_1 &=& N(Ds+Dr-E)(Fs-Gr-H)(t-1) \\ 291 | W_2 &=& -N(Bs -Ar -C)(-Gs-Fr+H)(t - 1)\\ 292 | W_3 &=& N(-As + Br -C)(Fs + Gr - H)(t - 1) \\ 293 | W_4 &=& -N(-Gs - Fr + H)(Ds + Dr - E)(t - 1) \\ 294 | W_5 &=& N(-As +Br - C)(Bs -Ar -C)t \\ 295 | W_6 &=& -N(Ds + Dr - E)(Fs + Gr - H)t\\ 296 | W_7 &=& N(Bs - Ar -C)(-Gs -Fr + H)t \\ 297 | W_8 &=& -N(-As + Br -C)(Fs + Gr - H)t \\ 298 | W_9 &=& N(-Gs - Fr + H)(Ds + Dr -E)t 299 | \end{eqnarray*} 300 | 301 | % FIGURE 8-15 302 | % THERE SEEMS TO BE A PROBLEM WITH alpha and beta - they are the same thing? 303 | % Perhaps there was a minus sign somewhere? 304 | \begin{eqnarray*} 305 | \alpha &=& \frac{\sqrt{3}}{4} + \frac{1}{2} \\ 306 | \beta &=& \frac{1}{2} - \frac{\sqrt{3}}{4}, \alpha + \beta = 1 307 | \end{eqnarray*} 308 | 309 | \begin{eqnarray*} 310 | W_0 &=&-\frac{16}{3}(r - \alpha)(r - \beta)(s - 1)(t - 1) \\ 311 | W_1 &=&\frac{16}{3}(r - \frac{1}{2})(r - \beta)(s - \frac{3}{4})(t - 1) \\ 312 | W_2 &=& -\frac{16}{3}(r - \frac{1}{2})(r - \beta)(s - \frac{1}{4})(t - 1) \\ 313 | W_3 &=& \frac{16}{3}(r - \alpha)(r - \beta)s(t - 1) \\ 314 | W_4 &=& -\frac{16}{3}(r - \frac{1}{2})(r - \alpha)(s - \frac{1}{4})(t - 1) \\ 315 | W_5 &=& \frac{16}{3}(r - \frac{1}{2})(r - \alpha)(s - \frac{3}{4})(t - 1) 316 | \end{eqnarray*} 317 | 318 | \begin{eqnarray*} 319 | W_6 &=& \frac{16}{3}(r - \alpha)(r - \beta)(s - 1)t \\ 320 | W_7 &=&-\frac{16}{3}(r - \frac{1}{2})(r - \beta)(s - \frac{3}{4})t \\ 321 | W_8 &=& \frac{16}{3}(r - \frac{1}{2})(r - \beta)(s - \frac{1}{4})t \\ 322 | W_9 &=& -\frac{16}{3}(r - \alpha)(r - \beta)st \\ 323 | W_{10} &=& \frac{16}{3}(r - \frac{1}{2})(r - \alpha)(s - \frac{1}{4})t \\ 324 | W_{11} &=& -\frac{16}{3}(r - \frac{1}{2})(r - \alpha)(s - \frac{3}{4})t 325 | \end{eqnarray*} 326 | 327 | % FIGURE 8-16 328 | \begin{eqnarray*} 329 | W_0 &=& 2 \left( r - \frac{1}{2}\right)(r - 1) \\ 330 | W_1 &=& 2 r \left( r - \frac{1}{2}\right) \\ 331 | W_2 &=& 4 r (1 - r) 332 | \end{eqnarray*} 333 | 334 | % FIGURE 8-17 335 | \begin{eqnarray*} 336 | W_0 &=& (1 - r - s)(2(1 - r - s) - 1) \\ 337 | W_1 &=& r (2 r - 1) \\ 338 | W_2 &=& s(2s - 1) \\ 339 | W_3 &=& 4 r (1 - r - s) \\ 340 | W_4 &=& 4 r s \\ 341 | W_5 &=& 4 s (1 - r-s) 342 | \end{eqnarray*} 343 | 344 | % FIGURE 8-18 345 | \begin{eqnarray*} 346 | \xi &=& 2 r - 1, \quad \xi_i = \pm 1 \\ 347 | \eta &=& 2 s - 1, \quad \eta_i = \pm 1 \\ 348 | W_i &=& (1 + \xi_i \xi)(1 + \eta_i \eta)(\xi_i \xi + \eta_i \eta - 1)/4, \quad i \in \lbrace 0, 1, 2, 3 \rbrace \\ 349 | W_i &=& (1 - \xi^2)(1 + \eta_i \eta)/2, \quad i \in \lbrace 4, 6 \rbrace \\ 350 | W_i &=& (1 - \eta^2)(1 + \xi_i \xi)/2, \quad i \in \lbrace 5, 7 \rbrace \\ 351 | \end{eqnarray*} 352 | 353 | % FIGURE 8-19 354 | \begin{eqnarray*} 355 | u &=& 1 - r - s- t \\ 356 | W_0 &=& u(2u-1) \\ 357 | W_1 &=& r(2r - 1) \\ 358 | W_2 &=& s(2s - 1) \\ 359 | W_3 &=& t (2t - 1) \\ 360 | W_4 &=& 4 u r \\ 361 | W_5 &=& 4 r s \\ 362 | W_6 &=& 4 s u \\ 363 | W_7 &=& 4 u t \\ 364 | W_8 &=& 4 r t \\ 365 | W_9 &=& 4 s t 366 | \end{eqnarray*} 367 | 368 | % FIGURE 8-20 369 | \begin{eqnarray*} 370 | \xi &=& 2r - 1,\quad \xi_i = \pm1 \\ 371 | \eta &=& 2 s - 1,\quad \eta_i = \pm1 \\ 372 | \zeta &=& 2 t - 1,\quad \zeta_i = \pm1 \\ 373 | W_i &=& (1 + \xi_i \xi)(1 + \eta_i \eta)(1 + \zeta_i \zeta)(\xi_i \xi + \eta_i \eta + \zeta_i \zeta - 2)/8, \quad i \in \lbrace 1 \ldots 7 \rbrace \\ 374 | W_i &=& (1 - \xi^2)(1 + \eta_i \eta)(1 + \zeta_i \zeta)/4, \quad i \in \lbrace 8, 10, 12, 14 \rbrace\\ 375 | W_i &=& (1 - \eta^2)(1 + \xi_i \xi)(1 + \zeta_i \zeta)/4, \quad i \in \lbrace 9, 11, 13, 15 \rbrace \\ 376 | W_i &=& (1 - \zeta^2)(1 + \xi_i \xi)(1 + \eta_i \eta)/4, \quad i \in \lbrace 16, 17, 18, 19 \rbrace 377 | \end{eqnarray*} 378 | 379 | % FIGURE 8-21 380 | \begin{eqnarray*} 381 | W_0 &=& (1 - r - s)(1 - t)(1 - 2r -2s -2t) \\ 382 | W_1 &=& r(1 - t)(2r - 2t - 1) \\ 383 | W_2 &=& s(1 - t)(2s - 2t - 1) \\ 384 | W_3 &=& (1 - r - s)t(2t - 2r - 2s - 1) \\ 385 | W_4 &=& rt(2r + 2t - 3) \\ 386 | W_5 &=& st(2s + 2t - 3) \\ 387 | W_6 &=& 4r(1 - r - s)(1 - t) \\ 388 | W_7 &=& 4rs(1 - t) \\ 389 | W_8 &=& 4s(1 - t)(1 - r - s) \\ 390 | W_9 &=& 4r(1 - r - s)t \\ 391 | W_{10} &=& 4 rst \\ 392 | W_{11} &=& 4 (1 - r - s)s t\\ 393 | W_{12} &=& 4 (1 - r - s)t(1 - t) \\ 394 | W_{13} &=& 4rt(1 - t) \\ 395 | W_{14} &=& 4st(1 - t) 396 | \end{eqnarray*} 397 | 398 | % FIGURE 8-22 399 | \begin{eqnarray*} 400 | \xi &=& 2 r - 1, \quad \xi_i = \pm1 \\ 401 | \eta &=& 2 s - 1, \quad \eta_i = \pm1 \\ 402 | \zeta &=& 2 t - 1, \quad \zeta_i = \pm1 \\ 403 | W_i &=& (1 + \xi_i \xi)(1 + \eta_i \eta)(1 + \zeta_i \zeta)(\xi_i \xi + \eta_i \eta + \zeta_i \zeta - 2)/8, \quad i \in \lbrace 0, 1, 2, 3 \rbrace \\ 404 | W_4 &=& \zeta(1 - \zeta)/4 \\ 405 | W_i &=& (1 - \xi^2)(1 + \eta_i \eta)(1 + \zeta_i \zeta)/4, \quad i \in \lbrace 5, 6, 7, 8\rbrace \\ 406 | W_i &=& (1 - \zeta^2)(1 + \xi_i \xi)(1 + \eta_i \eta)/4, \quad i \in \lbrace 9, 10, 11, 12 \rbrace 407 | \end{eqnarray*} 408 | 409 | % EQUATION 8-7 410 | \begin{equation*} 411 | \text{split edge if} (\epsilon_i > \epsilon_i^{\text{T}}), \quad \text{for all} \quad \epsilon_i \in E 412 | \end{equation*} 413 | 414 | % EQUATION 8-8 415 | \begin{equation*} 416 | p = \sum_{i = 0}^{n - 1} W_i(r_0, s_0, t_0)\, p_i 417 | \end{equation*} 418 | 419 | % EQUATION 8-9 420 | \begin{equation*} 421 | r = \frac{x - x_0}{x_1 - x_0} = \frac{y - y_0}{y_1 - y_0} = \frac{z - z_0}{z_1 - z_0} 422 | \end{equation*} 423 | 424 | % EQUATION 8-10 425 | \begin{eqnarray*} 426 | f(r, s, t) &=& x - \sum W_i \, x_i = 0 \\ 427 | g(r, s, t) &=& y - \sum W_i \, y_i = 0 \\ 428 | h(r, s, t) &=& z - \sum W_i \, z_i = 0 429 | \end{eqnarray*} 430 | 431 | % EQUATION 8-11 432 | \begin{eqnarray*} 433 | f(r, s, t) &\simeq& f_0 434 | + \frac{\partial f}{\partial r}(r - r_0) 435 | + \frac{\partial f}{\partial s}(s - s_0) 436 | + \frac{\partial f}{\partial t}(t - t_0) + \ldots \\ 437 | g(r, s, t) &\simeq& g_0 438 | + \frac{\partial g}{\partial r}(r - r_0) 439 | + \frac{\partial g}{\partial s}(s - s_0) 440 | + \frac{\partial g}{\partial t}(t - t_0) + \ldots \\ 441 | h(r, s, t) &\simeq& h_0 442 | + \frac{\partial h}{\partial r}(r - r_0) 443 | + \frac{\partial h}{\partial s}(s - s_0) 444 | + \frac{\partial h}{\partial t}(t - t_0) + \ldots \\ 445 | \end{eqnarray*} 446 | 447 | % EQUATION 8-12 448 | \begin{equation*} 449 | \left( 450 | \begin{array}{c} 451 | r_{i + 1} \\ 452 | s_{i + 1} \\ 453 | t_{i + 1} 454 | \end{array} 455 | \right) = \left( 456 | \begin{array}{c} 457 | r_i \\ 458 | s_i \\ 459 | t_i 460 | \end{array} 461 | \right) - \left( 462 | \begin{array}{c c c} 463 | \frac{\partial f}{\partial r} & \frac{\partial f}{\partial s} & \frac{\partial f}{\partial t} \\ 464 | \frac{\partial g}{\partial r} & \frac{\partial g}{\partial s} & \frac{\partial g}{\partial t} \\ 465 | \frac{\partial h}{\partial r} & \frac{\partial h}{\partial s} & \frac{\partial h}{\partial t} 466 | \end{array} 467 | \right)^{-1} 468 | \left( 469 | \begin{array}{c} 470 | f_i \\ 471 | g_i \\ 472 | h_i 473 | \end{array} 474 | \right) 475 | \end{equation*} 476 | 477 | % EQUATION 8-13 478 | \begin{equation*} 479 | \frac{d s}{d r} = \frac{s_1 - s_0}{1} = (s_1 - s_0) 480 | \end{equation*} 481 | 482 | % EQUATION 8-14 483 | \begin{equation*} 484 | \frac{d s}{d x'} = \frac{s_1 - s_0}{1} 485 | \end{equation*} 486 | 487 | % EQUATION 8-15 488 | \begin{equation*} 489 | \frac{d}{d r} = \frac{d}{dx'} \frac{dx'}{dr} 490 | \end{equation*} 491 | 492 | % EQUATION 8-16 493 | \begin{equation*} 494 | \frac{d}{d x'} = \frac{d}{dr}/ \frac{dx'}{dr} 495 | \end{equation*} 496 | 497 | % EQUATION 8-17 498 | \begin{equation*} 499 | \frac{d x'}{d r} = \frac{d}{dr} \left(\sum_{i}W_i \, x_i' \right) = -x_0' + x_1' = 1 500 | \end{equation*} 501 | 502 | % EQUATION 8-18 503 | \begin{equation*} 504 | \vec{v} = \frac{\vec{x}_1 - \vec{x}_0}{\vert\vec{x}_1 - \vec{x}_0 \vert} 505 | \end{equation*} 506 | 507 | % EQUATION 8-19 508 | \begin{eqnarray*} 509 | \frac{ds}{dx} &=& \left(\frac{s_1 - s_0}{1}\right) \vec{v} \cdot (1, 0, 0) \\ 510 | \frac{ds}{dy} &=& \left(\frac{s_1 - s_0}{1}\right) \vec{v} \cdot (0, 1, 0) \\ 511 | \frac{ds}{dz} &=& \left(\frac{s_1 - s_0}{1}\right) \vec{v} \cdot (0, 0, 1) 512 | \end{eqnarray*} 513 | 514 | % EQUATION 8-20 515 | \begin{eqnarray*} 516 | \frac{\partial}{\partial x} &=& \frac{\partial}{\partial r} \frac{\partial r}{\partial x} 517 | 518 | + \frac{\partial}{\partial s} \frac{\partial s}{\partial x} 519 | 520 | + \frac{\partial}{\partial t} \frac{\partial t}{\partial x} \\ 521 | 522 | \frac{\partial}{\partial y} &=& \frac{\partial}{\partial r} \frac{\partial r}{\partial y} 523 | 524 | + \frac{\partial}{\partial s} \frac{\partial s}{\partial y} 525 | 526 | + \frac{\partial}{\partial t} \frac{\partial t}{\partial y} \\ 527 | 528 | \frac{\partial}{\partial z} &=& \frac{\partial}{\partial r} \frac{\partial r}{\partial z} 529 | 530 | + \frac{\partial}{\partial s} \frac{\partial s}{\partial z} 531 | 532 | + \frac{\partial}{\partial t} \frac{\partial t}{\partial z} 533 | \end{eqnarray*} 534 | 535 | % EQUATION 8-21 536 | \begin{equation*} 537 | \left( 538 | \begin{array}{c} 539 | \frac{\partial}{\partial r} \\ 540 | \frac{\partial}{\partial s} \\ 541 | \frac{\partial}{\partial t} 542 | \end{array} 543 | \right) = \left( 544 | \begin{array}{c c c} 545 | \frac{\partial x}{\partial r} & \frac{\partial y}{\partial r} & \frac{\partial z}{\partial r} \\ 546 | \frac{\partial x}{\partial s} & \frac{\partial y}{\partial s} & \frac{\partial z}{\partial s} \\ 547 | \frac{\partial x}{\partial t} & \frac{\partial y}{\partial t} & \frac{\partial z}{\partial t} 548 | \end{array} 549 | \right) 550 | \left( 551 | \begin{array}{c} 552 | \frac{\partial}{\partial x} \\ 553 | \frac{\partial}{\partial y} \\ 554 | \frac{\partial}{\partial z} 555 | \end{array} 556 | \right) = 557 | \mathbf{J}\left( 558 | \begin{array}{c} 559 | \frac{\partial}{\partial x} \\ 560 | \frac{\partial}{\partial y} \\ 561 | \frac{\partial}{\partial z} 562 | \end{array} 563 | \right) 564 | \end{equation*} 565 | 566 | % EQUATION 8-22 567 | \begin{equation*} 568 | \frac{\partial}{\partial r_i} = \sum_{j} J_{ij} \frac{\partial}{\partial x_j} 569 | \end{equation*} 570 | 571 | % EQUATION 8-23 572 | \begin{equation*} 573 | \frac{\partial}{\partial x_i} = \sum_{j} J_{ij}^{-1} \frac{\partial}{\partial r_j} 574 | \end{equation*} 575 | 576 | % EQUATION 8-24 577 | \begin{equation*} 578 | C_i = \lbrace p_1, p_2, \ldots, p_n \rbrace = P 579 | \end{equation*} 580 | 581 | % EQUATION 8-25 582 | \begin{equation*} 583 | A(C_i, \overline{P}) = \left(\bigcap_{i} U(\overline{p}_i)\right) - C_i 584 | \end{equation*} 585 | 586 | % EQUATION 8-26 587 | \begin{equation*} 588 | Y = 0.30 R + 0.59 G + 0.11 B 589 | \end{equation*} 590 | 591 | % EQUATION 8-27 592 | \begin{equation*} 593 | Y = A(0.30 R + 0.59 G + 0.11 B) 594 | \end{equation*} 595 | 596 | % FIGURE 8-32 597 | % Your choice, I made two versions. 598 | \begin{eqnarray*} 599 | i = \lfloor \frac{x-x_0}{x_1 - x_0} \rfloor \\ 600 | j = \lfloor \frac{y-y_0}{y_1 - y_0} \rfloor \\ 601 | k = \lfloor \frac{z-z_0}{z_1 - z_0} \rfloor 602 | \end{eqnarray*} 603 | 604 | \begin{eqnarray*} 605 | i = \text{floor}\left( \frac{x-x_0}{x_1 - x_0} \right) \\ 606 | j = \text{floor}\left( \frac{y-y_0}{y_1 - y_0} \right) \\ 607 | k = \text{floor}\left( \frac{z-z_0}{z_1 - z_0} \right) 608 | \end{eqnarray*} 609 | 610 | \begin{eqnarray*} 611 | r = \text{frac}\left( \frac{x-x_0}{x_1 - x_0} \right) \\ 612 | s = \text{frac}\left( \frac{y-y_0}{y_1 - y_0} \right) \\ 613 | t = \text{frac}\left( \frac{z-z_0}{z_1 - z_0} \right) 614 | \end{eqnarray*} 615 | 616 | % EQUATION 8-28 617 | \begin{eqnarray*} 618 | g_x &=& \frac{d(x_0 + \Delta x_0, y_0, z_0) - d(x_0 - \Delta x_0, y_0, z_0)}{2 \Delta x_0} \\ 619 | g_y &=& \frac{d(x_0, y_0 + \Delta y_0, z_0) - d(x_0, y_0 - \Delta y_0, z_0)}{2 \Delta y_0} \\ 620 | g_z &=& \frac{d(x_0, y_0, z_0 + \Delta z_0) - d(x_0, y_0, z_0 - \Delta z_0)}{2 \Delta z_0} 621 | \end{eqnarray*} 622 | 623 | % EQUATION 8-29 624 | \begin{eqnarray*} 625 | i &=& \text{id} \mod (n_x - 1) \\ 626 | j &=& \frac{\text{id}}{n_x - 1} \mod (n_y - 1) \\ 627 | k &=& \frac{\text{id}}{(n_x - 1)(n_y - 1)} 628 | \end{eqnarray*} 629 | 630 | % EQUATION 8-30 631 | \begin{eqnarray*} 632 | 0 \leq i < n_x - 1 \\ 633 | 0 \leq j < n_y - 1 \\ 634 | 0 \leq k < n_z - 1 635 | \end{eqnarray*} 636 | 637 | % EQUATION 8-31 638 | \begin{eqnarray*} 639 | i = \text{int}\left( \frac{x-x_0}{x_1 - x_0} \right) \\ 640 | j = \text{int}\left( \frac{y-y_0}{y_1 - y_0} \right) \\ 641 | k = \text{int}\left( \frac{z-z_0}{z_1 - z_0} \right) 642 | \end{eqnarray*} 643 | 644 | % FIGURE 8-37 645 | \begin{eqnarray*} 646 | n_T &=& 8^{\ell} \\ 647 | n_O &=& \sum_i 8^i \\ 648 | n_P &=& n_O - n_T 649 | \end{eqnarray*} 650 | 651 | Chapter 9 652 | 653 | % EQUATION 9-1 654 | \begin{equation*} 655 | n_i = \frac{w_i}{R} 656 | \end{equation*} 657 | \bf\tag{9-1} 658 | 659 | % EQUATION 9-2 660 | \begin{equation*} 661 | F(r) = e^{-r}\cos(10\, r) 662 | \end{equation*} 663 | \bf\tag{9-2} 664 | 665 | % EQUATION 9-3 666 | \begin{equation*} 667 | \Omega = \frac{\vec{v} \cdot \vec{\omega}}{\vert \vec{v} \vert \vert \vec{\omega} \vert} 668 | \end{equation*} 669 | \bf\tag{9-3} 670 | 671 | % EQUATION 9-4 672 | \begin{equation*} 673 | e_{ij} = \epsilon_{ij} + \omega_{ij} 674 | \end{equation*} 675 | \bf\tag{9-4} 676 | 677 | % EQUATION 9-5 678 | \begin{equation*} 679 | \mathbf{\epsilon} = \left( 680 | \begin{array}{c c c} 681 | \frac{\partial u}{\partial x} & 682 | \frac{1}{2}\left(\frac{\partial u}{\partial y} + \frac{\partial v}{\partial x}\right) & 683 | \frac{1}{2}\left(\frac{\partial u}{\partial z} + \frac{\partial w}{\partial x}\right) \\ 684 | \frac{1}{2}\left(\frac{\partial u}{\partial y} + \frac{\partial v}{\partial x}\right) & 685 | \frac{\partial v}{\partial y} & 686 | \frac{1}{2}\left(\frac{\partial v}{\partial z} + \frac{\partial w}{\partial y}\right) \\ 687 | \frac{1}{2}\left(\frac{\partial u}{\partial z} + \frac{\partial w}{\partial x}\right) & 688 | \frac{1}{2}\left(\frac{\partial v}{\partial z} + \frac{\partial w}{\partial y}\right) & 689 | \frac{\partial w}{\partial z} 690 | \end{array}\right) 691 | \end{equation*} 692 | \bf\tag{9-5} 693 | 694 | % EQUATION 9-6 695 | \begin{equation*} 696 | \mathbf{\omega} = \left( 697 | \begin{array}{c c c} 698 | 0 & 699 | \frac{1}{2}\left(\frac{\partial u}{\partial y} - \frac{\partial v}{\partial x}\right) & 700 | \frac{1}{2}\left(\frac{\partial u}{\partial z} - \frac{\partial w}{\partial x}\right) \\ 701 | \frac{1}{2}\left(\frac{\partial v}{\partial x} - \frac{\partial u}{\partial y}\right) & 702 | 0 & 703 | \frac{1}{2}\left(\frac{\partial v}{\partial z} - \frac{\partial w}{\partial y}\right) \\ 704 | \frac{1}{2}\left(\frac{\partial w}{\partial x} - \frac{\partial u}{\partial z}\right) & 705 | \frac{1}{2}\left(\frac{\partial w}{\partial y} - \frac{\partial v}{\partial z}\right) & 706 | 0 707 | \end{array}\right) 708 | \end{equation*} 709 | \bf\tag{9-6} 710 | 711 | % EQUATION 9-7 712 | \begin{equation*} 713 | \omega_{ij} = -\frac{1}{2}\sum_{k} \epsilon_{ijk}\, \omega_{k} 714 | \end{equation*} 715 | \bf\tag{9-7} 716 | 717 | % EQUATION 9-8 718 | \begin{equation*} 719 | \vec{\omega} = \left( 720 | \begin{array}{c} 721 | \frac{\partial w}{\partial y} - \frac{\partial v}{\partial z} \\ 722 | \frac{\partial u}{\partial z} - \frac{\partial w}{\partial x} \\ 723 | \frac{\partial v}{\partial x} - \frac{\partial u}{\partial y} 724 | \end{array} 725 | \right) 726 | \end{equation*} 727 | \bf\tag{9-8} 728 | 729 | % EQUATION 9-9 730 | \begin{equation*} 731 | r(\vec{v}) = r_\text{max} \sqrt{\frac{\vert\vec{v}_\text{min}\vert}{\vert\vec{v}\vert}} 732 | \end{equation*} 733 | \bf\tag{9-9} 734 | 735 | % EQUATION 9-10 736 | \begin{eqnarray*} 737 | u &\simeq& \frac{\partial u}{\partial x}\text{d}x 738 | + \frac{\partial u}{\partial y}\text{d}y 739 | + \frac{\partial u}{\partial z}\text{d}z \\ 740 | v &\simeq& \frac{\partial v}{\partial x}\text{d}x 741 | + \frac{\partial v}{\partial y}\text{d}y 742 | + \frac{\partial v}{\partial z}\text{d}z \\ 743 | w &\simeq& \frac{\partial w}{\partial x}\text{d}x 744 | + \frac{\partial w}{\partial y}\text{d}y 745 | + \frac{\partial w}{\partial z}\text{d}z 746 | \end{eqnarray*} 747 | \bf\tag{9-10} 748 | 749 | % EQUATION 9-11 750 | \begin{equation*} 751 | \vec{u} = \mathbf{J}\cdot\text{d}\vec{x},\quad \text{where} \quad \mathbf{J} = \left( 752 | \begin{array}{c c c} 753 | \frac{\partial u}{\partial x} & \frac{\partial u}{\partial y} & \frac{\partial u}{\partial z} \\ 754 | \frac{\partial v}{\partial x} & \frac{\partial v}{\partial y} & \frac{\partial v}{\partial z} \\ 755 | \frac{\partial w}{\partial x} & \frac{\partial w}{\partial y} & \frac{\partial w}{\partial z} 756 | \end{array} 757 | \right) 758 | \end{equation*} 759 | \bf\tag{9-11} 760 | 761 | % EQUATION 9-12 762 | \begin{equation*} 763 | H_d = \vec{v} \cdot \vec{w} = \vert \vec{v} \vert \vert \vec{w} \vert \cos(\phi) 764 | \end{equation*} 765 | \bf\tag{9-12} 766 | 767 | % EQUATION 9-13 768 | \begin{equation*} 769 | \vec{v} = \sum_i \lambda_i \vec{e}_i 770 | \end{equation*} 771 | \bf\tag{9-13} 772 | 773 | % EQUATION 9-14 774 | \begin{equation*} 775 | \left(\hat{M} = M^n \right) \to M^{n - 1} \to \ldots \to M^1 \to M^0 776 | \end{equation*} 777 | \bf\tag{9-14} 778 | 779 | % EQUATION 9-15 780 | \begin{equation*} 781 | M^0 \to M^1 \to \ldots \to M^{n - 1} \to M^n 782 | \end{equation*} 783 | \bf\tag{9-15} 784 | 785 | % EQUATION 9-16 786 | \begin{equation*} 787 | \text{edge collapse/split}(v_s, v_t, v_\ell, v_r, A) 788 | \end{equation*} 789 | \bf\tag{9-16} 790 | 791 | % EQUATION 9-17 792 | \begin{equation*} 793 | \left(\hat{M} = M^n \right) \to M^{n - 1} \to \ldots \to M^1 \to \left(M^0 = M(V, \varnothing)\right) 794 | \end{equation*} 795 | \bf\tag{9-17} 796 | 797 | % EQUATION 9-18 798 | \begin{equation*} 799 | \text{vertex split/merge}(v_s, v_t, v_\ell, v_r) 800 | \end{equation*} 801 | \bf\tag{9-18} 802 | 803 | % EQUATION 9-19 804 | \begin{equation*} 805 | \vec{x}_{i+1} = \vec{x}_i + \lambda \vec{V}(i, j) = \vec{x}_i + \lambda \sum_{j = 0}^{n}\vec{x}_j - \vec{x}_i 806 | \end{equation*} 807 | \bf\tag{9-19} 808 | 809 | % EQUATION 9-20 810 | \begin{equation*} 811 | e \leq \frac{\sqrt{3}}{2} \frac{L}{D} 812 | \end{equation*} 813 | \bf\tag{9-20} 814 | 815 | % EQUATION 9-21 816 | \begin{equation*} 817 | e_\text{tot} \leq \frac{\sqrt{3}}{2}\left( \frac{L_\text{I}}{D_\text{I}} 818 | + \frac{L_\text{W}}{D_\text{W}}\right) + \frac{\Delta x}{2} 819 | \end{equation*} 820 | \bf\tag{9-21} 821 | 822 | % EQUATION 9-22 823 | \begin{equation*} 824 | \text{SF}(x, y, z) = s\, \exp\left( -f(r/R)^2 \right) 825 | \end{equation*} 826 | \bf\tag{9-22} 827 | 828 | % EQUATION 9-23 829 | \begin{equation*} 830 | \text{SF}(x, y, z) = s\, \exp\left( -f\left(\frac{(r_{xy}/E)^2 + z^2}{R^2}\right) \right) 831 | \end{equation*} 832 | \bf\tag{9-23} 833 | 834 | % EQUATION 9-24 835 | \begin{eqnarray*} 836 | z &=& \vec{v}\cdot(\vec{p} - \vec{p}_i), \quad \text{where} \quad \vert \vec{v} \vert = 1 \\ 837 | r_{xy} &=& r^2 - z^2 838 | \end{eqnarray*} 839 | \bf\tag{9-24} 840 | 841 | % EQUATION 9-25 842 | \begin{equation*} 843 | F(p) = \frac{\sum_i^n \frac{F_i}{\vert p - p_i\vert^2}}{\sum_i^n \frac{1}{\vert p - p_i \vert^2}} 844 | \end{equation*} 845 | \bf\tag{9-25} 846 | 847 | % EQUATION 9-26 848 | \begin{equation*} 849 | \frac{\partial F}{\partial x} = 850 | \frac{\partial F}{\partial y} = 851 | \frac{\partial F}{\partial z} = 0 852 | \end{equation*} 853 | \bf\tag{9-26} 854 | 855 | Chapter 10 856 | 857 | % EQUATION 10-1 858 | \begin{equation*} 859 | g(i, j) = \frac{1}{2\pi \sigma^2} \exp\left(-\frac{i^2 + j^2}{2\sigma^2} \right) 860 | = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{i^2}{2\sigma^2} \right) 861 | \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{j^2}{2\sigma^2} \right) 862 | \end{equation*} 863 | \bf\tag{10-1} 864 | 865 | % FIGURE 10-2 866 | \begin{equation*} 867 | f \star k(x, y) = \sum_{i, j} f(i, j) k(x - i, y - j) 868 | \end{equation*} 869 | \bf\tag{10-2} 870 | 871 | % EQUATION 10-2 872 | \begin{equation*} 873 | H(u, v) = \frac{1}{1 + \left(\frac{C^2}{u^2 + v^2}\right)^n} 874 | \end{equation*} 875 | \bf\tag{10-2} 876 | 877 | % FIGURE 10-10 878 | \begin{equation*} 879 | F(u, v) = \frac{1}{MN} \sum_{x=0}^{M-1}\sum_{y=0}^{N-1} f(x, y)\, 880 | \exp\left(-2\pi j \left(\frac{x u}{M} + \frac{y v}{N}\right)\right) 881 | \end{equation*} 882 | \bf\tag{10-10} 883 | 884 | % FIGURE 10-11 885 | \begin{equation*} 886 | H(u, v) = 887 | \begin{cases} 888 | 1 & u^2 + v^2 < C^2 \\ 889 | 0 & \text{otherwise} 890 | \end{cases} 891 | \end{equation*} 892 | \bf\tag{10-11} 893 | 894 | % The Butterworth filter is equation 10-2 above. 895 | 896 | % EQUATION 10-3 897 | 898 | \begin{equation*} 899 | F(x, y) = \sin\left(\frac{x}{10}\right) + \sin\left(\frac{y}{10}\right) 900 | \end{equation*} 901 | \bf\tag{10-3} 902 | -------------------------------------------------------------------------------- /VTKBook/01Chapter1.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Chapter 1 - Introduction 4 | 5 | *Visualization transforms numbers to images.* 6 | 7 | *V*isualization --- "2: the act or process of interpreting in visual terms or of putting into visual form," *Webster's Ninth New Collegiate Dictionary*. 8 | 9 | ## 1.1 What Is Visualization? 10 | 11 | **V**isualization is a part of our everyday life. From weather maps to the exciting computer graphics of the entertainment industry, examples of visualization abound. But what is visualization? Informally, visualization is the transformation of data or information into pictures. Visualization engages the primary human sensory apparatus, *vision,* as well as the processing power of the human mind. The result is a simple and effective medium for communicating complex and/or voluminous information. 12 | 13 | ### Terminology 14 | 15 | Different terminology is used to describe visualization. *Scientific visualization* is the formal name given to the field in computer science that encompasses user interface, data representation and processing algorithms, visual representations, and other sensory presentation such as sound or touch \[McCormick87\]. The term *data visualization* is another phrase used to describe visualization. Data visualization is generally interpreted to be more general than scientific visualization, since it implies treatment of data sources beyond the sciences and engineering. Such data sources include financial, marketing, or business data. In addition, the term data visualization is broad enough to include application of statistical methods and other standard data analysis techniques \[Rosenblum94\]. Another recently emerging term is *information visualization*. This field endeavors to visualize abstract information such as hypertext documents on the World Wide Web, directory/ file structures on a computer, or abstract data structures \[InfoVis95\]. A major challenge facing information visualization researchers is to develop coordinate systems, transformation methods, or structures that meaningfully organize and represent data. 16 | 17 | Another way to classify visualization technology is to examine the context in which the data exists. If the data is spatial-temporal in nature (up to three spatial coordinates and the time dimension) then typically methods from scientific visualization are used. If the data exists in higher-dimensional spaces, or abstract spaces, then methods from information visualization are used. This distinction is important, because the human perceptual system is highly tuned to space-time relationships. Data expressed in this coordinate system is inherently understood with little need for explanation. Visualization of abstract data typically requires extensive explanations as to what is being viewed. This is not to say that there is no overlap between scientific and information visualization---often the first step in the information visualization process is to project abstract data into the spatial-temporal domain, and then use the methods of scientific visualization to view the results. The projection process can be quite complex, involving methods of statistical graphics, data mining, and other techniques, or it may be as simple as selecting a lower-dimensional subset of the original data. 18 | 19 | In this text we use the term data visualization instead of the more specific terms scientific visualization or information visualization. We feel that scientific visualization is too narrow a description of the field, since visualization techniques have moved beyond the scientific domain and into areas of business, social science, demographics, and information management in general. We also feel that the term data visualization is broad enough to encompass the term information visualization. 20 | 21 | ### Examples of Visualization 22 | 23 | Perhaps the best definition of visualization is offered by example. In many cases visualization is influencing peoples' lives and performing feats that a few years ago would have been unimaginable. A prime example of this is its application to modern medicine. 24 | 25 | Computer imaging techniques have become an important diagnostic tool in the practice of modern medicine. These include techniques such as X-ray *Computed Tomography* (CT) and *Magnetic Resonance Imaging* (MRI). These techniques use a sampling or data acquisition process to capture information about the internal anatomy of a living patient. This information is in the form of *slice-planes* or cross-sectional images of a patient, similar to conventional photographic X-rays. CT imaging uses many pencil thin X-rays to acquire the data, while MRI combines large magnetic fields with pulsed radio waves. Sophisticated mathematical techniques are used to reconstruct the slice-planes. Typically, many such closely spaced slices are gathered together into a *volume* of data to complete the study. 26 | 27 | As acquired from the imaging system, a slice is a series of numbers representing the attenuation of X-rays (CT) or the relaxation of nuclear spin magnetization (MRI) \[Krestel90\]. On any given slice these numbers are arranged in a matrix, or regular array. The amount of data is large, so large that it is not possible to understand the data in its raw form. However, by assigning to these numbers a gray scale value, and then displaying the data on a computer screen, structure emerges. This structure results from the interaction of the human visual system with the spatial organization of the data and the gray-scale values we have chosen. What the computer represents as a series of numbers, we see as a cross section through the human body: skin, bone, and muscle. Even more impressive results are possible when we extend these techniques into three dimensions. Image slices can be gathered into volumes and the volumes can be processed to reveal complete anatomical structures. Using modern techniques, we can view the entire brain, skeletal system, and vascular system on a living patient without interventional surgery. Such capability has revolutionized modern medical diagnostics, and will increase in importance as imaging and visualization technology matures. 28 | 29 | Another everyday application of visualization is in the entertainment industry. Movie and television producers routinely use computer graphics and visualization to create entire worlds that we could never visit in our physical bodies. In these cases we are visualizing other worlds as we imagine them, or past worlds we suppose existed. It's hard to watch the movies such as *Jurassic* *Park* and *Toy Story* and not gain a deeper appreciation for the awesome Tyrannosaurus Rex, or to be charmed by *Toy Story* 's heroic Buzz Lightyear. 30 | 31 | *Morphing* is another popular visualization technique widely used in the entertainment industry. Morphing is a smooth blending of one object into another. One common application is to morph between two faces. Morphing has also been used effectively to illustrate car design changes from one year to the next. While this may seem like an esoteric application, visualization techniques are used routinely to present the daily weather report. The use of isovalue, or contour, lines to display areas of constant temperature, rainfall, and barometric pressure has become a standard tool in the daily weather report. 32 | 33 | Many early uses of visualization were in the engineering and scientific community. From its inception the computer has been used as a tool to simulate physical processes such as ballistic trajectories, fluid flow, and structural mechanics. As the size of the computer simulations grew, it became necessary to transform the resulting calculations into pictures. The amount of data overwhelmed the ability of the human to assimilate and understand it. In fact, pictures were so important that early visualizations were created by manually plotting data. Today, we can take advantage of advances in computer graphics and computer hardware. But, whatever the technology, the application of visualization is the same: to display the results of simulations, experiments, measured data, and fantasy; and to use these pictures to communicate, understand, and entertain. 34 | 35 | ## 1.2 Why Visualize? 36 | 37 | Visualization is a necessary tool to make sense of the flood of information in today's world of computers. Satellites, supercomputers, laser digitizing systems, and digital data acquisition systems acquire, generate, and transmit data at prodigious rates. The Earth-Orbiting Satellite (EOS) transmits terabytes of data every day. Laser scanning systems generate over 500,000 points in a 15 second scan \[Waters91\]. Supercomputers model weather patterns over the entire earth \[Chen93\]. In the first four months of 1995, the New York Stock Exchange processed, on average, 333 million transactions per day \[NYTimes\]. Without visualization, most of this data would sit unseen on computer disks and tapes. Visualization offers some hope that we can extract the important information hidden within the data. 38 | 39 | There is another important element to visualization: It takes advantage of the natural abilities of the human vision system. Our vision system is a complex and powerful part of our bodies. We use it and rely on it in almost everything we do. Given the environment in which our ancestors lived, it is not surprising that certain senses developed to help them survive. As we described earlier in the example of a 2D MRI scan, visual representations are easier to work with. Not only do we have strong 2D visual abilities, but also we are adept at integrating different viewpoints and other visual clues into a mental image of a 3D object or plot. This leads to interactive visualization, where we can manipulate our viewpoint. Rotating about the object helps to achieve a better understanding. Likewise, we have a talent for recognizing temporal changes in an image. Given an animation consisting of hundreds of frames, we have an uncanny ability to recognize trends and spot areas of rapid change. 40 | 41 | With the introduction of computers and the ability to generate enormous amounts of data, visualization offers the technology to make the best use of our highly developed visual senses. Certainly other technologies such as statistical analysis, artificial intelligence, mathematical filtering, and sampling theory will play a role in large-scale data processing. However, because visualization directly engages the vision system and human brain, it remains an unequaled technology for understanding and communicating data. 42 | 43 | Visualization offers significant financial advantages as well. In today's competitive markets, computer simulation teamed with visualization can reduce product cost and improve time to market. A large cost of product design has been the expense and time required to create and test design prototypes. Current design methods strive to eliminate these physical prototypes, and replace them with digital equivalents. This digital prototyping requires the ability to create and manipulate product geometry, simulate the design under a variety of operating conditions, develop manufacturing techniques, demonstrate product maintenance and service procedures, and even train operators on the proper use of the product before it is built. Visualization plays a role in each case. Already CAD systems are used routinely to model product geometry and design manufacturing procedures. Visualization enables us to view the geometry, and see special characteristics such as surface curvature. For instance, analysis techniques such as finite element, finite difference, and boundary element techniques are used to simulate product performance; and visualization is used to view the results. Recently, human ergonomics and anthropometry are being analyzed using computer techniques in combination with visualization \[MDHMS\]. Three-dimensional graphics and visualization are being used to create training sequences. Often these are incorporated into a hypertext document or World Wide Web (WWW) pages. Another practical use of graphics and visualization has been in-flight simulators. This has been shown to be a significant cost savings as compared to flying real airplanes and is an effective training method. 44 | 45 | ## 1.3 Imaging, Computer Graphics, and Visualization 46 | 47 | There is confusion surrounding the difference between imaging, computer graphics, and visualization. We offer these definitions. 48 | 49 | - *Imaging*, or image processing, is the study of 2D pictures, or images. This includes techniques to transform (e.g., rotate, scale, shear), extract information from, analyze, and enhance images. 50 | 51 | {#Figure-1-1 .figure-target} 52 |   53 |
54 | Figure1-1 55 |
Figure 1-1. The visualization process. Data from various sources is repeatedly transformed to extract, derive, and enhance information. The resulting data is mapped to a graphics system for display.
56 |
57 | 58 | - *Computer graphics* is the process of creating images using a computer. This includes both 2D paint-and-draw techniques as well as more sophisticated 3D drawing (or rendering) techniques. 59 | 60 | - *Visualization* is the process of exploring, transforming, and viewing data as images (or other sensory forms) to gain understanding and insight into the data. 61 | 62 | Based on these definitions we see that there is overlap between these fields. The output of computer graphics is an image, while the output of visualization is often produced using computer graphics. Sometimes visualization data is in the form of an image, or we wish to visualize object geometry using realistic rendering techniques from computer graphics. 63 | 64 | Generally speaking we distinguish visualization from computer graphics and image processing in three ways. 65 | 66 | 1. The dimensionality of data is three dimensions or greater. Many well-known methods are available for data of two dimensions or less; visualization serves best when applied to data of higher dimension. 67 | 68 | 2. Visualization concerns itself with data transformation. That is, information is repeatedly created and modified to enhance the meaning of the data. 69 | 70 | 3. Visualization is naturally interactive, including the human directly in the process of creating, transforming, and viewing data. 71 | 72 | Another perspective is that visualization is an activity that encompasses the process of exploring and understanding data. This includes both imaging and computer graphics as well as data processing and filtering, user interface methodology, computational techniques, and software design. {ref}`Figure 1-1 ` depicts this process. 73 | 74 | As this figure illustrates we see that the visualization process focuses on data. In the first step data is acquired from some source. Next, the data is transformed by various methods, and then mapped to a form appropriate for presentation to the user. Finally, the data is rendered or displayed, completing the process. Often, the process repeats as the data is better understood or new models are developed. Sometimes the results of the visualization can directly control the generation of the data. This is often referred to as *analysis steering*. Analysis steering is an important goal of visualization because it enhances the interactivity of the overall process. 75 | 76 | ## 1.4 Origins of Data Visualization 77 | 78 | The origin of visualization as a formal discipline dates to the 1987 NSF report *Visualization in Scientific Computing* \[McCormick87\]. That report coined the term *scientific visualization.* Since then the field has grown rapidly with major conferences, such as IEEE Visualization, becoming well established. Many large computer graphics conferences, for example ACM SIGGRAPH, devote large portions of their program to visualization technology. 79 | 80 | Of course, data visualization technology had existed for many years before the 1987 report referenced \[Tufte83\]. The first practitioners recognized the value of presenting data as images. Early pictorial data representations were created during the eighteenth century with the arrival of statistical graphics. It was only with the arrival of the digital computer and the development of the field of computer graphics, that visualization became a practicable discipline. 81 | 82 | The future of data visualization and graphics appears to be explosive. Just a few decades ago, the field of data visualization did not exist and computer graphics was viewed as an offshoot of the more formal discipline of computer science. As techniques were created and computer power increased, engineers, scientists, and other researchers began to use graphics to understand and communicate data. At the same time, user interface tools were being developed. These forces have now converged to the point where we expect computers to adapt to humans rather than the other way around. As such, computer graphics and data visualization serve as the window into the computer, and more importantly, into the data that computers manipulate. Now, with the visualization window, we can extract information from data and analyze, understand, and manage more complex systems than ever before. 83 | 84 | Dr. Fred Brooks, Kenan Professor of Computer Science at the University of North Carolina at Chapel Hill and recipient of the John von Neumann Medal of the IEEE, puts it another way. At the award presentation at the ACM SIGGRAPH '94, Dr. Brooks stated that computer graphics and visualization offer "intelligence amplification" (IA) as compared to artificial intelligence (AI). Besides the deeper philosophical issues surrounding this issue (e.g., human before computer), it is a pragmatic observation. While the long-term goal of AI has been to develop computer systems that could replace humans in certain applications, the lack of real progress in this area has lead some researchers to view the role of computers as amplifiers and assistants to humans. In this view, computer graphics and visualization play a significant role, since arguably the most effective human/ computer interface is visual. Recent gains in computer power and memory are only accelerating this trend, since it is the interface between the human and the computer that often is the obstacle to the effective application of the computer. 85 | 86 | ## 1.5 Purpose of This Book 87 | 88 | There currently exist texts that define and describe data visualization, many of them using case studies to illustrate techniques and typical applications. Some provide high-level descriptions of algorithms or visualization system architectures. Detailed descriptions are left to academic journals or conference proceedings. What these texts lack is a way to *practice* visualization. Our aim in this text is to go beyond descriptions and provide tools to learn about and apply visualization to your own application area. In short, the purpose of the book is fourfold. 89 | 90 | 1. Describe visualization algorithms and architectures in detail. 91 | 92 | 2. Demonstrate the application of data visualization to a broad selection of case studies. 93 | 94 | 3. Provide a working architecture and software design for application of data visualization to real-world problems. 95 | 96 | 4. Provide effective software tools packaged in a C++ class library. We also provide language bindings for the interpreted languages Tcl, Python, and Java. 97 | 98 | Taken together, we refer to the text and software as the *Visualization Toolkit*, or VTK for short. Our hope is that you can use the text to learn about the fundamental concepts of visualization, and then adapt the computer code to your own applications and data. 99 | 100 | ## 1.6 What This Book Is Not 101 | 102 | The purpose of this book is not to provide a rigorous academic treatise on data visualization. Nor do we intend to include an exhaustive survey of visualization technology. Our goal is to bridge the formal discipline of data visualization with practical application, and to provide a solid technical overview of this emerging technology. In many cases we refer you to the included software to understand implementation details. You may also wish to refer to the appropriate references for further information. 103 | 104 | ## 1.7 Intended Audience 105 | 106 | Our primary audience is computer users who create, analyze, quantify, and/or process data. We assume a minimal level of programming skill. If you can write simple computer code to import data and know how to run a computer program, you can practice data visualization with the software accompanying this book. 107 | 108 | As we wrote this book we also had in mind educators and students of introductory computer graphics and visualization courses. In more advanced courses this text may not be rigorous enough to serve as sole reference. In these instances, this book will serve well as a companion text, and the software is well suited as a foundation for programming projects and class exercises. 109 | 110 | Educators and students in other disciplines may also find the text and software to be valuable tools for presenting results. Courses in numerical analysis, computer science, business simulation, chemistry, dynamic systems, and engineering simulations, to name a few, often require large-scale programming projects that create large amounts of data. The software tools provided here are easy to learn and readily adapted to different data sources. Students can incorporate this software into their work to display and analyze their 111 | results. 112 | 113 | ## 1.8 How to Use This Book 114 | 115 | There are a number of approaches you can take to make effective use of this book. The particular approach depends on your skill level and goals. Three likely paths are as follows: 116 | 117 | *Novice.* You're a novice if you lack basic knowledge of graphics, visualization, or object-oriented principles. Start by reading [Chapter 2](02Chapter2) if you are unfamiliar with object-oriented principles, [Chapter 3](03Chapter3) if you are unfamiliar with computer graphics, and [Chapter 4](04Chapter4) if you are unfamiliar with visualization. Continue by reading the application studies in [Chapter 12](12Chapter12). You can then move on to the CD-ROM and try out some programming examples. Leave the more detailed treatment of algorithms and data representation until you are familiar with the basics and plan to develop your own applications. 118 | 119 | *Hacker.* You're a hacker if you are comfortable writing your own code and editing other's. Review the examples in [Chapter 3](03Chapter3), [Chapter 4](04Chapter4), and [Chapter 12](12Chapter12). At this point you will want to acquire the companion software guide to this text ( *The VTK User's Guide* ) or become familiar with the programming resources at http://www.vtk.org. Then retrieve the examples from the CD-ROM and start practicing. 120 | 121 | *Researcher/Educator.* You're a researcher if you develop computer graphics and/or visualization algorithms or if you are actively involved in using and evaluating such systems. You're an educator if you cover aspects of computer graphics and/or visualization within your courses. Start by reading [Chapter 2](02Chapter2), [Chapter 3](03Chapter3), and [Chapter 4](04Chapter4). Select appropriate algorithms from the text and examine the associated source code. If you wish to extend the system, we recommend that you acquire the companion software guide to this text ( *The VTK User's* *Guide* ) or become familiar with the programming resources at http://www.vtk.org. 122 | 123 | ## 1.9 Software Considerations and Example Code 124 | 125 | In writing this book we have attempted to strike a balance between practice and theory. We did not want the book to become a user manual, yet we did want a strong correspondence between algorithmic presentation and software implementation. (Note: *The VTK User's Guide* published by Kitware, Inc. http://www.kitware.com is recommended as a companion text to this book.) As a result of this philosophy, we have adopted the following approach: 126 | 127 | *Application versus Design.* The book's focus is the application of visualization techniques to real-world problems. We devote less attention to software design issues. Some of these important design issues include: memory management, deriving new classes, shallow versus deep object copy, single versus multiple inheritance, and interfaces to other graphics libraries. Software issues are covered in the companion text *The VTK User's Guide* published by Kitware, Inc. 128 | 129 | *Theory versus Implementation.* Whenever possible, we separate the theory of data visualization from our implementation of it. We felt that the book would serve best as a reference tool if the theory sections were independent of software issues and terminology. Toward the end of each chapter there are separate implementation or example sections that are implementation specific. Earlier sections are implementation free. 130 | 131 | *Documentation*. This text contains documentation considered essential to understanding the software architecture, including object diagrams and condensed object descriptions. More extensive documentation of object methods and data members is embedded in the software (in the.h header files) and on CD-ROM or online at http://www.vtk.org. In particular, the Doxygen generated manual pages contain detailed descriptions of class relationships, methods, and other attributes. 132 | 133 | We use a number of conventions in this text. Imported computer code is denoted with a typewriter font, as are external programs and computer files. To avoid conflict with other C++ class libraries, all class names in VTK begin with the " vtk" prefix. Methods are differentiated from variables with the addition of the " ()" postfix. (Other conventions are listed in *VTK User's Guide*.) 134 | 135 | All images in this text have been created using the *Visualization Toolkit* software and data found on the included CD-ROM or from the Web site http://www.vtk.org. In addition, every image has source code (sometimes in C++ and sometimes a Tcl script). We decided against using images from other researchers because we wanted you to be able to practice visualization with every example we present. Each computer generated image indicates the originating file. Files ending in.cxx are C++ code, files ending in.tcl are Tcl scripts. Hopefully these examples can serve as a starting point for you to create your own applications. 136 | 137 | To find the example code you will want to search in one of three areas. The standard VTK distribution includes an VTK/Examples directory where many well-documented examples are found. The VTK testing directories VTK/\*/Testing, for example, VTK/Graphics/Testing/ Tcl, contain some of the example code used in this text. These examples use the data found in the VTKData distribution. Finally, a separate software distribution, the VTKTextbook distribution, contains examples and data that do not exist in the standard VTK distribution. The VTK, VTKData, and VTKTextbook distributions are found on the included CD-ROM and/or on the web site at http://www.vtk.org. 138 | 139 | ## 1.10 Chapter-by-Chapter Overview 140 | 141 | ### [Chapter 2](02Chapter2): Object-Oriented Design 142 | 143 | This chapter discusses some of the problems with developing large and/or complex software systems and describes how object-oriented design addresses many of these problems. This chapter defines the key terms used in object-oriented modelling and design and works through a real-world example. The chapter concludes with a brief look at some object-oriented languages and some of the issues associated with object-oriented visualization. 144 | 145 | ### [Chapter 3](03Chapter3): Computer Graphics Primer* 146 | 147 | Computer graphics is the means by which our visualizations are created. This chapter covers the fundamental concepts of computer graphics from an application viewpoint. Common graphical entities such as cameras, lights, and geometric primitives are described along with some of the underlying physical equations that govern lighting and image generation. Issues related to currently available graphics hardware are presented, as they affect how and what we choose to render. Methods for interacting with data are introduced. 148 | 149 | ### [Chapter 4](04Chapter4): The Visualization Pipeline 150 | 151 | This chapter explains our methodology for transforming raw data into a meaningful representation that can than be rendered by the graphics system. We introduce the notion of a visualization pipeline, which is similar to a data flow diagram from software engineering. The differences between process objects and data objects are covered, as well as how we resolved issues between performance and memory usage. We explain the advantages to a pipeline network topology regarding execution ordering, result caching, and reference counting. 152 | 153 | ### [Chapter 5](05Chapter5): Basic Data Representation 154 | 155 | There are many types of data produced by the variety of fields that apply visualization. This chapter describes the data objects that we use to represent and access such data. A flexible design is introduced where the programmer can interact with most any type of data using one consistent interface. The three high level components of data (structure, cells, and data attributes) are introduced, and their specific subclasses and components are discussed. 156 | 157 | ### [Chapter 6](06Chapter6): Fundamental Algorithms 158 | 159 | Where the preceding chapter deals with data objects, this one introduces process objects. These objects encompass the algorithms that transform and manipulate data. This chapter looks at commonly used techniques for isocontour extraction, scalar generation, color mapping, and vector field display, among others. The emphasis of this chapter is to provide the reader with a basic understanding of the more common and important visualization algorithms. 160 | 161 | ### [Chapter 7](07Chapter7): Advanced Computer Graphics 162 | 163 | This chapter covers advanced topics in computer graphics. The chapter begins by introducing transparency and texture mapping, two topics important to the main thrust of the chapter: volume rendering. Volume rendering is a powerful technique to see inside of 3D objects, and is used to visualize volumetric data. We conclude the chapter with other advanced topics such as stereoscopic rendering, special camera effects, and 3D widgets. 164 | 165 | ### [Chapter 8](08Chapter8): Advanced Data Representation 166 | 167 | Part of the function of a data object is to store the data. The first chapter on data representation discusses this aspect of data objects. This chapter focuses on basic geometric and topological access methods, and computational operations implemented by the various data objects. The chapter covers such methods as coordinate transformations for data sets, interpolation functions, derivative calculations, topological adjacency operations, and geometric operations such as line intersection and searching. 168 | 169 | ### [Chapter 9](09Chapter9): Advanced Algorithms 170 | 171 | This chapter is a continuation of *Fundamental Algorithms* and covers algorithms that are either more complex or less widely used. Scalar algorithms such as dividing cubes are covered along with vector algorithms such as stream ribbons. A large collection of modelling algorithms is discussed, including triangle strip generation, polygon decimation, feature extraction, and implicit modelling. We conclude with a look at some visualization algorithms that utilize texture mapping. 172 | 173 | ### [Chapter 10](10Chapter10): Image Processing 174 | 175 | While 3D graphics and visualization is the focus of the book, image processing is an important tool for preprocessing and manipulating data. In this chapter we focus on several important image processing algorithms, as well as describe how we use a streaming data representation to process large datasets. 176 | 177 | ### [Chapter 11](11Chapter11): Visualization on the Web 178 | 179 | The Web is one of the best places to share your visualizations. In this chapter we show you how to write Java-based visualization applications, and how to create VRML (Virtual Reality Modelling Language) data files for inclusion in your own Web content. 180 | 181 | ### [Chapter 12](12Chapter12): Application 182 | 183 | In this chapter we tie the previous chapters together by working through a series of case studies from a variety of application areas. For each case, we briefly describe the application and what information we expect to obtain through the use of visualization. Then, we walk through the design and resulting source code to demonstrate the use of the tools described earlier in the text. 184 | 185 | ## 1.11 Legal Considerations 186 | 187 | We make no warranties, expressly or implied, that the computer code contained in this text is free of error or will meet your requirements for any particular application. Do not use this code in any application where coding errors could result in injury to a person or loss of property. If you do use the code in this way, it is at your own risk. The authors and publisher disclaim all liability for direct or consequential damages resulting from your use of this code. 188 | 189 | The computer code contained in this text is copyrighted. We grant permission for you to use, copy, and distribute this software for any purpose. However, you may not modify and then redistribute the software. Some of the algorithms presented here are implementations of patented software. If you plan to use this software for commercial purposes, please insure that applicable patent laws are observed. 190 | 191 | Some of the data on the CD-ROM may be freely distributed or used (with appropriate acknowledgment). Refer to the local README files or other documentation for details. 192 | 193 | Several registered trademarks are used in this text. UNIX is a trademark of UNIX System Laboratories. Sun Workstation and XGL are trademarks of Sun Microsystems, Inc. Microsoft, MS, MS-DOS, and Windows are trademarks of Microsoft Corporation. The X Window System is a trademark of the Massachusetts Institute of Technology. Starbase and HP are trademarks of Hewlett-Packard Inc. Silicon Graphics and OpenGL, are trademarks of Silicon Graphics, Inc. Macintosh is a trademark of Apple Computer. RenderMan is a trademark of Pixar. 194 | 195 | ## 1.12 Bibliographic Notes 196 | 197 | A number of visualization texts are available. The first six texts listed in the reference section are good general references ( \[Nielson90\], \[Patrikalakis91\], \[Brodlie92\], \[Wolff93\], \[Rosenblum94\], and \[Gallagher95\] ). Gallagher \[Gallagher95\] is particularly valuable if you are from a computational background. Wolff and Yaeger \[Wolff93\] contains many beautiful images and is oriented towards Apple Macintosh users. The text includes a CD-ROM with images and software. 198 | 199 | You may also wish to learn more about computer graphics and imaging. Foley and van Dam \[FoleyVanDam90\] is the basic reference for computer graphics. Another recommended text is \[BurgerGillies89\]. Suggested reference books on computer imaging are \[Pavlidis82\] and \[Wolberg90\]. 200 | 201 | Two texts by Tufte \[Tufte83\] \[Tufte90\] are particularly impressive. Not only are the graphics superbly done, but the fundamental philosophy of data visualization is articulated. He also describes the essence of good and bad visualization techniques. 202 | 203 | Another interesting text is available from Siemens, a large company offering medical imaging systems \[Krestel90\]. This text describes the basic concepts of imaging technology, including MRI and CT. This text is only for those users with a strong mathematical background. A less mathematical overview of MRI is available from \[SmithRanallo89\]. 204 | 205 | To learn more about programming with *Visualization Toolkit*, we recommend the text *The* *VTK User's Guide* \[UsersGuide\]. This text has an extensive example suite as well as descriptions of the internals of the software. Programming resources including a detailed description of API's, VTK file formats, and class descriptions are provided. 206 | 207 | ## 1.13 References 208 | 209 | \[Brodlie92\]1 210 | K. W. Brodlie et al. *Scientific Visualization Techniques and 211 | Applications*. Springer-Verlag, Berlin, 1992. 212 | 213 | \[BurgerGillies89\] 214 | P. Burger and D. Gillies. *Interactive Computer Graphics Functional, 215 | Procedural and Device-Level Methods*. Addison-Wesley Publishing 216 | Company, Reading, MA, 1989. 217 | 218 | \[Chen93\] 219 | P. C. Chen. "A Climate Simulation Case Study." In *Proceedings of 220 | Visualization '93*. pp. 397--401, IEEE Computer Society Press, Los 221 | Alamitos, CA, 1993. 222 | 223 | \[FoleyVanDam90\] 224 | J. D. Foley, A. van Dam, S. K. Feiner, and J. F. Hughes. *Computer 225 | Graphics Principles and Practice (2d Ed)*. Addison-Wesley, Reading, 226 | MA, 1990. 227 | 228 | \[Gallagher95\] 229 | R. S. Gallagher (ed). *Computer Visualization Graphics Techniques for 230 | Scientific and Engineering* *Analysis.* CRC Press, Boca Raton, FL, 231 | 1995. 232 | 233 | \[Krestel90\] 234 | E. Krestel (ed). *Imaging Systems for Medical Diagnostics*. 235 | Siemens-Aktienges, Munich, 1990. 236 | 237 | \[InfoVis95\] 238 | *The First Information Visualization Symposium*. IEEE Computer 239 | Society Press, Los Alamitos, CA, 1995. 240 | 241 | \[McCormick87\] 242 | B. H. McCormick, T. A. DeFanti, and M. D. Brown. "Visualization in 243 | Scientific Computing." Report of the NSF Advisory Panel on Graphics, 244 | Image Processing and Workstations *,* 1987. 245 | 246 | \[MDHMS\] 247 | *McDonnell Douglas Human Modeling System Reference Manual*. Report 248 | MDC 93K0281. McDonnell Douglas Corporation, Human Factors Technology, 249 | Version 2.1, July 1993. 250 | 251 | \[Nielson90\] 252 | G. M. Nielson and B. Shriver (eds). *Visualization in Scientific 253 | Computing*. IEEE Computer Society Press, Los Alamitos, CA, 1990. 254 | 255 | \[NYTimes\] 256 | *The New York Times Business Day,* Tuesday, May 2, 1995. 257 | 258 | \[Patrikalakis91\] 259 | N. M. Patrikalakis (ed). *Scientific Visualization of Physical 260 | Phenomena.* Springer-Verlag, Berlin, 1991. 261 | 262 | \[Pavlidis82\] 263 | T. Pavlidis. *Graphics and Image Processing*. Computer Science Press, 264 | Rockville, MD, 1982. 265 | 266 | \[Rosenblum94\] 267 | L. Rosenblum et al. *Scientific Visualization Advances and 268 | Challenges.* Harcourt Brace & Company, London, 1994. 269 | 270 | \[SmithRanallo89\] 271 | H. J. Smith and F. N. Ranallo. *A Non-Mathematical Approach to Basic 272 | MRI*. Medical Physics Publishing Corporation, Madison, WI, 1989. 273 | 274 | \[Tufte83\] 275 | E. R. Tufte. *The Visual Display of Quantitative Information.* 276 | Graphics Press, Cheshire, CT, 1990. 277 | 278 | \[Tufte90\] 279 | E. R. Tufte. *Envisioning Information.* Graphics Press, Cheshire, CT, 280 | 1990. 281 | 282 | \[UsersGuide\] 283 | W. Schroeder, ed. *The VTK User's Guide*. Kitware, Inc. 284 | http://www.kitware.com. 285 | 286 | \[Waters91\] 287 | K. Waters and D. Terzopoulos. "Modeling and Animating Faces Using 288 | Scanned Data." *Visualization and Computer Animation*. 2:123--128, 289 | 1991. 290 | 291 | \[Wolberg90\] 292 | G. Wolberg. *Digital Image Warping*. IEEE Computer Society Press, Los 293 | Alamitos, CA, 1990. 294 | 295 | \[Wolff93\] 296 | R. S. Wolff and L. Yaeger. *Visualization of Natural Phenomena.* 297 | TELOS, Springer-Verlag, Santa Clara, CA, 1993. 298 | -------------------------------------------------------------------------------- /VTKBook/02Chapter2.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Chapter 2 - Object-Oriented Design 4 | 5 | **O**bject-oriented systems are becoming widespread in the computer industry for good reason. Object-oriented systems are more modular, easier to maintain, and easier to describe than traditional procedural systems. Since the *Visualization Toolkit* has been designed and implemented using object-oriented design, we devote this chapter to summarizing the concepts and practice of object-oriented design and implementation. 6 | 7 | ## 2.1 Introduction 8 | 9 | Today's software systems try to solve complex, real-world problems. A rigorous software design and implementation methodology can ease the burden of this complexity. Without such a methodology, software developers can find it difficult to meet a system's specifications. Furthermore, as specifications change and grow, a software system that does not have a solid, underlying architecture and design will have difficulty adapting to these expanding requirements. 10 | 11 | Our visualization system is a good example of complex software that needs to be designed with extensibility in mind. Data visualization is a rapidly expanding field, with visualization techniques being introduced each year. Any system that hopes to incorporate future innovations must have an underlying design that supports the addition of new material without a significant impact on the existing system. 12 | 13 | Object-oriented design is a software engineering methodology that deals comfortably with complexity and provides a framework for later changes and additions. The object-oriented design process attempts to divide a complex task into small and simple pieces called objects. The objects are computer abstractions that model physical or abstract pieces of the system being simulated. Object-oriented design methodologies provide mechanisms to identify the abstractions that exist within a system and to model the behavior of the objects. 14 | 15 | ## 2.2 Goals of Good Software Design 16 | 17 | The quality of a software design is difficult to measure, but some qualitative aspects can guide us. A good software design should be robust, understandable, extensible, modular, maintainable, and reusable. 18 | 19 | A robust system handles exceptional conditions gracefully and behaves consistently. Robustness gives software developers confidence that the underlying components of the system will behave as expected, even when the system is used under different circumstances than the original implementor intended. 20 | 21 | An understandable system can be used by someone other than the original implementor. The use of the system should seem logical and sensible. The names of the components of the system should be derived from the problem domain. 22 | 23 | Extendible systems accept new tasks while still doing the tasks they were originally intended to perform. A system should accept new forms of data and new algorithms without disrupting existing software. Adding a new primitive to the system should not cause large portions of the system to be modified. Experience shows that the more existing code that is modified in a system, the more likely errors will be introduced. 24 | 25 | Modular software systems minimize the number of relationships that exist between components of a system. System components that are tightly coupled should be grouped together logically and obey common naming conventions and protocols. 26 | 27 | Software maintenance is often ignored during system design. Nevertheless, the total cost of a system includes maintenance as well as the original development. A software system is maintainable if problems are easily isolated and the repair of one problem does not introduce problems in unrelated parts of the system. 28 | 29 | Finally, the economics of software development require that we leverage as much of our past work as possible. In an ideal world, the implementation of a new technique in an existing system should be a simple task. This is seldom the case in software systems. Creation of reusable software components can reduce duplication of effort and promote consistent interfaces within a system. However, as we see throughout this book, creating software that can be reused often takes extra effort. A short-term view of productivity by one individual conflicts with the long-term view of the productivity of a software development organization. 30 | 31 | ## 2.3 Object-Oriented Concepts 32 | 33 | Objects are the dominating concepts in object-oriented systems. Objects are abstractions that encapsulate the properties and behavior of the entities within a system. Each object has an identity that distinguishes it from other objects in the system. Often, the distinguishable aspects of an object are obvious. For example, a difference in color, location on a screen, size, or contents distinguishes one window from another on a computer desktop. But, appearances can be deceiving, and even two objects that share all the same characteristics may still have different identities. Two automobiles may have the same manufacturer, model, options and colors, but remain two different cars. The real world distinguishes the two cars by a vehicle identification number. Likewise, programming systems that deal with multiple entities need an identity mechanism. A pointer to allocated memory or a variable name in a system-managed symbol table are often used to distinguish objects in a system. In a database system, a set of identifier keys (called an *n*-tuple) identifies an entity in a system. 34 | 35 | But, how do object-oriented systems differ from conventional, procedural programming systems? The major difference is in the way the two approaches treat data abstraction. Conventional systems limit abstraction to data typing, while object-oriented systems create abstractions for both the data and the operations that can be applied to the data. In fact, an object-oriented system keeps the data and operations together in one programming construct called an object. Together, the data and operations comprise an object's *properties*. When an operation is applied to an object, the programming language's dynamic-binding mechanism executes the procedure that is appropriate for that object. This is not the case in procedure-oriented systems. The programmer must supply logic to decide which procedure to call. Systems that handle multiple types are often littered with case statements to select the appropriate procedure for an operation. As new types are added to these systems, the code that dispatches operations based on data type must be extended to handle the new type. For example, in a program to display different types of primitives, the following pseudo code shows how a procedure-oriented system differs from an object-oriented system. 36 | 37 | Procedure oriented (in C): 38 | 39 | ``` c 40 | Primitive *aPrim; 41 | ... 42 | DrawPrimitive (aPrim) 43 | ... 44 | procedure DrawPrimitive (aPrim) 45 | { 46 | if (aPrim->type == TRIANGLE) then DrawTriangle (aPrim) 47 | else if (aPrim->type == SQUARE) then DrawSquare (aPrim) 48 | else if (aPrim->type == CIRCLE) then DrawCircle (aPrim) 49 | ... 50 | } 51 | ``` 52 | Object-oriented (in C++): 53 | ``` c++ 54 | ... 55 | aPrim->Draw (); 56 | ... 57 | ``` 58 | 59 | Later in this project's existence, someone may want to add a new primitive, let's say a quadratic. The person assigned with such a formidable task must search the existing system for all occurrences of the if statements in the first example and add a test for the new quadratic type. Of course, a good programmer will have isolated the code in one location, as we have done here, so the task is easier. Nevertheless, that programmer must first realize that the original programmer was skilled enough to modularize the drawing code, then find the code (without necessarily knowing the procedure name) and modify the code. To complicate matters, a system built by more than one programmer will undoubtedly be under a configuration management system, requiring a check-out, edit, and check-in cycle. 60 | 61 | The object-oriented programmer has an easier task. Consulting the design document that defines the object properties for a primitive, this programmer adds a draw operation to the quadratic object. The new primitive is available to the system without changing any existing code! Of course, this is an oversimplified example. But think about past programs you have written and remember how hard it was to add a new data type. Were your changes isolated to the new code you added? Did you have to edit code that you did not write and maybe did not understand? Keep this example in mind as you read our object-oriented implementation of a data visualization library. 62 | 63 | Before describing object-oriented design and programming in more detail, we provide an observation and prediction. Over the several years that we have designed and implemented software using an object-oriented methodology, we have observed that newcomers to the technique will say, "But this is how I already write programs. My systems are modular; they're robust; I can easily add to them." If you still feel that way after reading this book, do not fault the object-oriented approach. Rather, we have failed as authors. However, such a negative response is unlikely. In our experience, users become comfortable with this approach in a short time. Especially when they are introduced to objects through an existing, well-designed object-oriented system. You will reach the "aha" stage, after which it will be difficult to begin a software project without looking for the objects in the problem. 64 | 65 | ## 2.4 Object-Oriented Terminology 66 | 67 | As with any software engineering design methodology, object-oriented design has its own terminology. Unfortunately, not everyone agrees on what that is. We adopt much of our terminology from Rumbaugh \[Rumbaugh91\] and, since the *Visualization Toolkit* is written in C++, from Stroustrup \[Stroustrup84\]. For the most part, Rumbaugh's terminology is independent of programming language, while Stroustrup is specific to implementation in C++. The transition from design to programming will be painless though, and the mappings between the two terminologies are mostly obvious. Where we think there might be confusion, we will point out the correspondences. 68 | 69 | ### What Is an Object? 70 | 71 | An *object* is an abstraction that models the state and behavior of entities in a system. Abstraction is a mental process that extracts the essential aspects of a situation for a particular purpose. Entities are things in the system that have identity. Chairs, airplanes, and cameras are objects that correspond to physical entities in the real world. Binary trees, symbol tables, and ordered collections are objects that exist only within the world of computer science. 72 | 73 | {ref}`Figure 2-1 ` is an example of the abstraction that occurs when we map the state and behavior of a system component to an object. Here, the object is a particular type of tree: a pin oak. In this application we desire to simulate the growth of various types of trees over the course of a season. For our purpose we have decided that the important state variables are the tree's age, trunk diameter, height, and habit (i.e., growing form). To capture the behavior of the pin oak we have methods to simulate growth and seasonal effects corresponding to spring, summer, fall, and winter. There are also methods (not shown) for setting and getting current state variables. 74 | 75 | {#Figure-2-1 .figure-target} 76 |   77 |
78 | Figure2-1 79 |
Figure 2-1. Mapping a real-world object into an object abstraction. The real-world objects are various types of trees. One of these objects (a pin oak tree) is mapped into the computer object we call PinOak.
80 |
81 | 82 | We call the state of an object its *attributes* (also called *instance variables* ) and define its behavior by the *operations* that can be applied to it. Attributes have a name, a data type, and a data value. The data type of an attribute may be a primitive type in the programming language (such as a char or float in C++), or another object. For example, the vtkTransform object in our visualization system has an attribute of type vtkMatrix4x4 , another object. vtkMatrix4x4 in turn has attributes that are an array of primitive values declared as float values in C++. 83 | 84 | Operations are functions or transformations that can be applied to an object. Operations define the behavior of the object. The operations for a particular object are implemented in procedures we call *methods*. 85 | 86 | Together, the attributes and operations of an object comprise its *properties*. A two-dimensional line graph could have attributes that include an *x* and *y* axis, a legend, and a connected set of points. This graph has methods that draw the graph in a window. It also has methods that let a user specify the axes, data to draw, and legend to use. 87 | 88 | Objects that share the same properties can be grouped using the process of *classification*. An object class, usually just called a class, specifies the properties that all objects in the class have. The class only specifies the names of the properties, not their specific values. Different classes can (and usually do) have properties with names that exist in other classes. Many classes in our visualization system have an attribute named Position. Although both a camera and actor in our visualization system have this attribute, the effect on each is different because they are different classes. Attribute names are shared by all objects in a given class, but separate storage is allocated for each object's attribute values. 89 | 90 | When an operation with the same name is applied to objects of different classes we call the operation *polymorphic*. For example, our visualization system has an operation named Render() that can be applied to many different objects. The implementation of an operation for a particular class is called a method. The print operation for a vtkMatrix4x4 object is implemented in its print method. That is, there exists code that knows how to print objects of class vtkMatrix4x4 and not objects of other classes. Objects know which method to use because they are kept within each object's data structure. In most systems the code for the methods is shared by all objects in the same class. Some programming languages, including C++, define a method by combining an operation name with its argument types. This process is called overloading an operation and is a powerful technique that permits the same name to be used for logically similar operations. For example, the class definition below defines three methods for calculating the square of a number. Even though these methods have the same operation name, they are unique because C++ uses both the operation name and the operations argument types. 91 | 92 | ``` c++ 93 | class math 94 | { 95 | float square(float x); 96 | int square(int x); 97 | double square(double x); 98 | } 99 | ``` 100 | 101 | To use a member of a class for some purpose, we create an instance of the class (the process of *instantiation* ). Instance creation establishes the identity of the instance including specifying its initial state. The instance's class serves as a template for the instance during creation, defining the names of each of its attributes and operations. Creation establishes the similarities and differences between this instance and other instances of the same class. The similarities are the names and type of its attributes and the methods that implement its operations. The differences are the specific values of the attributes. The details of how one creates an instance of a class vary from programming language to programming language. In C++, a program creates an instance using a declarative form such as 102 | 103 | ``` c++ 104 | vtkActor aBall; 105 | ``` 106 | 107 | which creates an object from the program stack, or by applying the new operation 108 | 109 | ``` c++ 110 | vtkActor *aBall = new vtkActor; 111 | ``` 112 | which creates the object from the program heap. 113 | 114 | ### Inheritance 115 | 116 | *Inheritance* is a programming mechanism that simplifies adding new classes to a system when they differ in small ways from currently existing classes. The notion of inheritance is adopted from the observation that most systems can be specified using a hierarchical classification system. A fine example of a classification system is the phyla of life on earth. 117 | 118 | Earlier we created an object corresponding to a pin oak tree. The properties of the tree can be more thoroughly described using inheritance ( {ref}`Figure 2-2 ` ). The classification shown here is based on the five kingdom system of Margulis and Schwartz 119 | \[Margulis88\]. 120 | In this system, biota is classified as belonging to one of the five kingdoms Prokaryotae (bacteria), Protoctista (algae, protozoans and slime molds), Fungi (mushrooms, molds, lichens), Plantae (mosses, ferns, cone-bearing, and flowering plants), and Animalia (animals with and without backbones). Below this level we have the classifications division, class, order, family, genus, and species. The figure shows the kingdom, division, class, genus, and species of the pin oak. 121 | 122 | Organizing objects into an inheritance hierarchy provides many benefits. Properties of a general classification are also properties of its sub-classification. For example, we know that all species of genus *Quercus* form acorns. From the software point of view this means any instance variables and methods of a *superclass* are automatically inherited by its *subclass*. This allows us to make changes to a number of objects simultaneously by modifying their superclass. Furthermore, if we desire to add a new class (say a red oak tree) to the hierarchy we can do so without duplicating existing functionality. We need only differentiate the new class from the others by adding new instance variables or overloading existing methods. 123 | 124 | {#Figure-2-2 .figure-target} 125 |   126 |
127 | Figure2-2 128 |
Figure 2-2. Inheritance hierarchy for pin oak tree.
129 |
130 | 131 | The ability to quickly add new classes that are slightly different from currently existing classes promotes the extensibility of a system. Inheritance can be derived top-down using a process called *specialization* , or it can be created bottom-up, combining similar classes during a process called *generalization*. The use of inheritance implies a class hierarchy with one or more classes being the superclasses of one or more subclasses. A subclass inherits the operations and attributes of its superclasses. In C++, subclasses are called *derived* classes and superclasses are called *base* classes. A subclass can add additional operations and attributes that modify the properties it inherited from its superclasses. Through this inheritance, an object can exhibit its superclass's behavior plus any additional behavior it wishes. It can also restrict, or override, operations implemented by its superclass. 132 | 133 | Classes that exist only to act as superclasses for their subclasses are called *abstract* classes. Instance creation of an abstract class is generally prohibited. Abstract classes are useful for gathering attributes and methods that all subclasses will use. They can also define protocols for behavior for their subclasses. This is a powerful use of inheritance that will show up in the design of our visualization system. Abstract classes can enforce complex sequence, control protocols, and ensure uniform behavior. They remove the responsibility of complex protocols from the individual sub-classes and isolate the protocol in the superclass. 134 | 135 | An example of a simple plotting package illustrates the power of abstract classes. Consider a data presentation application that allows for a variety of two-dimensional plotting. This application must support line charts and horizontal and vertical bar charts. The design process identifies properties common to all plots including title, axes, and legend. We then create an abstract class called TwoDPlot to contain these common attributes. Common behavior can also be captured in TwoDPlot within its plot method: 136 | 137 | ``` 138 | Method Plot 139 | { 140 | Draw the border 141 | Scale the data 142 | Draw the axes 143 | Draw the data 144 | Draw the title 145 | Draw the legend 146 | } 147 | ``` 148 | 149 | An abstract class may or may not provide default behavior for each operation. In this example, default behavior for border and title drawing might be provided. Then subclasses of TwoDPlot would define their own functions for the other methods. The protocol specification explicitly spells out what methods a subclass of TwoDPlot should respond to. In the above example, subclasses will need to define their own methods for drawing the axis, data, and legend. Some subclasses might use TwoDPlot 's methods for drawing the border, others might require their own version of this method. The abstract interface defined in TwoDPlot makes it easier to add new classes of 2D plots and the resulting subclasses tend to be more uniform and consistent. 150 | 151 | Another mechanism, *delegation* , is useful for isolating and reusing 152 | behavior. Using delegation, an object applies operations to one of its attributes that is an object. As an example, in the *Visualization Toolkit* the vtkTransform object delegates its Identity() operation to its vtkMatrix4x4 attribute. This instance of vtkMatrix4x4 then performs the operation. There are many more useful object-oriented concepts, but for the time being we have enough information to describe how we can use objects to design a system. 153 | 154 | ## 2.5 Object-Oriented Modelling and Design 155 | 156 | The design of any large software system is a formidable task and the first steps in system design are often the most challenging. No matter what design technique we choose, we must have a thorough understanding of the system's application domain. It would be difficult to see how one could design a fly-by-wire airplane control system without a detailed knowledge of the underlying hardware control systems. Of course, all flight system software is not designed by aeronautical engineers, so some form of system specification must exist. The depth of information in the specifications varies from application to application. 157 | 158 | Object-oriented system design begins with a modelling step that extracts objects and their relationships with other objects from a problem statement or software requirement specification. First, the designer must completely understand the problem being solved. This often requires an in-depth knowledge of the problem domain or access to detailed specifications of the problem being solved. Then, major abstractions must be identified within the system. The abstractions will become, at this high level of design, the first set of objects. For example, a system that keeps track of an investment portfolio will need objects such as stocks, bonds, and mutual funds. In a computer animation system we might need actors, cameras, and lights. A medical computed tomography system will have a table, X-ray source, detectors, and gantry. Our visualization system will have models, isosurfaces, streamlines, and cut planes. During this modelling step, we search the problem domain for objects, properties, and relationships. Later, during multiple passes through the design, the model will be expanded. 159 | 160 | Modelling is a step in most design processes regardless of whether we are designing a ship, house, electronics system, or software. Each discipline follows a methodology that uses techniques specifically created to make the design process efficient and worthwhile. These techniques are so-called "tools of the trade." An electrical engineer uses schematics and logic diagrams, an architect uses drawings and mock-ups, and a ship builder uses scale models. Likewise, software designers need tools that can help create a model of the system. The software tools should have enough expressive power to help the software designer evaluate a design against a specification and help communicate that design to others on the software team. 161 | 162 | We use the Object Modeling Technique (OMT) developed at GE by Jim Rumbaugh and his colleagues \[Rumbaugh91\]. OMT uses three models to specify an object-oriented design: an object model, a dynamic model, and a functional model. Each model describes a different aspect of the system and each has a corresponding diagramming technique that helps us analyze, design, and implement software systems. 163 | 164 | ### The Object Model 165 | 166 | The object model identifies each object in the system, its properties, and its relationships to other objects in the system. For most software systems, the object model dominates the design. The OMT graphical technique uses rectangles to depict object classes, and a variety of connectors to depict inheritance and other object-object relations. Object classes are represented as solid rectangles. Instances are represented as dotted rectangles. The name of the class or instance occupies the top of the rectangle. A line separates the class name from the next section that contains the attributes; a third section describes the methods. Relationships between objects are shown with line segments connecting the two related objects. In OMT, relationships are called associations and they can have various cardinalities: one-to-one, one-to-many, and many-to-many. Special associations that represent containers of other objects are called aggregations. Associations can be labeled with roles. (Roles are names given to associations and are used to further describe the nature of the association.) OMT represents inheritance with a triangle, with the superclass attached to the apex, and sub-classes attached to the base of the triangle. {ref}`Figure 2-3 ` shows an object model for locator devices in a virtual reality system. 167 | 168 | The first object in the class hierarchy is locator. This abstract class specifies common attributes and methods for all locators. The subclasses of locator are locator2D and locator3D *.* In the current rendition of this object model, the locator only has one attribute, a device and two methods, open() and close()*.* The two subclasses of locator, locator2D and locator3D are also abstract classes, containing attributes and methods that distinguish them from each other based on their spatial dimensionality. For example, locator3D has an *x, y, z* position while locator2D has an *x, y* position. Both locators have a locate() method that updates the current position. In the 3D locator class, locate() also updates the orientation. The subclasses of locator3D include hardware from three different manufacturers: flock, pixsys, and logitek, as well as an articulated positioner abstract class. The three object classes for the hardware contain methods specific to each device. Each method knows how to convert the hardware specific codes returned by the device. They know that to be considered a locator3D subclass, they must implement a position and orientation operation that will provide *x, y, z* coordinates and three angular rotations that can be composed into a transformation matrix. The object model also shows us that the articulated locator has angles and linkages. Two specific articulated locators are immersion and phantom. An object model diagrammed in this fashion serves as a starting point for design and discussion. It reveals common methods and attributes as well as the distinguishing characteristics of each class. 169 | 170 | Later, during implementation, we will convert these object models into software objects. The particular computer language we choose for implementation will dictate the details of the conversion. 171 | 172 | {#Figure-2-3 .figure-target} 173 |   174 |
175 | Figure2-3 176 |
Figure 2-3. Object model for locator devices.
177 |
178 | 179 | ### The Dynamic Model 180 | 181 | The object model describes the static portion of a system while the dynamic model details the sequences of events and time dependencies of the system. OMT uses state diagrams to model system dynamics. Dynamic models are frequently used to design control systems and user interfaces. Our visualization system has limited sequence and control aspects, so we will not dwell on state diagrams. But, if we were designing a user-friendly interface for a digital wristwatch, the state diagram in **Figure2-4** would be useful. 182 | 183 |
184 | Figure 2-4 185 |
Figure 2-4. State diagram for a wristwatch.
186 |
187 | 188 | The ovals in the diagram show a state; the arrows show a transition from one state to another; and the labels on the arrows show an event that causes the state transition. This example shows three display states and multiple setting states. The event b1 means button one is pressed. This watch has three buttons. The diagram shows what happens in each state when any of the three buttons is pressed. The diagram clearly shows that b1 is used to move between display modes for time, date, and alarm. B2 changes from display mode into setting mode or selects the field to change in a given mode. B3 increments the selected field by one unit. The state diagram also shows what happens when illegal buttons are pressed. If the watch is displaying time and button 3 is pressed, nothing happens. If button 3 is pressed when the watch is displaying the alarm, the alarm on/off is toggled. 189 | 190 | ### The Functional Model 191 | 192 | The functional model shows how data flows through the system and how processes and algorithms transform the data. It also shows functional dependencies between processes. Exposing these relationships will affect the associations in the object model. The major components of a data flow diagram (DFD) are data sources, data sinks, and processes. Data sources and sinks are represented as rectangles. Ellipses show processes. Data stores are shown within two horizontal lines. DFDs are useful to describe the overall flow in the system. They can also be used to describe any process that transforms one data representation into another. Processes identified in the DFD during function modelling may turn up as operations or objects in the object model. 193 | 194 | **Figure2-5** shows a data flow diagram for a 3D medical imaging system. The diagram shows the data acquisition on the computed tomography (CT) or magnetic resonance imaging (MRI) scanner. The series of cross-sectional slices provided by the scanner is first processed by image processing filters to enhance features in the gray scale slices. A segment process identifies tissues and produces labels for the various tissues present in the slices. These labeled slices are then passed through a surface extraction process to create triangles that lie on the surface of each tissue. The render process transforms the geometry into an image. Alternatively, the write process stores the triangles in a file. Later, the triangles can be read and rendered into an image. We defer the decision whether to make the processes objects or operations until later. Chapter 4 uses DFDs to model the visualization pipeline. 195 | 196 |
197 | Figure2-5 198 |
Figure 2-5. Data flow diagram.
199 |
200 | 201 | ## 2.6 Object-Oriented Programming Languages 202 | 203 | The choice of computer programming language is a religious issue. Every computer language has its evangelists and followers. Most of our experience in object-oriented languages is with C and C++. C itself does not have object-oriented facilities, but an object-oriented methodology and strict coding guidelines permit the development of object-oriented code. We chose C++ for the *Visualization Toolkit* because it has built-in support for the notion of classes, dynamic binding of methods to objects, and inheritance. C++ is also widely available on many UNIX platforms and personal computers. 204 | 205 | Simula \[Birtwistle79\] is usually acknowledged as the first object-oriented language, but Smalltalk \[Goldberg83\] is probably the best-known language. Smalltalk was developed at the Xerox Palo Alto Research Center (PARC) in the seventies and eighties. Well before its time, Smalltalk provided not just a language, but also an operating system and programming environment built with objects. When you use Smalltalk, you live and breathe objects. For the object-oriented purist, there is no substitute. Smalltalk spin-offs include window systems, workstations, and the desktop paradigm. Both Apple Computer and Microsoft acknowledge the influence that Smalltalk and Xerox PARC had on the Macintosh and Windows. Smalltalk was probably conceived 10 years too early for widespread commercial acceptance. During Smalltalk's infancy and adolescence, the complexity of software was much lower than today's systems. FORTRAN served the scientific and engineering community, COBOL was the choice for business applications and the computer science community embraced C. The use of abstractions was limited to mathematicians and other abstract thinkers. Programming was considered an art form and programmers concentrated on clever implementations of algorithms. Each new task often required a new program. Technical programmers did use numerical libraries for common mathematical operations, but any notions of common abstractions at a higher level were relatively few. 206 | 207 | ## 2.7 Object-Oriented Visualization 208 | 209 | Don't underestimate the investment required to design a system. Although object-oriented technologies have tremendous potential to produce good software designs, these techniques do not guarantee a good design. The visualization system we present in this text has its roots in an animation \[Lorensen89\] and visualization system \[Schroeder92\] that we developed over a 10-year period. The initial design, which identified 25 classes for computer animation of industrial applications, took four software professionals 10 months (almost 3.5 person years) to complete. During this design stage the developers produced zero (!) lines of code. The subsequent implementation took one month, or ten percent of the effort. This system still serves our visualization group even after 20 other software developers have added over 500 classes to the system. The original 25 classes still exist in the system today. 210 | 211 | As a reader, we hope that you can benefit from our experience in visualization system design. We have tried to assist you by describing the properties (attributes and methods) of many of the *Visualization Toolkit* classes in each chapter's *"*Putting It All Together *"* section. There are also included a series of object diagrams generated by the Doxygen documentation system that will give you a quick overview of object relationships such as superclass and subclass. This documentation can be found on the CD-ROM or on-line at http://www.vtk.org. In the next chapter we will also explain the decisions we made to design the VTK object-oriented toolkit. 212 | 213 | ## 2.8 Chapter Summary 214 | 215 | This chapter introduced object-oriented concepts and terminology. The emphasis was on dealing with complexity and how object-oriented technology provides mechanisms to reduce the complexity of software. 216 | 217 | Model building is an important part of any design methodology. We introduced three models and notations. The object model describes the objects in a system and their static relationships, attributes, and methods. Object diagrams succinctly present this static information. The dynamic model focuses on the time dependent aspects of the system. State transition diagrams are used to model the sequence and control portions of the system. The functional model shows how objects in the system transform data or other objects. The data flow diagram is a convenient notation for showing functional dependencies. 218 | 219 | There are several choices available today for object-oriented implementations. Although it is possible to implement an object-oriented system in a non-object-oriented language such as C, the methodology is best served by an object-oriented language. We have chosen C++ to implement the *Visualization Toolkit*. 220 | 221 | The emphasis in this book is on architecture, data structure design, and algorithms. The object-oriented aspects of the system are important, but what the system does is far more important. 222 | 223 | ## 2.9 Bibliographic Notes 224 | 225 | There are several excellent textbooks on object-oriented design. Both \[Rumbaugh91\] and \[Birtwistle79\] present language-independent design methodologies. Both books emphasize modelling and diagramming as key aspects of design. \[Meyer88\] also describes the OO design process in the context of Eiffel, an OO language. Another popular book has been authored by Booch \[Booch91\]. 226 | 227 | Anyone who wants to be a serious user of object-oriented design and implementation should read the books on Smalltalk \[Goldberg83\] \[Goldberg84\] by the developers of Smalltalk at Xerox Parc. In another early object-oriented programming book, \[Cox86\] describes OO techniques and the programming language Objective-C. Objective-C is a mix of C and Smalltalk and was used by Next Computer in the implementation of their operating system and user interface. 228 | 229 | There are many texts on object-oriented languages. CLOS \[Keene89\] describes the Common List Object System. Eiffel, a strongly typed OO language is described by \[Meyer88\]. Objective-C \[Cox86\] is a weakly typed language. 230 | 231 | Since C++ has become a popular programming language, there now many class libraries available for use in applications. [Gorlen90] describes an extensive class library for collections and arrays modeled after the Smalltalk classes described in [Goldberg83]. [Stepanov94] and [Musser94] describe the Standard Template Library, a framework of data structures and algorithms that is now a part of the ANSI C++ standard. Open Inventor [Inventor] is a C++ library supporting interactive 3D computer graphics. The Insight Segmentation and Registration Toolkit (ITK) is a relatively new class library often used in combination with VTK [ITK] for medical data processing. VXL is a C++ library for computer vision research and implementation [VXL]. Several mathematical libraries such as VNL (a part of VXL) and Blitz++ [Blitz] are also available. A wide variety of other C++ toolkits are available, Google searches [Google] are the best way to find them. 232 | 233 | C++ texts abound. The original description by the author of C++ [Stroustrup84] is a must for any serious C++ programmer. Another book [Ellis90] describes standard extensions to the language. These days the UML book series of which [Booch98] and [Rumbaugh98] are quite popular and are highly recommended resources. Several books on generic programming [Austern99] and STL [Musser96] are also useful. Check with your colleagues for their favorite C++ book. 234 | 235 | To keep in touch with new developments there are conferences, journals, and Web sites. The strongest technical conference on object-oriented topics is the annual Object-Oriented Programming Systems, Languages, and Applications ( *OOPSLA* ) conference. This is where researchers in the field describe, teach and debate the latest techniques in object-oriented technology. The bimonthly *Journal of Object-Oriented Programming* (JOOP) published by SIGS Publications, NY, presents technical papers, columns, and tutorials on the field. Resources on the World Wide Web include the Usenet newsgroups *comp.object* and *comp.lang.c++*. 236 | 237 | ## 2.10 References 238 | 239 | \[Austern99\] 240 | M. H. Austern. *Generic Programming and the STL*. Addison-Wesley 1999. ISBN 0-2-1-30956-4. 241 | 242 | \[Birtwistle79\] 243 | G. M. Birtwistle, O. Dahl, B. Myhrhaug, and K. Nygaard. *Simula Begin*. Chartwell-Bratt Ltd, England, 1979. 244 | 245 | \[Blitz\] 246 | http://www.oonumerics.org/blitz/. 247 | 248 | \[Booch91\] 249 | G. Booch. *Object-Oriented Design with Applications.* Benjamin/Cummings Publishing Co., Redwood City, CA, 1991. 250 | 251 | \[Booch98\] 252 | G. Booch, I. Jacobson, J. Rumbaugh. *The Unified Modeling Language User Guide*. Addison-Wesley 1998, ISBN 0201571684. 253 | 254 | \[Cox86\] 255 | B. J. Cox. *Object-Oriented Programming: An Evolutionary Approach.* Addison-Wesley, Reading, MA, 1986. 256 | 257 | \[Ellis90\] 258 | M. Ellis and B. Stroustrup. *The Annotated C++ Reference Manual*. Addison-Wesley, Reading, MA, 1990. 259 | 260 | \[Goldberg83\] 261 | A. Goldberg, D. Robson. *Smalltalk-80: The Language and Its Implementation*. Addison-Wesley, Reading, MA, 1983. 262 | 263 | \[Goldberg84\] 264 | A. Goldberg. *Smalltalk-80: The Interactive Programming Environment*. Addison-Wesley, Reading, MA, 1984. 265 | 266 | \[Google\] 267 | http://www.google.com. 268 | 269 | \[Gorlen90\] 270 | K. Gorlen, S. Orlow, and P. Plexico. *Data Abstraction and Object-Oriented Programming*. John Wiley & Sons, Ltd., Chichester, England, 1990. 271 | 272 | \[Inventor\] 273 | http://oss.sgi.com/projects/inventor/. 274 | 275 | \[ITK\] 276 | The Insight Software Consortium. http://www.itk.org. 277 | 278 | \[Keene89\] 279 | S. Keene. *Object-Oriented Programming in Common Lisp: A Programmer's Guide to CLOS*. Addison-Wesley, Reading, MA, 1989. 280 | 281 | \[Lorensen89\] 282 | W. E. Lorensen, B. Yamrom. "Object-Oriented Computer Animation." *Proceedings of IEEE NAE-CON*, 2:588-595, Dayton, Ohio, May 1989. 283 | 284 | \[Margulis88\] 285 | L. Margulis and K. V. Schwartz. *Five Kingdoms an Illustrated Guide to the Phyla of Life on Earth*. H. Freeman & Co., New York, 1988. 286 | 287 | \[Meyer88\] 288 | B. Meyer. *Object-Oriented Software Construction*. Prentice Hall International, Hertfordshire, England, 1988. 289 | 290 | \[Musser94\] 291 | D. Musser and A. Stepanov. "Algorithm-Oriented Generic Libraries." *Software Practice and Experience*. 24(7):623--642, July 1994. 292 | 293 | \[Musser96\] 294 | D. R. Musser and A. Saini. *STL Tutorial and Reference Guide*. Addison-Wesley 1996.ISBN 0-201-63398-1. 295 | 296 | \[Rumbaugh91\] 297 | J. Rumbaugh, M. Blaha, W. Premerlani, F. Eddy, and W. Lorensen. *Object-Oriented Modeling and* *Design.* Prentice Hall, Englewood Cliffs, NJ, 1991. 298 | 299 | \[Rumbaugh98\] 300 | J. Rumbaugh, G. Booch, and I. Jacobson. *The Unified Modeling Language Reference Manual*. Addison-Wesley 1998, ISBN: 020130998X. 301 | 302 | \[Schroeder92\] 303 | W. J. Schroeder, W. E. Lorensen, G. Montanaro, and C. Volpe. "Visage: An Object-Oriented Scientific Visualization System." In *Proceedings of Visualization '92*. pp. 219--226, IEEE Computer Society Press, Los Alamitos, CA, October 1992. 304 | 305 | \[Stepanov94\] 306 | A. Stepanov and M. Lee. *The Standard Template Library*. ISO Programming Language C++ Project. Doc. No. X3J16/94-0095, WG21/N0482, May 1994. 307 | 308 | \[Stroustrup84\] 309 | B. Stroustrup. *The C++ Programming Language*. Addison-Wesley, Reading, MA, 1986. 310 | 311 | \[VXL\] 312 | http://vxl.sourceforge.net/. 313 | 314 | ## 2.11 Exercises 315 | 316 | 2.1 Answer the following questions about a program you have written. 317 | 318 | a) How much time did you spend on design and implementation? 319 | 320 | b) What methodology, if any, did you use? 321 | 322 | c) Could you easily extend the system? 323 | 324 | d) Could anyone extend the system? 325 | 326 | 2.2 Identify the major objects and operations for the following 327 | applications. 328 | 329 | a) An airline reservation system. 330 | 331 | b) An adventure game. 332 | 333 | c) A 2D plotting package. 334 | 335 | d) An automatic teller machine. 336 | 337 | 2.3 Draw an object diagram for each example in Exercise 2.2. 338 | 339 | 2.4 Computer animation uses concepts from graphics and movie making. 340 | Identify the major objects and operations in a computer animation 341 | system. 342 | 343 | 2.5 For the animation system in Exercise 2.4, design control and 344 | looping objects that will allow flexible control of the properties of 345 | the actors in the system. If we call these control and looping 346 | objects scenes and cues, how would you expect them to look? 347 | 348 | 2.6 Draw a state diagram for your wristwatch using Figure 2-4 as an 349 | example. 350 | 351 | 2.7 Draw a data flow diagram for calculating the surface area and 352 | volume of a sphere and cylinder. 353 | 354 | 355 | LocalWords: Austern 356 | -------------------------------------------------------------------------------- /VTKBook/13Glossary.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Glossary 4 | 5 | **3D Widget.** An interaction paradigm enabling manipulation of scene objects (e.g., lights, camera, actors, and so on). The 3D widget typically provides a visible representation that can be intuitively and interactively manipulated. 6 | 7 | **API.** An acronym for application programmer's interface. 8 | 9 | **Abstract Class.** A class that provides methods and data members for the express purpose of deriving subclasses. Such objects are used to define a common interface and attributes for their subclasses. 10 | 11 | **Abstraction.** A mental process that extracts the essential form or unifying properties of a concept. 12 | 13 | **Alpha.** A specification of opacity (or transparency). An alpha value of one indicates that the object is opaque. An alpha value of zero indicates that the object is completely transparent. 14 | 15 | **Ambient Lighting.** The background lighting of unlit surfaces. 16 | 17 | **Animation.** A sequence of images displayed in rapid succession. The images may vary due to changes in geometry, color, lighting, camera position, or other graphics parameters. Animations are used to display the variation of one or more variables. 18 | 19 | **Antialiasing.** The process of reducing aliasing artifacts. These artifacts typically result from undersampling the data. A common use of antialiasing is to draw straight lines that don't have the jagged edges found in many systems without antialiasing. 20 | 21 | **Azimuth.** A rotation of a camera about the vertical (or view up) axis. 22 | 23 | **Attribute.** A named member of a class that captures some 24 | characteristic of the class. Attributes have a name, a data type, and 25 | a data value. This is the same as a data member or instance variable. 26 | 27 | **Base Class.** A superclass in C++. 28 | 29 | **Binocular Parallax.** The effect of viewing the same object with two 30 | slightly different viewpoints to develop depth information. 31 | 32 | **Boolean Texture.** A texture map consisting of distinct regions used 33 | to "cut" or accentuate features of data. For example, a texture map 34 | may consist of regions of zero opacity. When such a texture is mapped 35 | onto the surface of an object, portions of its interior becomes 36 | visible. Generally used in conjunction with a quadric (or other 37 | implicit function) to generate texture coordinates. 38 | 39 | **C++.** A compiled programming language with roots in the C 40 | programming language. C++ is an extension of C that incorporates 41 | objectoriented principles. 42 | 43 | **CT (Computed Tomography).** A data acquisition technique based on 44 | Xrays. Data is acquired in a 3D volume as a series of slice planes 45 | (i.e., a stack of *n^2^* points). 46 | 47 | **Cell.** The atoms of visualization datasets. Cells define a topology 48 | (e.g., polygon, triangle) in terms of a list of point coordinates. 49 | 50 | **Cell Attributes.** Dataset attributes associated with a cell. See 51 | also *point attributes* . 52 | 53 | **Class.** An object that defines the characteristics of a subset of 54 | objects. Typically, it defines methods and data members. All objects 55 | instantiated from a class share that class's methods and data 56 | members. 57 | 58 | **Clipping Plane.** A plane that restricts the rendering or processing 59 | of data. Front and back clipping planes are commonly used to restrict 60 | the rendering of primitives to those lying between the two planes. 61 | 62 | **Color Mapping.** A scalar visualization technique that maps scalar 63 | values into color. Generally used to display the variation of data on 64 | a surface or through a volume. 65 | 66 | **Compiled System.** A compiled system requires that a program be 67 | compiled (or translated into a lower level language) before it is 68 | executed. Contrast with *interpreted systems* . 69 | 70 | **Composite Cell.** A cell consisting of one or more primary cells. 71 | 72 | **Concrete Class.** A class that can be instantiated. Typically, 73 | abstract classes are not instantiated but concrete classes are. 74 | 75 | **Connectivity.** A technique to extract connected cells. Cells are 76 | connected when they share common features such as points, edges, or 77 | faces. 78 | 79 | **Contouring.** A scalar visualization technique that creates lines 80 | (in 2D) or surfaces (in 3D) representing a constant scalar value 81 | across a scalar field. Contour lines are called isovalue lines or 82 | iso-lines. Contour surfaces are called isovalue surfaces or 83 | isosurfaces. 84 | 85 | **Constructor.** A class method that is invoked when an instance of 86 | that class is created. Typically the constructor sets any default 87 | values and allocates any memory that the instance needs. See also 88 | *destructor* . 89 | 90 | **Critical Points.** Locations in a vector field where the local 91 | vector magnitude goes to zero and the direction becomes undefined. 92 | 93 | **Cutting.** A visualization technique to slice through or cut data. 94 | The cutting surface is typically described with an implicit function, 95 | and data attributes are mapped onto the cut surface. See also *boolean 96 | texture* . 97 | 98 | **Dataset.** The general term used to describe visualization data. Datasets consist of structure (geometry and topology) and dataset attributes (scalars, vectors, tensors, etc.). 99 | **Dataset Attributes.** The information associated with the structure 100 | of a dataset. This can be scalars, vectors, tensors, normals, and 101 | texture coordinates, or arbitrary data arrays that may be contained in 102 | the field. 103 | 104 | **Data Extraction.** The process of selecting a portion of data based 105 | on characteristics of the data. These characteristics may be based on 106 | geometric or topological constraints or constraints on data attribute 107 | values. 108 | 109 | **Data Flow Diagram.** A diagram that shows the information flow and 110 | operations on that information as it moves throughout a program or 111 | process. 112 | 113 | **Data Object.** An object that is an abstraction of data. For 114 | example, a patient's file in a hospital could be a data object. 115 | Typical visualization objects include structured grids and volumes. 116 | See also *process object* . 117 | 118 | **Data Member.** A named member of a class that captures some 119 | characteristic of the class. Data members have a name, a data type, 120 | and a data value. This is the same as an attribute or instance 121 | variable. 122 | 123 | **Data Visualization.** The process of transforming data into sensory 124 | stimuli, usually visual images. Data visualization is a general term, 125 | encompassing data from engineering and science, as well as information 126 | from business, finance, sociology, geography, information management, 127 | and other fields. Data visualization also includes elements of data 128 | analysis, such as statistical analysis. Contrast with *scientific 129 | visualization* and *information visualization* . 130 | 131 | **Decimation.** A type of polygon reduction technique that deletes 132 | points in a polygonal mesh that satisfies a co-planar or co-linear 133 | condition and replaces the resulting hole with a new triangulation. 134 | 135 | **Delaunay Triangulation.** A triangulation that satisfies the 136 | Delaunay circumsphere criterion. This criterion states that a 137 | circumsphere of each simplex in the triangulation contains only the 138 | points defining the simplex. 139 | 140 | **Delegation.** The process of assigning an object to handle the 141 | execution of another object's methods. Sometimes it is said that one 142 | object forwards certain methods to another object for execution. 143 | 144 | **Demand-driven.** A method of visualization pipeline update where the 145 | update occurs only when data is requested and occurs only in the 146 | portion of the network required to generate the data. 147 | 148 | **Derived Class.** A class that is more specific or complete than its 149 | superclass. The derived class, which is also known as the subclass, 150 | inherits all the members of its superclass. Usually a derived class 151 | adds new functionality or fills in what was defined by its superclass. 152 | See also *subclass* . 153 | 154 | **Destructor.** A class method that is invoked when an instance of 155 | that class is deleted. Typically the destructor frees memory that the 156 | instance was using. See also *constructor* . 157 | 158 | **Device Mapper.** A mapper that interfaces data to a graphics library 159 | or subsystem. 160 | 161 | **Diffuse Lighting.** Reflected light from a matte surface. Diffuse 162 | lighting is a function of the relative angle between the incoming 163 | light and surface normal of the object. 164 | 165 | **Displacement Plots.** A vector visualization technique that shows 166 | the displacement of the surface of an object. The method generates 167 | scalar values by computing the dot product between the surface normal 168 | and vector displacement of the surface. The scalars are visualized 169 | using color mapping. 170 | 171 | **Display Coordinate System.** A coordinate system that is the result 172 | of mapping the view coordinate system onto the display hardware. 173 | 174 | **Divergence.** In numerical computation: the tendency of computation 175 | to move away from the solution. In fluid flow: the rapid motion of fluid particles away from one 176 | another. 177 | 178 | **Dividing Cubes.** A contour algorithm that represents isosurfaces as 179 | a dense cloud of points. 180 | 181 | **Dolly.** A camera operation that moves the camera position towards ( 182 | 183 | from the camera focal point. 184 | 185 | *dolly in* ) or away ( 186 | 187 | *dolly out* ) 188 | 189 | **Double Buffering.** A display technique that is used to display 190 | animations more smoothly. It consists of using two buffers in the 191 | rendering process. While one buffer is being displayed, the next frame 192 | in the animation is being drawn on the other buffer. Once the drawing 193 | is complete the two buffers are swapped and the new image is 194 | displayed. 195 | 196 | **Dynamic Memory Model.** A data flow network that does not retain 197 | intermediate results as it executes. Each time the network executes, 198 | it must recompute any data required as input to another process 199 | object. A dynamic memory model reduces system memory requirements but 200 | places greater demands on computational requirements. 201 | 202 | **Dynamic Model.** A description of a system concerned with 203 | synchronizing events and objects. 204 | 205 | **Effective Stress.** A mathematical combination of the normal and 206 | shear stress components that provide a measure of the stress at a 207 | point. Effective stress is a scalar value, while stress is represented 208 | with a tensor value. See *stress* . 209 | 210 | **Eigenfields.** Vector fields defined by the eigenvectors of a 211 | tensor. 212 | 213 | **Eigenvalue.** A characteristic value of a matrix. Eigenvalues often 214 | correspond to physical phenomena, such as frequency of vibration or 215 | magnitude of principal components of stress. 216 | 217 | **Eigenvector.** A vector associated with each eigenvalue. The 218 | eigenvector spans the space of the matrix. Eigenvectors are orthogonal 219 | to one another. Eigenvectors often correspond to physical phenomena 220 | such as mode shapes of vibration. 221 | 222 | **Elevation.** A rotation of a camera about the horizontal axis. 223 | 224 | **Entity.** Something within a system that has identity. Chairs, 225 | airplanes, and cameras are things that correspond to physical entities 226 | in the real world. A database and isosurface algorithm are examples of 227 | nonphysical entities. 228 | 229 | **Event-driven.** A method of visualization pipeline update where 230 | updates occur when an event 231 | 232 | affects the pipeline, e.g., when an object instance variable is set or 233 | modified. See also *demand-driven*. 234 | 235 | **Execution.** The process of updating a visualization network. 236 | 237 | **Explicit Execution.** Controlling network updates by performing 238 | explicit dependency analysis. 239 | 240 | **Exporter.** An object that saves a VTK scene definition to a file or 241 | other program. (A scene consists of lights, cameras, actors, geometry, 242 | properties, texture, and other pertinent data.) See also *importer* . 243 | 244 | **Fan-in.** The flow of multiple pieces of data into a single filter. 245 | 246 | **Fan-out.** The flow of data from a filter's output to other objects. 247 | 248 | **Feature Angle.** The angle between surface normal vectors, e.g., the 249 | angle between the normal vectors on two adjacent polygons. 250 | 251 | **Filter.** A process object that takes at least one input and 252 | generates at least one output. 253 | 254 | **Finite Element Method (FEM).** A numerical technique for the 255 | solution of partial differential equations. FEM is based on 256 | discretizing a domain into elements (and nodes) and constructing basis 257 | (or interpolation) functions across the elements. From these functions 258 | a system of linear equations is generated and solved on the computer. 259 | Typical applications include stress, heat transfer, and vibration 260 | analysis. 261 | 262 | **Finite Difference Method.** A numerical technique for the solution 263 | of partial differential equations (PDEs). Finite difference methods 264 | replace the PDEs with truncated Taylor series approximations. This 265 | results in a system of equations that is solved on a computer. Typical 266 | applications include fluid flow, combustion, and heat transfer. 267 | 268 | **Flat Shading.** A shading technique where the lighting equation for 269 | a geometric primitive is calculated once, and then used to fill in 270 | the entire area of the primitive. This is also known as faceted 271 | shading. See also *gouraud shading* and *phong shading* . 272 | 273 | **Functional Model.** The description of a system based on what it 274 | does. 275 | 276 | **Generalization.** The abstraction of a subset of classes to a common 277 | superclass. Generalization extracts the common members or methods from 278 | a group of classes to create a common superclass. See also 279 | *specialization* and *inheritance* . 280 | 281 | **Geometry.** Used generally to mean the characteristic position, 282 | shape, and topology of an object. 283 | 284 | Used specifically (in tandem with topology) to mean the position and 285 | shape of an object. 286 | 287 | **Glyph.** A general visualization technique used to represent data 288 | using a meaningful shape or pictorial representation. Each glyph is 289 | generally a function of its input data and may change size, 290 | orientation, and shape; or modify graphics properties in response to 291 | changes in input. 292 | 293 | **Gouraud Shading.** A shading technique that applies the lighting 294 | equations for a geometric primitive at each vertex. The resulting 295 | colors are then interpolated over the areas between the vertices. See 296 | also *flat shading* and *Phong shading* . 297 | 298 | **Hedgehog.** A vector visualization technique that represents vector 299 | direction and magnitude with oriented lines. 300 | 301 | **Height Field.** A set of altitude or height samples in a rectangular 302 | grid. Height fields are typically used to represent terrain. 303 | 304 | **Hexahedron.** A type of primary 3D cell. The hexahedron looks like a 305 | "brick." It has six faces, 12 edges, and eight vertices. The faces of 306 | the hexahedron are not necessarily planar. 307 | 308 | **Homogeneous Coordinates.** An alternate coordinate representation 309 | that provides more flexibility than traditional Cartesian coordinates. 310 | This includes perspective transformation and combined translation, 311 | scaling, and rotation. 312 | 313 | **Hyperstreamline.** A tensor visualization technique. 314 | Hyperstreamlines are created by treating the eigenvectors as three 315 | separate vectors. The maximum eigenvalue/eigenvector is used as a 316 | vector field in which particle integration is performed (like streamlines). 317 | The other two vectors control the cross-sectional shape of an ellipse 318 | that is swept along the integration path. See also *streampolygon* . 319 | 320 | **Image Data.** A dataset whose structure is both geometrically and 321 | topologically regular. Both geometry and topology are implicit. A 3D 322 | image dataset is known as a volume. A 2D image dataset is known as a 323 | pixmap. 324 | 325 | **Image-Order Techniques.** Rendering techniques that determine for 326 | each pixel in the image plane which data samples contribute to it. 327 | Image-order techniques are implemented using ray casting. Contrast 328 | with *object-order techniques* . 329 | 330 | **Implicit Execution.** Controlling network updates by distributing 331 | network dependency throughout the visualization process objects. Each 332 | process object requests that its input be updated before it executes. 333 | This results in a recursive update/execution process throughout the 334 | network. 335 | 336 | **Implicit Function.** A mathematical function of the form , 337 | whereFxyz(),, c is a constant=. 338 | 339 | **Implicit Modelling.** A modelling technique that represents geometry 340 | as a scalar field. Usually the scalar is a distance function or 341 | implicit function distributed through a volume. 342 | 343 | **Importer.** An object that interfaces to external data or programs 344 | to define a complete scene in VTK. (The scene consists of lights, 345 | cameras, actors, geometry, properties, texture, and other pertinent 346 | data.) See also *exporter* . 347 | 348 | **Information Visualization.** The process of transforming information 349 | into sensory stimuli, usually visual images. Information visualization 350 | is used to describe the process of visualizing data without structure, 351 | such as information on the World Wide Web; or abstract data 352 | structures, like computer file systems or documents. Contrast with 353 | *scientific visualization* and *data visualization* . 354 | 355 | **Inheritance.** A process where the attributes and methods of a 356 | superclass are bestowed upon all sub-classes derived from that 357 | superclass. It is said that the subclasses inherit their superclasses' 358 | methods and attributes. 359 | 360 | **Instance.** An object that is defined by a class and used by a 361 | program or application. There may be many instances of a specific 362 | class. 363 | 364 | **Instance Variable.** A named member of a class that captures a 365 | characteristic of the class. Instance variables have a name, a data 366 | type, and a data value. The phrase, instance variable, is often 367 | abbreviated as ivar. This is the same as an attribute or data member. 368 | 369 | **Intensity.** The light energy transferred per unit time across a 370 | unit plane perpendicular to the light rays. 371 | 372 | **Interpolate.** 373 | 374 | that bracket 375 | 376 | Estimate a value of a function at a point *p*. 377 | 378 | *p*, given known function values and points 379 | 380 | **Interpolation Functions.** Functions continuous in value and 381 | derivatives used to interpolate data from known points and function 382 | values. Cells use interpolation functions to compute data values 383 | interior to or on the boundary of the cell. 384 | 385 | **Interpreted System.** An interpreted system can execute programs 386 | without going through a separate compilation stage. Interpreted 387 | systems often allow the user to interact and modify the program as it 388 | is running. Contrast with *compiled systems* . 389 | 390 | **Irregular Data.** Data in which the relationship of one data item to 391 | the other data items in the dataset is arbitrary. Irregular data is 392 | also known as unstructured data. 393 | 394 | **Iso-parametric.** A form of interpolation in which interpolation for 395 | data values is the same as for the local geometry. Compare with 396 | *sub-parametric* and *super-parametric* . 397 | 398 | **Isosurface.** A surface representing a constant valued scalar 399 | function. See *contouring* . 400 | 401 | **Isovalue.** The scalar value used to generate an isosurface. 402 | 403 | **Jacobian.** A matrix that relates one coordinate system to another. 404 | 405 | **Line.** A cell defined by two points. 406 | 407 | **MRI (Magnetic Resonance Imaging).** A data acquisition technique 408 | based on measuring variation in magnetic field in response to 409 | radio-wave pulses. The data is acquired in a 3D region as a series of 410 | slice planes (i.e., a stack of $n^2$ points). 411 | 412 | **Mapper.** A process object that terminates the visualization 413 | network. It maps input data into graphics libraries (or other 414 | devices) or writes data to disk (or a communication device). 415 | 416 | **Manifold Topology.** A domain is manifold at a point *p* in a 417 | topological space of dimension *n* if the 418 | 419 | neighborhood around *p* is homeomorphic to an *n*-dimensional sphere. 420 | Homeomorphic means that the mapping is one to one without tearing 421 | (i.e., like mapping a rubber sheet from a square to a disk). We 422 | generally refer to an object's topology as manifold if every point in 423 | the object is manifold. Contrast with *nonmanifold topology* . 424 | 425 | **Marching Cubes.** A contouring algorithm to create surfaces of 426 | constant scalar value in 3D. Marching cubes is described for volume 427 | datasets, but has been extended to datasets consisting of other cell 428 | types. 429 | 430 | **Member Function.** A member function is a function or transformation 431 | that can be applied to an object. It is the functional equivalent to a 432 | data member. Member functions define the behavior of an object. 433 | Methods, operations, and member functions are essentially the same. 434 | 435 | **Method.** A function or transformation that can be applied to an 436 | object. Methods define the behavior of an object. Methods, 437 | operations, and member functions are essentially the same. 438 | 439 | **Modal Lines.** Lines on the surface of a vibrating object that 440 | separate regions of positive and negative displacement. 441 | 442 | **Mode Shape.** The motion of an object vibrating at a natural 443 | frequency. See also *eigenvalues* and 444 | 445 | *eigenvectors* . 446 | 447 | **Model Coordinate System.** The coordinate system that a model or 448 | geometric entity is defined in. 449 | 450 | There may be many different model coordinate systems defined for one 451 | scene. 452 | 453 | **Motion Blur.** An artifact of the shutter speed of a camera. Since 454 | the camera's shutter stays open for a finite amount of time, changes 455 | in the scene that occur during that time can result in blurring of the 456 | resulting image. 457 | 458 | **Morph.** A progressive transformation of one object into another. 459 | Generally used to transform images (2D morphing) and in some cases 460 | geometry (3D morphing). 461 | 462 | **Multiple Input.** Process objects that accept more than one input. 463 | 464 | **Multiple Output.** Process objects that generate more than one 465 | output. 466 | 467 | **Multidimensional Visualization.** Visualizing data of four or more 468 | variables. Generally requires a mapping of many dimensions into three 469 | or fewer dimensions so that standard visualization techniques can be 470 | applied. 471 | 472 | **Nonmanifold Topology.** Topology that is not manifold. Examples 473 | include polygonal meshes, where an edge is used by more than two 474 | polygons, or polygons connected to each other at their vertices 475 | (i.e., do not share an edge). Contrast with *manifold topology* . 476 | 477 | **Normal.** A unit vector that indicates perpendicular direction to a 478 | surface. Normals are a common type of data attribute. 479 | 480 | **Object.** An abstraction that models the state and behavior of 481 | entities in a system. Instances and classes are both objects. 482 | 483 | **Object Model.** The description of a system in terms of the 484 | components that make up the system, including the relationship of the 485 | components one to another. 486 | 487 | **Object-Order Techniques.** Rendering techniques that project object 488 | data (e.g., polygons or voxels) onto the image plane. Example 489 | techniques include ordered compositing and splatting. 490 | 491 | **Object-Oriented.** A software development technique that uses 492 | objects to represent the state and behavior of entities in a system. 493 | 494 | **Octree Decomposition.** A technique to decompose a cubical region of 495 | three-dimensional space into smaller cubes. The cubes, or octants, are 496 | related in tree fashion. The root octant is the cubical region. Each 497 | octant may have eight children created by dividing the parent in half 498 | in the x, y, and z directions. 499 | 500 | **Object Factory.** An object used to construct or instantiate other 501 | objects. In VTK, object factories are implemented using the class 502 | method New(). 503 | 504 | **OMT.** *Object Modelling Technique* . An object-oriented design 505 | technique that models software systems with object, dynamic, and 506 | functional diagrams. 507 | 508 | **Operation.** A function or transformation that can be applied to an 509 | object. Operations define the behavior of an object. Methods and 510 | member functions implement operations. 511 | 512 | **Overloading.** Having multiple methods with the same name. Some 513 | methods are overloaded because there are different versions of the 514 | same method. These differences are based on argument types, while the 515 | underlying algorithm remains the same. Contrast with *polymorphic* . 516 | 517 | **Painter's Algorithm.** An object-order rendering technique that 518 | sorts rendering primitives from back to front and then draws them. 519 | 520 | **Parametric Coordinates.** A coordinate system natural to the 521 | geometry of a geometric object. For example, a line may be described 522 | by the single coordinate *s* even though the line may lie in three or 523 | higher dimensions. 524 | 525 | **Parallel Projection.** A mapping of world coordinates into view 526 | coordinates that preserves all parallel lines. In a parallel 527 | projection an object will appear the same size regardless of how far 528 | away it is from the viewer. This is equivalent to having a center of 529 | projection that is infinitely far away. Contrast with *perspective 530 | projection* . 531 | 532 | **Particle Trace.** The trajectory that particles trace over time in 533 | fluid flow. Particle traces are everywhere tangent to the velocity 534 | field. Unlike streamlines, particle lines are time-dependent. 535 | 536 | **Pathline.** The trajectory that a particle follows in fluid flow. 537 | 538 | **Perspective Projection.** A mapping of world coordinates into view 539 | coordinates that roughly approximates a camera lens. Specifically, the 540 | center of projection must be a finite distance from the 541 | 542 | view plane. As a result closer, objects will appear larger than 543 | distant objects. Contrast with *parallel* *projection* . 544 | 545 | **Phong Shading.** A shading technique that applies the lighting 546 | equations for a geometric primitive at each pixel. See also *flat 547 | shading* and *Gouraud shading* . 548 | 549 | **Pitch.** A rotation of a camera's position about the horizontal 550 | axis, centered at its viewpoint. See also *yaw* and *roll*. Contrast 551 | with *elevation* . 552 | 553 | **Pixel.** Short for picture element. Constant valued elements in an 554 | image. In VTK, a two-dimensional cell defined by an ordered list of 555 | four points. 556 | 557 | **Point.** A geometric specification of position in 3D space. 558 | 559 | **Point Attributes.** Data attributes associates with the points of a 560 | dataset. 561 | 562 | **Polygon.** A cell consisting of three or more co-planar points 563 | defining a polygon. The polygon can be concave but without imbedded 564 | loops. 565 | 566 | **Polygonal Data.** A dataset type consisting of arbitrary 567 | combinations of vertices, polyvertices, lines, polylines, polygons, 568 | and triangle strips. Polygonal data is an intermediate data form that 569 | can be easily rendered by graphics libraries, and yet can represent 570 | many types of visualization data. 571 | 572 | **Polygon Reduction.** A family of techniques to reduce the size of 573 | large polygonal meshes. The goal is to reduce the number of polygons, 574 | while preserving a "good" approximation to the original geometry. In 575 | most techniques topology is preserved as well. 576 | 577 | **Polyline.** 578 | 579 | A composite cell consisting of one or more lines. 580 | 581 | **Polymorphic.** Having many forms. Some methods are polymorphic 582 | because the same method in 583 | 584 | different classes may implement a different algorithm. The semantics 585 | of the method are typically 586 | 587 | the same, even though the implementation may differ. Contrast with 588 | *overloading* . 589 | 590 | **Polyvertex.** 591 | 592 | A composite cell consisting of one or more vertices. 593 | 594 | **Primary Cell.** 595 | 596 | A cell that is not defined in terms of other cells. 597 | 598 | **Probing.** Also known as sampling or resampling. A data selection 599 | technique that selects data at a 600 | 601 | set of points. 602 | 603 | **Process Object.** A visualization object that is an abstraction of a 604 | process or algorithm. For example, the isosurfacing algorithm marching cubes is implemented as a process object. See also *data object*. 605 | 606 | **Progressive Mesh.** A representation of a triangle mesh that enables 607 | incremental refinement and 608 | 609 | derefinement. The data representation is compact and is useful for 610 | transmission of 3D triangle 611 | 612 | meshes across a network. See also *polygon reduction* . 613 | 614 | **Properties.** A general term used to describe the rendered 615 | properties of an actor. This includes lighting terms such as ambient, 616 | diffuse, and specular coefficients; color and opacity; shading 617 | techniques such as flat and Gouraud; and the actor's geometric 618 | representation (wireframe, points, or surface). 619 | 620 | **Pyramid.** A type of primary 3D cell. The pyramid has a 621 | quadrilateral base connected to a single apex point. It has five 622 | faces, eight edges, and five vertices. The base face of the pyramid is 623 | not necessarily planar. 624 | 625 | 626 | **Quadric.** A function of the form 627 | 628 | $$ 629 | f(x,y,z) = a_0x^2 + a_1y^2 + a_2z^2 + a_3xy + a_4yz + a_5xz + a_6 x + a_7 y + a_8 z + a_9 630 | $$ 631 | 632 | The quadric equation can represent many useful 3D objects such as spheres, 633 | ellipsoids, cylinders, and cones. 634 | 635 | **Quadratic Edge.** A type of primary 1D cell with a quadratic 636 | interpolation function. The quadratic edge is defined by three points: 637 | two end points and a mid-edge node. 638 | 639 | **Quadratic Triangle.** A type of primary 2D cell with quadratic 640 | interpolation functions. The quadratic triangle is defined by six 641 | points: three corner points and three mid-edge nodes. 642 | 643 | **Quadratic Quadrilateral.** A type of primary 2D cell with quadratic 644 | interpolation functions. The quadratic quadrilateral is defined by 645 | eight points: four corner points and four mid-edge nodes. 646 | 647 | **Quadratic Tetrahedron.** A type of primary 3D cell with quadratic 648 | interpolation functions. The quadratic tetrahedron is defined by ten 649 | points: four corner points and six mid-edge nodes. 650 | 651 | **Quadratic Hexahedron.** A type of primary 3D cell with quadratic 652 | interpolation functions. The quadratic edge is defined by twenty 653 | points: eight corner points and twelve mid-edge nodes. 654 | 655 | **Quadrilateral (Quad).** A type of primary 2D cell. The quadrilateral 656 | is four sided with four vertices. The quadrilateral must be convex. 657 | 658 | **Reader.** A source object that reads a file or files and produces a 659 | data object. 660 | 661 | **Reference Counting.** A memory management technique used to reduce 662 | memory requirements. Portions of memory (in this case objects) may be 663 | referenced by more than one other object. The referenced object keeps 664 | a count of references to it. If the count returns to zero, the object 665 | deletes itself, returning memory back to the system. This technique 666 | avoids making copies of memory. 667 | 668 | **Region of Interest.** A portion of a dataset that the user is 669 | interested in visualizing. Sometimes abbreviated ROI. 670 | 671 | **Regular Data.** Data in which one data item is related (either 672 | geometrically or topologically) to other data items. Also referred to 673 | as structured data. 674 | 675 | **Rendering.** The process of converting object geometry (i.e., 676 | geometric primitives), object properties, and a specification of 677 | lights and camera into an image. The primitives may take many forms 678 | including surface primitives (points, lines, polygons, splines), 679 | implicit functions, or volumes. 680 | 681 | **Resonant Frequency.** A frequency at which an object vibrates. 682 | 683 | **Roll.** A rotation of a camera about its direction of projection. 684 | See also *azimuth* , *elevation* , *pitch*, and *yaw*. 685 | 686 | **Sampling.** Selective acquisition or sampling of data, usually at a 687 | regular interval. See also *probing* . 688 | 689 | **Scalar.** A single value or function value. May also be used to 690 | represent a field of such values. 691 | 692 | **Scalar Range.** The minimum and maximum scalar values of a scalar 693 | field. 694 | 695 | **Scalar Generation.** Creating scalar values from other data such as 696 | vectors or tensors. One example is computing vector norm. 697 | 698 | **Scene.** A complete representation of the components required to 699 | generate an image or animation including lights, cameras, actors. 700 | properties, transformations, geometry, texture, and other pertinent 701 | information. 702 | 703 | **Scene Graph.** A hierarchical, acyclic, directed tree representation 704 | of a scene. The graph order (depth first) controls when objects are 705 | processed by the graphics system. 706 | 707 | **Scientific Visualization.** The process of transforming data into 708 | sensory stimuli, usually visual images. Generally used to denote the 709 | application of visualization to the sciences and engineering. Contrast 710 | with *data visualization* and *information visualization* . 711 | 712 | **Searching.** The process of locating data. Usually the search is 713 | based on spatial criteria such as position or being inside a cell. 714 | 715 | **Segmentation.** Identification and demarcation of tissue types. 716 | Segmentation is generally applied to CT and MRI data to associate soft 717 | tissue with a particular body organ or anatomical structure. 718 | 719 | **Simplex.** The convex combination of *n* independent vectors in 720 | *n*-space forms an *n*-dimensional simplex. Points, lines, triangles, 721 | and tetrahedra are examples of simplices in 0D, 1D, 2D, and 3D. 722 | 723 | **Source.** A process object that produces at least one output. 724 | Contrast with *filter* . 725 | 726 | **Specialization.** The creation of subclasses that are more refined 727 | or specialized than their super-class. See also *generalization* and 728 | *inheritance* . 729 | 730 | **Specular Lighting.** Reflected lighting from a shiny surface. 731 | Specular lighting is a function of the relative angle between the 732 | incoming light, the surface normal of the object, and the view angle 733 | of the observer. 734 | 735 | **Splatting.** A method to distribute data values across a region. The 736 | distribution functions are often based on Gaussian functions. 737 | 738 | **State Diagram.** A diagram that relates states and events. Used to 739 | describe behavior in a software system. 740 | 741 | **Static Memory Model.** A data flow network that retains intermediate 742 | results as it executes. A static memory model minimizes computational 743 | requirements, but places greater demands on memory requirements. 744 | 745 | **Strain.** A nondimensional quantity expressed as the ratio of the 746 | displacement of an object to its length (normal strain), or angular 747 | displacement (shear strain). Strain is a tensor quantity. See also 748 | *stress* . 749 | 750 | **Stress.** A measure of force per unit area. Normal stress is stress 751 | normal to a given surface, and is either compressive (a negative 752 | value) or tensile (a positive value). Shear stress acts tangentially 753 | to a given surface. Stress is related to strain through the linear 754 | proportionality constants (theE modulus of elasticity), (Poisson's 755 | ratio), and (modulusG of elasticity in shear). Stress is a tensor 756 | quantity. See also *strain* . 757 | 758 | **Streakline.** The set of particles that have previously passed 759 | through a particular point. 760 | 761 | **Streamline.** Curves that are everywhere tangent to the velocity 762 | field. A streamline satisfies the integral curve $\frac{\text{d}\overrightarrow{x}}{\text{d}s} = \overrightarrow{v}(x,t')$ at sonme time $t'$. 763 | 764 | **Streampolygon.** A vector and tensor visualization technique that 765 | represents flow with tubes that have polygonal cross sections. The 766 | method is based on integrating through the vector field and then 767 | sweeping a regular polygon along the streamline. The radius, number of 768 | sides, shape, and rotation of the polygon are allowed to change in 769 | response to data values. See also *hyperstreamline* . 770 | 771 | **Streamribbon.** A vector visualization technique that represents 772 | vectors with ribbons that are everywhere tangent to the vector field 773 | 774 | **Streamsurface** . A surface that is everywhere tangent to a vector 775 | field. Can be approximated by generating a series of streamlines along 776 | a curve and connecting the lines with a surface. 777 | 778 | **Streamwise Vorticity.** A measure of the rotation of flow around a 779 | streamline. 780 | 781 | **Structured Data.** Data in which one data item is related (either 782 | geometrically or topologically) to other data items. Also referred to 783 | as regular data. 784 | 785 | **Structured Grid.** A dataset whose structure is topologically 786 | regular but whose geometry is irregular. Geometry is explicit and 787 | topology is implicit. Typically, structured grids consist of 788 | hexahedral cells. 789 | 790 | **Structured Points.** *Preferred term is* Image Data *.* A dataset 791 | whose structure is both geometrically and topologically regular. Both 792 | geometry and topology are implicit. A 3D structured point dataset is 793 | known as a volume. A 2D structured point dataset is known as a pixmap. 794 | 795 | **Subclass.** A class that is more specific or complete than its 796 | superclass. The subclass, which is also known as the derived class, 797 | inherits all the members of its superclass. Usually a subclass will 798 | add some new functionality or fill in what was defined by its 799 | superclass. See also *derived class* . 800 | 801 | **Sub-parametric.** A form of interpolation in which interpolation for 802 | data values is of higher order than that for the local geometry. 803 | Compare with *iso-parametric* and *super-parametric* . 804 | 805 | **Subsampling.** Sampling data at a resolution at less than final 806 | display resolution. 807 | 808 | **Superclass.** A class from which other classes are derived. See also 809 | *base class* . 810 | 811 | **Super-parametric.** A form of interpolation in which interpolation 812 | for data values is of lower order than that for the local geometry. 813 | Compare with *iso-parametric* and *sub-parametric* . 814 | 815 | **Surface Rendering.** Rendering techniques based on geometric surface 816 | primitives such as points, lines, polygons, and splines. Contrast with 817 | *volume rendering* . 818 | 819 | **Swept Surface.** 820 | 821 | The surface that an object creates as it is swept through space. 822 | 823 | **Swept Volume.** 824 | 825 | The volume enclosed by a swept surface. 826 | 827 | **Tcl.** 828 | 829 | An interpreted language developed by John Ousterhout in the early 1980s. 830 | 831 | **Tk.** 832 | 833 | A graphical user-interface toolkit based on Tcl. 834 | 835 | **Tensor.** A mathematical generalization of vectors and matrices. A 836 | tensor of rank *k* can be considered a *k*-dimensional table. Tensor visualization algorithms treat 3 x 3 real symmetric matrix tensors (rank 2 tensors). 837 | 838 | **Tensor Ellipsoid.** A type of glyph used to visualize tensors. The 839 | major, medium, and minor eigenvalues of a tensor define an 840 | ellipsoid. The eigenvalues are used to scale along the axes. 841 | 842 | **Tetrahedron.** A 3D primary cell that is a simplex with four 843 | triangular faces, six edges, and four vertices. 844 | 845 | **Texture Animation.** Rapid application of texture maps to visualize 846 | data. A useful example maps a 1D texture map of varying intensity 847 | along a set of lines to simulate particle flow. 848 | 849 | **Texture Coordinate.** Specification of position within texture map. 850 | Texture coordinates are used to map data from Cartesian system into 2D 851 | or 3D texture map. 852 | 853 | **Texture Map.** A specification of object properties in a canonical 854 | region. These properties are most often intensity, color, and alpha, 855 | or combinations of these. The region is typically a structured array 856 | of data in a pixmap (2D) or in a volume (3D). 857 | 858 | **Texture Mapping.** A rendering technique to add detail to objects 859 | without requiring extensive geometric modelling. One common example 860 | is to paste a picture on the surface of an object. 861 | 862 | **Texture Thresholding.** Using texture mapping to display selected 863 | data. Often makes use of alpha opacity to conceal regions of minimal 864 | interest. 865 | 866 | **Thresholding.** A data selection technique that selects data that 867 | lies within a range of data. Typically scalar thresholding selects 868 | data whose scalar values meet a scalar criterion. 869 | 870 | **Topology.** A subset of the information about the structure of a 871 | dataset. Topology is a set of properties invariant under certain 872 | geometric transformation such as scaling, rotation, and translation. 873 | 874 | **Topological Dimension.** The dimension or number of parametric 875 | coordinates required to address the domain of an object. For example, 876 | a line in 3D space is of topological dimension one because the line 877 | can be parametrized with a single parameter. 878 | 879 | **Transformation Matrix.** A matrix of values used to control the 880 | position, orientation, and scale of objects. 881 | 882 | **Triangle Strip.** A composite 2D cell consisting of triangles. The 883 | triangle strip is an efficient representation scheme for triangles where points $n + 2$ can represent $n$ triangles. 884 | 885 | **Triangle.** A primary 2D cell. The triangle is a simplex with three 886 | edges and three vertices. 887 | 888 | **Triangular Irregular Network (TIN).** An unstructured triangulation 889 | consisting of triangles. Often used to represent terrain data. 890 | 891 | **Triangulation.** A set of nonintersecting simplices sharing common 892 | vertices, edges, and/or faces. 893 | 894 | **Type Converter** . A type of filter used to convert from one dataset 895 | type to another. 896 | 897 | **Type Checking.** The process of enforcing compatibility between 898 | objects. 899 | 900 | **Uniform Grid.** A synonym for image data. 901 | 902 | **Unstructured Data.** Data in which one data item is unrelated 903 | (either geometrically or topologically) to other data items. Also 904 | referred to as irregular data. 905 | 906 | **Unstructured Grid.** A general dataset form consisting of arbitrary 907 | combinations of cells and points. Both the geometry and topology are 908 | explicitly defined. 909 | 910 | **Unstructured Points.** A dataset consisting of vertex cells that are 911 | positioned irregularly in space, with no implicit or explicit 912 | topology. 913 | 914 | **Visualization.** The process of converting data to images (or other 915 | sensory stimuli). Alternatively, the end result of the visualization 916 | process. 917 | 918 | **Vector.** A specification of direction and magnitude. Vectors can be 919 | used to describe fluid velocity, structural displacement, or object 920 | motion. 921 | 922 | **Vector Field Topology.** Vector fields are characterized by regions 923 | flow diverges, converges, and/or rotates. The relationship of these 924 | regions one to another is the topology of the flow. 925 | 926 | **Vertex.** A primary 0D cell. Is sometimes used synonymously with 927 | point or node. 928 | 929 | **View Coordinate System.** The projection of the world coordinate 930 | system into the camera's viewing frustrum. 931 | 932 | **View Frustrum.** The viewing region of a camera defined by six 933 | planes: the front and back clipping planes, and the four sides of a 934 | pyramid defined by the camera position, focal point, and view angle 935 | (or image viewport if viewing in parallel projection). 936 | 937 | **Visual Programming.** A programming model that enables the 938 | construction and manipulation of visualization applications. A typical 939 | implementation is the construction of a visualization pipeline by 940 | connecting execution modules into a network. 941 | 942 | **Visualization Network.** A series of process objects and data 943 | objects joined together into a dataflow network. 944 | 945 | **Volume.** A regular array of points in 3D space. Volumes are often 946 | defined as a series of 2D images arranged along the *z*-axis. 947 | 948 | **Volume Rendering.** The process of directly viewing volume data 949 | without converting the data to intermediate surface primitives. 950 | Contrast with *surface rendering* . 951 | 952 | **Vorticity.** A measure of the rotation of fluid flow. 953 | 954 | **Voxel.** Short for volume element. In VTK, a primary 955 | three-dimensional cell with six faces. Each face is perpendicular to 956 | one of the coordinate axes. 957 | 958 | **Warping.** A scalar and vector visualization technique that distorts 959 | an object to magnify the effects of data value. Warping may be used on 960 | vector data to display displacement or velocity, or on scalar data to 961 | show relative scalar values. 962 | 963 | **Wedge.** A type of primary 3D cell. The wedge has two triangular 964 | faces connected with three quadrilateral faces. It has five faces, 965 | nine edges, and six vertices. The quadrilateral faces of the wedge are 966 | not necessarily planar. 967 | 968 | **World Coordinate System.** A three-dimensional Cartesian coordinate 969 | system in which the main elements of a rendering scene are positioned. 970 | 971 | **Writer.** A type of mapper object that writes data to disk or other 972 | I/O device. 973 | 974 | **Yaw.** A rotation of a camera's position about the vertical axis, 975 | centered at its viewpoint. See also *pitch* and *roll*. Contrast with 976 | *azimuth* . 977 | 978 | **Z-Buffer.** Memory that contains the depth (along the view plane 979 | normal) of a corresponding element in a frame buffer. 980 | 981 | **Z-Buffering.** A technique for performing hidden line (point, 982 | surface) removal by keeping track of the current depth, or *z* value 983 | for each pixel. These values are stored in the *z*-buffer. 984 | 985 | **Zoom.** A camera operation that changes the field of view of the 986 | camera. Contrast with *dolly*. 987 | --------------------------------------------------------------------------------