├── .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 | [](https://book.vtk.org/en/latest/?badge=latest)
6 | [](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 |
16 | Figure NUMBER. Physical generation of an image.
17 |
18 |
19 | Templates for automaticaly created figures
20 |
21 | One figure
22 |
23 |
24 |
25 | Figure NUMBER. Contouring examples. See ONE.cxx and ONE.py.
26 |
27 |
28 | Two figures a,b
29 |
30 |
31 |
32 |
33 | (a)
34 |
35 |
36 |
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 |
47 | (a)
48 |
49 |
50 |
51 | (b)
52 |
53 |
54 |
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 |
65 | (a)
66 |
67 |
68 |
69 | (b)
70 |
71 |
72 |
73 | (c)
74 |
75 |
76 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------