From ab8cc85adde879fb963c94d15675783f2cf4b183 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Tue, 14 Aug 2007 05:14:52 +0000 Subject: Initial population. --- src/hyper/pages/ug07.ht | 3095 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3095 insertions(+) create mode 100644 src/hyper/pages/ug07.ht (limited to 'src/hyper/pages/ug07.ht') diff --git a/src/hyper/pages/ug07.ht b/src/hyper/pages/ug07.ht new file mode 100644 index 00000000..9a9cf528 --- /dev/null +++ b/src/hyper/pages/ug07.ht @@ -0,0 +1,3095 @@ +% Copyright The Numerical Algorithms Group Limited 1992-94. All rights reserved. +% !! DO NOT MODIFY THIS FILE BY HAND !! Created by ht.awk. + +\texht{\setcounter{chapter}{6}}{} % Chapter 7 + +\newcommand{\optArg}[1]{{{\tt [}{#1}{\tt ]}}} +\newcommand{\argDef}[1]{{\tt ({#1})}} +\newcommand{\funSyntax}[2]{\axiomFun{#1}{\tt ({\small\it{#2}})}} +\newcommand{\funArgs}[1]{{\tt ({\small\it {#1}})}\newline} + +% +\newcommand{\ugGraphTitle}{Graphics} +\newcommand{\ugGraphNumber}{7.} +% +% ===================================================================== +\begin{page}{ugGraphPage}{7. Graphics} +% ===================================================================== +\beginscroll + +% + +This chapter shows how to use the \Language{} graphics facilities +%-% \HDindex{graphics}{ugGraphPage}{7.}{Graphics} +under the X Window System. +\Language{} has \twodim{} and \threedim{} drawing and rendering +packages that allow the drawing, coloring, transforming, mapping, +clipping, and combining of graphic output from \Language{} +computations. +This facility is particularly useful for investigating problems in +areas such as topology. +The graphics package is capable of plotting functions of one or +more variables or plotting parametric surfaces and curves. +Various coordinate systems are also available, such as polar and +spherical. + +A graph is displayed in a viewport window and it has a +%-% \HDindex{viewport}{ugGraphPage}{7.}{Graphics} +control-panel that uses interactive mouse commands. +PostScript and other output forms are available so that \Language{} +%-% \HDindex{PostScript}{ugGraphPage}{7.}{Graphics} +images can be printed or used by other programs.\footnote{PostScript +is a trademark of Adobe Systems Incorporated, registered in the United +States.} + +\beginmenu + \menudownlink{{7.1. Two-Dimensional Graphics}}{ugGraphTwoDPage} + \menudownlink{{7.2. Three-Dimensional Graphics}}{ugGraphThreeDPage} +\endmenu +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphTwoDTitle}{Two-Dimensional Graphics} +\newcommand{\ugGraphTwoDNumber}{7.1.} +% +% ===================================================================== +\begin{page}{ugGraphTwoDPage}{7.1. Two-Dimensional Graphics} +% ===================================================================== +\beginscroll +% +The \Language{} \twodim{} graphics package provides the ability to +%-% \HDindex{graphics!two-dimensional}{ugGraphTwoDPage}{7.1.}{Two-Dimensional Graphics} +display +% +\indent{4} +\beginitems +% +\item[-] curves defined by functions of a single real variable +% +\item[-] curves defined by parametric equations +% +\item[-] implicit non-singular curves defined by polynomial equations +% +\item[-] planar graphs generated from lists of point components. +\enditems +\indent{0} +These graphs +can be modified by specifying various options, such as +calculating points in the polar +coordinate system or changing the size of the graph viewport window. + +\beginmenu + \menudownlink{{7.1.1. Plotting Two-Dimensional Functions of One Variable}}{ugGraphTwoDPlotPage} + \menudownlink{{7.1.2. Plotting Two-Dimensional Parametric Plane Curves}}{ugGraphTwoDParPage} + \menudownlink{{7.1.3. Plotting Plane Algebraic Curves}}{ugGraphTwoDPlanePage} + \menudownlink{{7.1.4. Two-Dimensional Options}}{ugGraphTwoDOptionsPage} + \menudownlink{{7.1.5. Color}}{ugGraphColorPage} + \menudownlink{{7.1.6. Palette}}{ugGraphColorPalettePage} + \menudownlink{{7.1.7. Two-Dimensional Control-Panel}}{ugGraphTwoDControlPage} + \menudownlink{{7.1.8. Operations for Two-Dimensional Graphics}}{ugGraphTwoDopsPage} + \menudownlink{{7.1.9. Addendum: Building Two-Dimensional Graphs}}{ugGraphTwoDbuildPage} + \menudownlink{{7.1.10. Addendum: Appending a Graph to a Viewport Window Containing a Graph}}{ugGraphTwoDappendPage} +\endmenu +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphTwoDPlotTitle}{Plotting Two-Dimensional Functions of One Variable} +\newcommand{\ugGraphTwoDPlotNumber}{7.1.1.} +% +% ===================================================================== +\begin{page}{ugGraphTwoDPlotPage}{7.1.1. Plotting Two-Dimensional Functions of One Variable} +% ===================================================================== +\beginscroll + +%-% \HDindex{curve!one variable function}{ugGraphTwoDPlotPage}{7.1.1.}{Plotting Two-Dimensional Functions of One Variable} +The first kind of \twodim{} graph is that of a curve defined by a function +\axiom{y = f(x)} over a finite interval of the \axiom{x} axis. + +% +\beginImportant +The general format for drawing a function defined by a formula +\axiom{f(x)} is: +% +\centerline{{{\tt draw(f(x), x = a..b, {\it options})}}} +where \axiom{a..b} defines the range of \axiom{x}, and where +{\it options} prescribes zero or more options as described in +\downlink{``\ugGraphTwoDOptionsTitle''}{ugGraphTwoDOptionsPage} in Section \ugGraphTwoDOptionsNumber\ignore{ugGraphTwoDOptions}. +An example of an option is \axiom{curveColor == bright red().} +An alternative format involving functions \axiom{f} and \axiom{g} +is also available. +\endImportant + +A simple way to plot a function is to use a formula. +The first argument is the formula. +For the second argument, write the name of the independent variable (here, \axiom{x}), +followed by an \spadSyntax{=}, and the range of values. + +\psXtc{ +Display this formula over the range +\texht{$0 \leq x \leq 6$}{0 <= x <= 6}. +\Language{} converts your formula to a compiled +function so that the results can be computed +quickly and efficiently. +}{ +\graphpaste{draw(sin(tan(x)) - tan(sin(x)),x = 0..6)} +}{ +\epsffile[0 0 295 295]{../ps/2D1VarA.ps} +} + +Notice that \Language{} compiled the function before the graph was put +on the screen. + +\psXtc{ +Here is the same graph on a different interval. +This time we give the graph a title. +}{ +\graphpaste{draw(sin(tan(x)) - tan(sin(x)),x = 10..16)} +}{ +%window was 300 x 300 +\epsffile[0 0 295 295]{../ps/2D1VarB.ps} +} +% +Once again the formula is converted to a compiled function before +any points were computed. +If you want to graph the same function on several intervals, it is +a good idea to define the function first so that the function has +to be compiled only once. +\xtc{ +This time we first define the function. +}{ +\spadpaste{f(x) == (x-1)*(x-2)*(x-3) \bound{f}} +} +\psXtc{ +To draw the function, the first argument is its name +and the second is just the range with no independent variable. +}{ +\graphpaste{draw(f, 0..4) \free{f}} +}{ +\epsffile[0 0 295 295]{../ps/2D1VarD.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphTwoDParTitle}{Plotting Two-Dimensional Parametric Plane Curves} +\newcommand{\ugGraphTwoDParNumber}{7.1.2.} +% +% ===================================================================== +\begin{page}{ugGraphTwoDParPage}{7.1.2. Plotting Two-Dimensional Parametric Plane Curves} +% ===================================================================== +\beginscroll + +The second kind of \twodim{} graph is that of +%-% \HDindex{parametric plane curve}{ugGraphTwoDParPage}{7.1.2.}{Plotting Two-Dimensional Parametric Plane Curves} +curves produced by parametric equations. +%-% \HDindex{curve!parametric plane}{ugGraphTwoDParPage}{7.1.2.}{Plotting Two-Dimensional Parametric Plane Curves} +Let \axiom{x = f(t)} and \axiom{y = g(t)} be formulas or two +functions \axiom{f} and \axiom{g} as the parameter \axiom{t} ranges +over an interval \axiom{[a,b]}. +The function \axiomFun{curve} takes the two functions \axiom{f} and +\axiom{g} as its parameters. + +\beginImportant +The general format for drawing a \twodim{} plane curve defined by +parametric formulas \axiom{x = f(t)} and \axiom{y = g(t)} is: +% +\centerline{{{\tt draw(curve(f(t), g(t)), t = a..b, {\it options})}}} +where \axiom{a..b} defines the range of the independent variable \axiom{t}, +and where {\it options} prescribes zero or more options as +described in \downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. +An example of an option is \axiom{curveColor == bright red().} +\endImportant + +Here's an example: + +\psXtc{ +Define a parametric curve using a range involving +\axiom{\%pi}, \Language{}'s way of saying \texht{$\pi$}{``pi''}. +For parametric curves, \Language{} compiles two +functions, one for each of the functions \axiom{f} and \axiom{g}. +}{ +\graphpaste{draw(curve(sin(t)*sin(2*t)*sin(3*t), sin(4*t)*sin(5*t)*sin(6*t)), t = 0..2*\%pi)} +}{ +\epsffile[0 0 295 295]{../ps/2DppcA.ps} +} +% +% +\psXtc{ +The title may be an arbitrary string and is an +optional argument to the \axiomFun{draw} command. +}{ +\graphpaste{draw(curve(cos(t), sin(t)), t = 0..2*\%pi)} +}{ +\epsffile[0 0 295 295]{../ps/2DppcB.ps} +} +% +If you plan on plotting \axiom{x = f(t)}, \axiom{y = g(t)} as \axiom{t} ranges over +several intervals, you may want to define functions \axiom{f} and \axiom{g} first, so +that they need not be recompiled every time you create a new graph. +Here's an example: +\xtc{ +As before, you can first define the functions you wish to draw. +}{ +\spadpaste{f(t:DFLOAT):DFLOAT == sin(3*t/4) \bound{f}} +} +\xtc{ +\Language{} compiles them to map \axiomType{DoubleFloat} +values to \axiomType{DoubleFloat} values. +}{ +\spadpaste{g(t:DFLOAT):DFLOAT == sin(t) \bound{g}} +} + +\psXtc{ +Give to {\tt curve} the names of the functions, +then write the range without the name of the +independent variable. +}{ +\graphpaste{draw(curve(f,g),0..\%pi) \free{f g}} +}{ +\epsffile[0 0 295 295]{../ps/2DppcC.ps} +} +% +% +\psXtc{ +Here is another look at the same curve but over a different +range. Notice that \axiom{f} and \axiom{g} are not recompiled. +Also note that \Language{} provides a default title based on +the first function specified in \axiomFun{curve}. +}{ +\graphpaste{draw(curve(f,g),-4*\%pi..4*\%pi) \free{f g}} +}{ +\epsffile[0 0 295 295]{../ps/2DppcE.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphTwoDPlaneTitle}{Plotting Plane Algebraic Curves} +\newcommand{\ugGraphTwoDPlaneNumber}{7.1.3.} +% +% ===================================================================== +\begin{page}{ugGraphTwoDPlanePage}{7.1.3. Plotting Plane Algebraic Curves} +% ===================================================================== +\beginscroll + +A third kind of \twodim{} graph is a non-singular ``solution curve'' +%-% \HDindex{curve!plane algebraic}{ugGraphTwoDPlanePage}{7.1.3.}{Plotting Plane Algebraic Curves} +in a rectangular region of the plane. +A solution curve is a curve defined by a polynomial equation +\axiom{p(x,y) = 0}. +%-% \HDindex{plane algebraic curve}{ugGraphTwoDPlanePage}{7.1.3.}{Plotting Plane Algebraic Curves} +Non-singular means that the curve is ``smooth'' in that it does not +cross itself or come to a point (cusp). +Algebraically, this means that for any point \axiom{(x,y)} on the curve, +that is, a point such that \axiom{p(x,y) = 0}, the partial derivatives +\texht{${{\partial p}\over{\partial x}}(x,y)$ and +${{\partial p}\over{\partial y}}(x,y)$}{\axiom{dp/dx(x,y)} +and \axiom{dp/dy(a,b)}} +are not both zero. +%-% \HDindex{curve!smooth}{ugGraphTwoDPlanePage}{7.1.3.}{Plotting Plane Algebraic Curves} +%-% \HDindex{curve!non-singular}{ugGraphTwoDPlanePage}{7.1.3.}{Plotting Plane Algebraic Curves} +%-% \HDindex{smooth curve}{ugGraphTwoDPlanePage}{7.1.3.}{Plotting Plane Algebraic Curves} +%-% \HDindex{non-singular curve}{ugGraphTwoDPlanePage}{7.1.3.}{Plotting Plane Algebraic Curves} + +% +\beginImportant +The general format for drawing a non-singular solution curve +given by a polynomial of the form \axiom{p(x,y) = 0} is: +% +\centerline{{{\tt draw(p(x,y) = 0, x, y, range == [a..b, c..d], {\it options})}}} +where the second and third arguments name the first and second +independent variables of \axiom{p}. +A {\tt range} option is always given to designate a bounding +rectangular region of the plane \texht{$a \leq x \leq b, c \leq y +\leq d$}{a <= x <= b, c <= y <= d}. +Zero or more additional options as described in +\downlink{``\ugGraphTwoDOptionsTitle''}{ugGraphTwoDOptionsPage} in Section \ugGraphTwoDOptionsNumber\ignore{ugGraphTwoDOptions} may be given. +\endImportant + +\xtc{ +We require that the polynomial has rational or integral coefficients. +Here is an algebraic curve example (``Cartesian ovals''): +%-% \HDindex{Cartesian!ovals}{ugGraphTwoDPlanePage}{7.1.3.}{Plotting Plane Algebraic Curves} +}{ +\spadpaste{p := ((x**2 + y**2 + 1) - 8*x)**2 - (8*(x**2 + y**2 + 1)-4*x-1) \bound{p}} +} + +\psXtc{ +The first argument is always expressed as an equation of the form \axiom{p = 0} +where \axiom{p} is a polynomial. +}{ +\graphpaste{draw(p = 0, x, y, range == [-1..11, -7..7]) \free{p}} +}{ +\epsffile[0 0 295 295]{../ps/2DpacA.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphTwoDOptionsTitle}{Two-Dimensional Options} +\newcommand{\ugGraphTwoDOptionsNumber}{7.1.4.} +% +% ===================================================================== +\begin{page}{ugGraphTwoDOptionsPage}{7.1.4. Two-Dimensional Options} +% ===================================================================== +\beginscroll + +The \axiomFun{draw} commands take an optional list of options, +such as {\tt title} shown above. +Each option is given by the syntax: {\it name} {\tt ==} {\it value}. +Here is a list of the available options in the order that they are +described below. + +\table{ {adaptive} {clip} {unit} {clip} {curveColor} {range} +{toScale} {pointColor} {coordinates}} + +The \axiom{adaptive} option turns adaptive plotting on or off. +%-% \HDindex{adaptive plotting}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +Adaptive plotting uses an algorithm that traverses a graph and computes +more points for those parts of the graph with high curvature. +The higher the curvature of a region is, the more points the algorithm +computes. +%-% \HDindex{graphics!2D options!adaptive}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +% +% +\psXtc{ +The {\tt adaptive} option is normally on. +Here we turn it off. +}{ +\graphpaste{draw(sin(1/x),x=-2*\%pi..2*\%pi, adaptive == false)} +}{ +\epsffile[0 0 295 295]{../ps/2DOptAd.ps} +} +% +% +\psXtc{ +The {\tt clip} option turns clipping on or off. +%-% \HDindex{graphics!2D options!clipping}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +If on, large values are cut off according to +\axiomFunFrom{clipPointsDefault}{GraphicsDefaults}. +}{ +\graphpaste{draw(tan(x),x=-2*\%pi..2*\%pi, clip == true)} +}{ +\epsffile[0 0 295 295]{../ps/2DOptCp.ps} +} +% +% +\psXtc{ +Option {\tt toScale} does plotting to scale if {\tt true} or uses +the entire viewport if {\tt false}. +The default can be determined using +\axiomFunFrom{drawToScale}{GraphicsDefaults}. +%-% \HDindex{graphics!2D options!to scale}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +}{ +\graphpaste{draw(sin(x),x=-\%pi..\%pi, toScale == true, unit == [1.0,1.0])} +}{ +\epsffile[0 0 295 295]{../ps/2DOptSc.ps} +} +% +% +\psXtc{ +Option {\tt clip} with a range sets point clipping of a graph within the +%-% \HDindex{graphics!2D options!clip in a range}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +ranges specified in the list \axiom{[x range,y range]}. +%-% \HDindex{clipping}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +If only one range is specified, clipping applies to the y-axis. +}{ +\graphpaste{draw(sec(x),x=-2*\%pi..2*\%pi, clip == [-2*\%pi..2*\%pi,-\%pi..\%pi], unit == [1.0,1.0])} +}{ +\epsffile[0 0 295 295]{../ps/2DOptCpR.ps} +} +% +\psXtc{ +Option {\tt curveColor} sets the color of the graph curves or lines to be the +%-% \HDindex{graphics!2D options!curve color}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +indicated palette color +%-% \HDindex{curve!color}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +(see \downlink{``\ugGraphColorTitle''}{ugGraphColorPage} in Section \ugGraphColorNumber\ignore{ugGraphColor} and \downlink{``\ugGraphColorPaletteTitle''}{ugGraphColorPalettePage} in Section \ugGraphColorPaletteNumber\ignore{ugGraphColorPalette}). +%-% \HDindex{color!curve}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +}{ +\graphpaste{draw(sin(x),x=-\%pi..\%pi, curveColor == bright red())} +}{ +\epsffile[0 0 295 295]{../ps/2DOptCvC.ps} +} +% +\psXtc{ +Option {\tt pointColor} +sets the color of the graph points to the indicated +%-% \HDindex{graphics!2D options!point color}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +palette color +(see \downlink{``\ugGraphColorTitle''}{ugGraphColorPage} in Section \ugGraphColorNumber\ignore{ugGraphColor} and \downlink{``\ugGraphColorPaletteTitle''}{ugGraphColorPalettePage} in Section \ugGraphColorPaletteNumber\ignore{ugGraphColorPalette}). +%-% \HDindex{color!point}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +}{ +\graphpaste{draw(sin(x),x=-\%pi..\%pi, pointColor == pastel yellow())} +}{ +\epsffile[0 0 295 295]{../ps/2DOptPtC.ps} +} +% +\psXtc{ +Option {\tt unit} sets the intervals at which the axis units are plotted +%-% \HDindex{graphics!2D options!set units}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +according to the indicated steps [\axiom{x} interval, \axiom{y} interval]. +}{ +\graphpaste{draw(curve(9*sin(3*t/4),8*sin(t)), t = -4*\%pi..4*\%pi, unit == [2.0,1.0])} +}{ +\epsffile[0 0 295 295]{../ps/2DOptUt.ps} +} +% +% +\psXtc{ +Option {\tt range} sets the range of variables in a graph to be +within the ranges +%-% \HDindex{graphics!2D options!range}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +for solving plane algebraic curve plots. +}{ +\graphpaste{draw(y**2 + y - (x**3 - x) = 0, x, y, range == [-2..2,-2..1], unit==[1.0,1.0])} +}{ +\epsffile[0 0 295 295]{../ps/2DOptRgA.ps} +} +% +% +\psXtc{ +A second example of a solution plot. +}{ +\graphpaste{draw(x**2 + y**2 = 1, x, y, range == [-3/2..3/2,-3/2..3/2], unit==[0.5,0.5])} +}{ +\epsffile[0 0 295 295]{../ps/2DOptRgB.ps} +} +% +% +\psXtc{ +Option \axiom{coordinates} indicates the coordinate system +in which the graph +%-% \HDindex{graphics!2D options!coordinates}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +is plotted. +The default is to use the Cartesian coordinate system. +%-% \HDindex{Cartesian!coordinate system}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +For more details, see \downlink{``\ugGraphCoordTitle''}{ugGraphCoordPage} in Section \ugGraphCoordNumber\ignore{ugGraphCoord} \texht{.}{or +\axiomType{CoordinateSystems}.} +%-% \HDindex{coordinate system!Cartesian}{ugGraphTwoDOptionsPage}{7.1.4.}{Two-Dimensional Options} +}{ +\graphpaste{draw(curve(sin(5*t),t),t=0..2*\%pi, coordinates == polar)} +}{ +\epsffile[0 0 295 295]{../ps/2DOptPlr.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphColorTitle}{Color} +\newcommand{\ugGraphColorNumber}{7.1.5.} +% +% ===================================================================== +\begin{page}{ugGraphColorPage}{7.1.5. Color} +% ===================================================================== +\beginscroll + +The domain \axiomType{Color} +%-% \HDexptypeindex{Color}{ugGraphColorPage}{7.1.5.}{Color} +provides operations for manipulating +%-% \HDindex{graphics!color}{ugGraphColorPage}{7.1.5.}{Color} +colors in \twodim{} graphs. +%-% \HDindex{color}{ugGraphColorPage}{7.1.5.}{Color} +Colors are objects of \axiomType{Color}. +Each color has a {\it hue} and a {\it weight}. +%-% \HDindex{hue}{ugGraphColorPage}{7.1.5.}{Color} +Hues are represented by integers that range from \axiom{1} to the +\axiomFunFrom{numberOfHues()}{Color}, normally +%-% \HDindex{graphics!color!number of hues}{ugGraphColorPage}{7.1.5.}{Color} +\axiom{27}. +%\footnote{Use \axiomFun{colorDef} to +%change these values to any range you want for a given \threedim{} viewport} +%-% \HDindex{weight}{ugGraphColorPage}{7.1.5.}{Color} +Weights are floats and have the value \axiom{1.0} by default. +% +\indent{0} +\beginitems +% +\item[\axiomFun{color}]\funArgs{integer} +creates a color of hue {\it integer} and weight \axiom{1.0}. +% +\item[\axiomFun{hue}]\funArgs{color} +returns the hue of {\it color} as an integer. +%-% \HDindex{graphics!color!hue function}{ugGraphColorPage}{7.1.5.}{Color} +% +\item[\axiomFun{red}]\funArgs{}, +\funSyntax{blue}{}, +\funSyntax{green}{}, and \funSyntax{yellow}{} +%-% \HDindex{graphics!color!primary color functions}{ugGraphColorPage}{7.1.5.}{Color} +create colors of that hue with weight \axiom{1.0}. +% +\item[\subscriptIt{color}{1} {\tt +} \subscriptIt{color}{2}] returns the +color that results from additively combining the indicated +\subscriptIt{color}{1} and \subscriptIt{color}{2}. +Color addition is not commutative: changing the order of the arguments +produces different results. +% +\item[{\it integer} {\tt *} {\it color}] +changes the weight of {\it color} by {\it integer} +without affecting its hue. +%-% \HDindex{graphics!color!multiply function}{ugGraphColorPage}{7.1.5.}{Color} +For example, +\axiom{red() + 3*yellow()} produces a color closer to yellow than to red. +Color multiplication is not associative: changing the order of grouping +%-% \HDindex{color!multiplication}{ugGraphColorPage}{7.1.5.}{Color} +produces different results. +\enditems +\indent{0} +% +\psXtc{ +These functions can be used to change the point and curve colors +for two- and \threedim{} graphs. +Use the {\tt pointColor} option for points. +}{ +\graphpaste{draw(x**2,x=-1..1,pointColor == green())} +}{ +\epsffile[0 0 295 295]{../ps/23DColA.ps} +} +% +\psXtc{ +Use the {\tt curveColor} option for curves. +}{ +\graphpaste{draw(x**2,x=-1..1,curveColor == color(13) + 2*blue())} +}{ +\epsffile[0 0 295 295]{../ps/23DColB.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphColorPaletteTitle}{Palette} +\newcommand{\ugGraphColorPaletteNumber}{7.1.6.} +% +% ===================================================================== +\begin{page}{ugGraphColorPalettePage}{7.1.6. Palette} +% ===================================================================== +\beginscroll +%-% \HDindex{graphics!palette}{ugGraphColorPalettePage}{7.1.6.}{Palette} + +Domain \axiomType{Palette} is the domain of shades of colors: +\axiomFun{dark}, \axiomFun{dim}, \axiomFun{bright}, \axiomFun{pastel}, and \axiomFun{light}, +designated by the integers \axiom{1} through \axiom{5}, respectively. +%-% \HDexptypeindex{Palette}{ugGraphColorPalettePage}{7.1.6.}{Palette} +\xtc{ +Colors are normally ``bright.'' +}{ +\spadpaste{shade red()} +} +\xtc{ +To change the shade of a color, apply the name of a shade to it. +%-% \HDindex{color!shade}{ugGraphColorPalettePage}{7.1.6.}{Palette} +%-% \HDindex{shade}{ugGraphColorPalettePage}{7.1.6.}{Palette} +}{ +\spadpaste{myFavoriteColor := dark blue() \bound{mfc}} +} +\xtc{ +The expression \axiom{shade(color)} +returns the value of a shade of \axiom{color}. +}{ +\spadpaste{shade myFavoriteColor \free{mfc}} +} +\xtc{ +The expression \axiom{hue(color)} returns its hue. +}{ +\spadpaste{hue myFavoriteColor \free{mfc}} +} +\psXtc{ +Palettes can be used in specifying colors in \twodim{} graphs. +}{ +\graphpaste{draw(x**2,x=-1..1,curveColor == dark blue())} +}{ +\epsffile[0 0 295 295]{../ps/23DPal.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphTwoDControlTitle}{Two-Dimensional Control-Panel} +\newcommand{\ugGraphTwoDControlNumber}{7.1.7.} +% +% ===================================================================== +\begin{page}{ugGraphTwoDControlPage}{7.1.7. Two-Dimensional Control-Panel} +% ===================================================================== +\beginscroll +%-% \HDindex{graphics!2D control-panel}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +Once you have created a viewport, move your mouse to the viewport and click +with your left mouse button to display a control-panel. +The panel is displayed on the side of the viewport closest to +where you clicked. Each of the buttons which toggle on and off show the +current state of the graph. + + +\subsubsection{Transformations} +%-% \HDindex{graphics!2D control-panel!transformations}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} + +Object transformations are executed from the control-panel by mouse-activated +potentiometer windows. +% +\indent{0} +\beginitems +% +\item[Scale:] To scale a graph, click on a mouse button +%-% \HDindex{graphics!2D control-panel!scale}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +within the {\bf Scale} window in the upper left corner of the control-panel. +The axes along which the scaling is to occur are indicated by setting the +toggles above the arrow. +With {\tt X On} and {\tt Y On} appearing, both axes are selected and scaling +is uniform. +If either is not selected, for example, if {\tt X Off} appears, scaling is +non-uniform. +% +\item[Translate:] To translate a graph, click the mouse in the +%-% \HDindex{graphics!2D control-panel!translate}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +{\bf Translate} window in the direction you wish the graph to move. +This window is located in the upper right corner of the control-panel. +Along the top of the {\bf Translate} window are two buttons for selecting +the direction of translation. +Translation along both coordinate axes results when {\tt X On} and {\tt Y +On} appear or along one axis when one is on, for example, {\tt X On} and +{\tt Y Off} appear. +\enditems +\indent{0} + +\subsubsection{Messages} +%-% \HDindex{graphics!2D control-panel!messages}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} + +The window directly below the transformation potentiometer windows is +used to display system messages relating to the viewport and the control-panel. +The following format is displayed: \newline +% +\centerline{{[scaleX, scaleY] \axiom{>}graph\axiom{<} [translateX, translateY] \newline}} +The two values to the left show the scale factor along the {\tt X} and +{\tt Y} coordinate axes. The two values to the right show the distance of +translation from the center in the {\tt X} and {\tt Y} directions. The number +in the center shows which graph in the viewport this data pertains to. +When multiple graphs exist in the same viewport, +the graph must be selected (see ``Multiple Graphs,'' below) in +order for its transformation data to be shown, otherwise the number +is 1. + +\subsubsection{Multiple Graphs} + +%-% \HDindex{graphics!2D control-panel!multiple graphs}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +The {\bf Graphs} window contains buttons that allow the placement +of \twodim{} graphs into one of nine available slots in any other +\twodim{} viewport. +In the center of the window are numeral buttons from one to nine +that show whether a graph is displayed in the viewport. +Below each number button is a button showing whether a graph +that is present is selected for application of some +transformation. +When the caret symbol is displayed, then the graph in that slot +will be manipulated. +Initially, the graph for which the viewport is created occupies +the first slot, is displayed, and is selected. +% +% +\indent{0} +\beginitems +% +\item[Clear:] The {\bf Clear} button deselects every viewport graph slot. +%-% \HDindex{graphics!2D control-panel!clear}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +A graph slot is reselected by selecting the button below its number. +% +\item[Query:] The {\bf Query} button is used to display the scale and +%-% \HDindex{graphics!2D control-panel!query}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +translate data for the indicated graph. When this button is selected the +message ``Click on the graph to query'' appears. Select a slot +number button from the {\bf Graphs} window. The scaling factor and translation +offset of the graph are then displayed in the message window. +% +\item[Pick:] The {\bf Pick} button is used to select a graph +%-% \HDindex{graphics!2D control-panel!pick}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +to be placed or dropped into the indicated viewport. When this button is +selected, the message ``Click on the graph to pick'' appears. +Click on the slot with the graph number of the desired +graph. The graph information is held waiting for +you to execute a {\bf Drop} in some other graph. +% +\item[Drop:] Once a graph has been picked up using the {\bf Pick} button, +%-% \HDindex{graphics!2D control-panel!drop}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +the {\bf Drop} button places it into a new viewport slot. +The message ``Click on the graph to drop'' appears in the message +window when the {\bf Drop} button is selected. +By selecting one of the slot number buttons in the {\bf Graphs} +window, the graph currently being held is dropped into this slot +and displayed. +\enditems +\indent{0} + +\subsubsection{Buttons} +%-% \HDindex{graphics!2D control-panel!buttons}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} + +% +\indent{0} +\beginitems +% +\item[Axes] turns the coordinate axes on or off. +%-% \HDindex{graphics!2D control-panel!axes}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +% +\item[Units] turns the units along the {\tt x} +and {\tt y} axis on or off. +%-% \HDindex{graphics!2D control-panel!units}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +% +\item[Box] encloses the area of the viewport graph +in a bounding box, or removes the box if already enclosed. +%-% \HDindex{graphics!2D control-panel!box}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +% +\item[Pts] turns on or off the display of points. +%-% \HDindex{graphics!2D control-panel!points}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +% +\item[Lines] turns on or off the display +of lines connecting points. +%-% \HDindex{graphics!2D control-panel!lines}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +% +\item[PS] writes the current viewport contents to +%-% \HDindex{graphics!2D control-panel!ps}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +a file {\bf axiom2D.ps} or to a name specified in the user's {\bf +%-% \HDindex{graphics!.Xdefaults!PostScript file name}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +.Xdefaults} file. +%-% \HDindex{file!.Xdefaults @{\bf .Xdefaults}}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +The file is placed in the directory from which \Language{} or the {\bf +viewAlone} program was invoked. +%-% \HDindex{PostScript}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +% +\item[Reset] resets the object transformation +characteristics and attributes back to their initial states. +%-% \HDindex{graphics!2D control-panel!reset}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +% +\item[Hide] makes the control-panel disappear. +%-% \HDindex{graphics!2D control-panel!hide}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +% +\item[Quit] queries whether the current viewport +%-% \HDindex{graphics!2D control-panel!quit}{ugGraphTwoDControlPage}{7.1.7.}{Two-Dimensional Control-Panel} +session should be terminated. +\enditems +\indent{0} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphTwoDopsTitle}{Operations for Two-Dimensional Graphics} +\newcommand{\ugGraphTwoDopsNumber}{7.1.8.} +% +% ===================================================================== +\begin{page}{ugGraphTwoDopsPage}{7.1.8. Operations for Two-Dimensional Graphics} +% ===================================================================== +\beginscroll + +Here is a summary of useful \Language{} operations for \twodim{} +graphics. +Each operation name is followed by a list of arguments. +Each argument is written as a variable informally named according +to the type of the argument (for example, {\it integer}). +If appropriate, a default value for an argument is given in +parentheses immediately following the name. + +% +\texht{\bgroup\hbadness = 10001\sloppy}{} +\indent{0} +\beginitems +% +\item[\axiomFun{adaptive}]\funArgs{\optArg{boolean\argDef{true}}} +%-% \HDindex{adaptive plotting}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +sets or indicates whether graphs are plotted +%-% \HDindex{graphics!set 2D defaults!adaptive}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +according to the adaptive refinement algorithm. +% +\item[\axiomFun{axesColorDefault}]\funArgs{\optArg{color\argDef{dark blue()}}} +sets or indicates the default color of the +%-% \HDindex{graphics!set 2D defaults!axes color}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +axes in a \twodim{} graph viewport. +% +\item[\axiomFun{clipPointsDefault}]\funArgs{\optArg{boolean\argDef{false}}} +sets or +indicates whether point clipping is +%-% \HDindex{graphics!set 2D defaults!clip points}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +to be applied as the default for graph plots. +% +\item[\axiomFun{drawToScale}]\funArgs{\optArg{boolean\argDef{false}}} +sets or +indicates whether the plot of a graph +%-% \HDindex{graphics!set 2D defaults!to scale}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +is ``to scale'' or uses the entire viewport space as the default. +% +\item[\axiomFun{lineColorDefault}]\funArgs{\optArg{color\argDef{pastel yellow()}}} +sets or indicates the default color of the +%-% \HDindex{graphics!set 2D defaults!line color}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +lines or curves in a \twodim{} graph viewport. +% +\item[\axiomFun{maxPoints}]\funArgs{\optArg{integer\argDef{500}}} +sets or indicates +the default maximum number of +%-% \HDindex{graphics!set 2D defaults!max points}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +possible points to be used when constructing a \twodim{} graph. +% +\item[\axiomFun{minPoints}]\funArgs{\optArg{integer\argDef{21}}} +sets or indicates the default minimum number of +%-% \HDindex{graphics!set 2D defaults!min points}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +possible points to be used when constructing a \twodim{} graph. +% +\item[\axiomFun{pointColorDefault}]\funArgs{\optArg{color\argDef{bright red()}}} +sets or indicates the default color of the +%-% \HDindex{graphics!set 2D defaults!point color}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +points in a \twodim{} graph viewport. +% +\item[\axiomFun{pointSizeDefault}]\funArgs{\optArg{integer\argDef{5}}} +sets or indicates the default size of the +%-% \HDindex{graphics!set 2D defaults!point size}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +dot used to plot points in a \twodim{} graph. +% +\item[\axiomFun{screenResolution}]\funArgs{\optArg{integer\argDef{600}}} +sets or indicates the default screen +%-% \HDindex{graphics!set 2D defaults!screen resolution}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +resolution constant used in setting the computation limit of adaptively +%-% \HDindex{adaptive plotting}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +generated curve plots. +% +\item[\axiomFun{unitsColorDefault}]\funArgs{\optArg{color\argDef{dim green()}}} +sets or indicates the default color of the +%-% \HDindex{graphics!set 2D defaults!units color}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +unit labels in a \twodim{} graph viewport. +% +\item[\axiomFun{viewDefaults}]\funArgs{} +resets the default settings for the following +%-% \HDindex{graphics!set 2D defaults!reset viewport}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +attributes: point color, line color, axes color, units color, point size, +viewport upper left-hand corner position, and the viewport size. +% +\item[\axiomFun{viewPosDefault}]\funArgs{\optArg{list\argDef{[100,100]}}} +sets or indicates the default position of the +%-% \HDindex{graphics!set 2D defaults!viewport position}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +upper left-hand corner of a \twodim{} viewport, relative to the +display root window. +The upper left-hand corner of the display is considered to be at the +(0, 0) position. +% +\item[\axiomFun{viewSizeDefault}]\funArgs{\optArg{list\argDef{[200,200]}}} +sets or +indicates the default size in which two +%-% \HDindex{graphics!set 2D defaults!viewport size}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +dimensional viewport windows are shown. +It is defined by a width and then a height. +% +\item[\axiomFun{viewWriteAvailable}]\funArgs{\optArg{list\argDef{["pixmap", +"bitmap", "postscript", \"image"}}} +indicates the possible file types +%-% \HDindex{graphics!2D defaults!available viewport writes}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +that can be created with the \axiomFunFrom{write}{TwoDimensionalViewport} function. +% +\item[\axiomFun{viewWriteDefault}] +\funArgs{\optArg{list\argDef{[]}}} +sets or indicates the default types of files, in +%-% \HDindex{graphics!set 2D defaults!write viewport}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +addition to the {\bf data} file, that are created when a +\axiomFun{write} function is executed on a viewport. +% +\item[\axiomFun{units}]\funArgs{viewport, integer\argDef{1}, string\argDef{"off"}} +turns the units on or off for the graph with index {\it integer}. +% +\item[\axiomFun{axes}]\funArgs{viewport, integer\argDef{1}, string\argDef{"on"}} +turns the axes on +%-% \HDindex{graphics!2D commands!axes}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +or off for the graph with index {\it integer}. +% +\item[\axiomFun{close}]\funArgs{viewport} +closes {\it viewport}. +%-% \HDindex{graphics!2D commands!close}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +% +\item[\axiomFun{connect}]\funArgs{viewport, integer\argDef{1}, string\argDef{"on"}} +declares whether lines +%-% \HDindex{graphics!2D commands!connect}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +connecting the points are displayed or not. +% +\item[\axiomFun{controlPanel}]\funArgs{viewport, string\argDef{"off"}} +declares +whether the \twodim{} control-panel is automatically displayed +or not. +% +\item[\axiomFun{graphs}]\funArgs{viewport} +returns a list +%-% \HDindex{graphics!2D commands!graphs}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +describing the state of each graph. +If the graph state is not being used this is shown by {\tt "undefined"}, +otherwise a description of the graph's contents is shown. +% +\item[\axiomFun{graphStates}]\funArgs{viewport} +displays +%-% \HDindex{graphics!2D commands!state of graphs}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +a list of all the graph states available for {\it viewport}, giving the +values for every property. +% +\item[\axiomFun{key}]\funArgs{viewport} +returns the process +%-% \HDindex{graphics!2D commands!key}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +ID number for {\it viewport}. +% +\item[\axiomFun{move}]\funArgs{viewport, +\subscriptText{integer}{x}(viewPosDefault), +\subscriptText{integer}{y}(viewPosDefault)} +moves {\it viewport} on the screen so that the +%-% \HDindex{graphics!2D commands!move}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +upper left-hand corner of {\it viewport} is at the position {\it (x,y)}. +% +\item[\axiomFun{options}]\funArgs{\it viewport} +returns a list +%-% \HDindex{graphics!2D commands!options}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +of all the \axiomType{DrawOption}s used by {\it viewport}. +% +\item[\axiomFun{points}]\funArgs{viewport, integer\argDef{1}, string\argDef{"on"}} +specifies whether the graph points for graph {\it integer} are +%-% \HDindex{graphics!2D commands!points}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +to be displayed or not. +% +\item[\axiomFun{region}]\funArgs{viewport, integer\argDef{1}, string\argDef{"off"}} +declares whether graph {\it integer} is or is not to be displayed +with a bounding rectangle. +% +\item[\axiomFun{reset}]\funArgs{viewport} +resets all the properties of {\it viewport}. +% +\item[\axiomFun{resize}]\funArgs{viewport, +\subscriptText{integer}{width}, \subscriptText{integer}{height}} +%-% \HDindex{graphics!2D commands!resize}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +resizes {\it viewport} with a new {\it width} and {\it height}. +% +\item[\axiomFun{scale}]\funArgs{viewport, \subscriptText{integer}{n}\argDef{1}, +\subscriptText{integer}{x}\argDef{0.9}, \subscriptText{integer}{y}\argDef{0.9}} +scales values for the +%-% \HDindex{graphics!2D commands!scale}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +{\it x} and {\it y} coordinates of graph {\it n}. +% +\item[\axiomFun{show}]\funArgs{viewport, \subscriptText{integer}{n}\argDef{1}, +string\argDef{"on"}} +indicates if graph {\it n} is shown or not. +% +\item[\axiomFun{title}]\funArgs{viewport, string\argDef{"Axiom 2D"}} +designates the title for {\it viewport}. +% +\item[\axiomFun{translate}]\funArgs{viewport, +\subscriptText{integer}{n}\argDef{1}, +\subscriptText{float}{x}\argDef{0.0}, \subscriptText{float}{y}\argDef{0.0}} +%-% \HDindex{graphics!2D commands!translate}{ugGraphTwoDopsPage}{7.1.8.}{Operations for Two-Dimensional Graphics} +causes graph {\it n} to be moved {\it x} and {\it y} units in the respective directions. +% +\item[\axiomFun{write}]\funArgs{viewport, \subscriptText{string}{directory}, +\optArg{strings}} +if no third argument is given, writes the {\bf data} file onto the directory +with extension {\bf data}. +The third argument can be a single string or a list of strings with some or +all the entries {\tt "pixmap"}, {\tt "bitmap"}, {\tt "postscript"}, and +{\tt "image"}. +\enditems +\indent{0} +\texht{\egroup}{} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphTwoDbuildTitle}{Addendum: Building Two-Dimensional Graphs} +\newcommand{\ugGraphTwoDbuildNumber}{7.1.9.} +% +% ===================================================================== +\begin{page}{ugGraphTwoDbuildPage}{7.1.9. Addendum: Building Two-Dimensional Graphs} +% ===================================================================== +\beginscroll + +In this section we demonstrate how to create \twodim{} graphs from +lists of points and give an example showing how to read the lists +of points from a file. + +\subsubsection{Creating a Two-Dimensional Viewport from a List of Points} + +\Language{} creates lists of points in a \twodim{} viewport by utilizing +the \axiomType{GraphImage} and \axiomType{TwoDimensionalViewport} domains. +In this example, the \axiomFunFrom{makeGraphImage}{GraphImage} +function takes a list of lists of points parameter, a list of colors for +each point in the graph, a list of colors for each line in the graph, and +a list of sizes for each point in the graph. +% +\xtc{ +The following expressions create a list of lists of points which will be read +by \Language{} and made into a \twodim{} viewport. +}{ +\spadpaste{p1 := point [1,1]\$(Point DFLOAT) \bound{p1}} +} +\xtc{ +}{ +\spadpaste{p2 := point [0,1]\$(Point DFLOAT) \bound{p2}} +} +\xtc{ +}{ +\spadpaste{p3 := point [0,0]\$(Point DFLOAT) \bound{p3}} +} +\xtc{ +}{ +\spadpaste{p4 := point [1,0]\$(Point DFLOAT) \bound{p4}} +} +\xtc{ +}{ +\spadpaste{p5 := point [1,.5]\$(Point DFLOAT) \bound{p5}} +} +\xtc{ +}{ +\spadpaste{p6 := point [.5,0]\$(Point DFLOAT) \bound{p6}} +} +\xtc{ +}{ +\spadpaste{p7 := point [0,0.5]\$(Point DFLOAT) \bound{p7}} +} +\xtc{ +}{ +\spadpaste{p8 := point [.5,1]\$(Point DFLOAT) \bound{p8}} +} +\xtc{ +}{ +\spadpaste{p9 := point [.25,.25]\$(Point DFLOAT) \bound{p9}} +} +\xtc{ +}{ +\spadpaste{p10 := point [.25,.75]\$(Point DFLOAT) \bound{p10}} +} +\xtc{ +}{ +\spadpaste{p11 := point [.75,.75]\$(Point DFLOAT) \bound{p11}} +} +\xtc{ +}{ +\spadpaste{p12 := point [.75,.25]\$(Point DFLOAT) \bound{p12}} +} +\xtc{ +Finally, here is the list. +}{ +\spadpaste{llp := [[p1,p2], [p2,p3], [p3,p4], [p4,p1], [p5,p6], [p6,p7], [p7,p8], [p8,p5], [p9,p10], [p10,p11], [p11,p12], [p12,p9]] \free{p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12} \bound{llp}} +} +\xtc{ +Now we set the point sizes for all components of the graph. +}{ +\spadpaste{size1 := 6::PositiveInteger \bound{size1}} +} +\xtc{ +}{ +} +\xtc{ +}{ +\spadpaste{size2 := 8::PositiveInteger \bound{size2}} +} +\xtc{ +}{ +\spadpaste{size3 := 10::PositiveInteger \bound{size3}} +} +\xtc{ +}{ +\spadpaste{lsize := [size1, size1, size1, size1, size2, size2, size2, size2, size3, size3, size3, size3] \bound{lsize} \free{size1 size2 size3}} +} +\xtc{ +Here are the colors for the points. +}{ +\spadpaste{pc1 := pastel red() \bound{pc1}} +} +\xtc{ +}{ +\spadpaste{pc2 := dim green() \bound{pc2}} +} +\xtc{ +}{ +\spadpaste{pc3 := pastel yellow() \bound{pc3}} +} +\xtc{ +}{ +\spadpaste{lpc := [pc1, pc1, pc1, pc1, pc2, pc2, pc2, pc2, pc3, pc3, pc3, pc3] \free{pc1 pc2 pc3} \bound{lpc}} +} +\xtc{ +Here are the colors for the lines. +}{ +\spadpaste{lc := [pastel blue(), light yellow(), dim green(), bright red(), light green(), dim yellow(), bright blue(), dark red(), pastel red(), light blue(), dim green(), light yellow()] \bound{lc}} +} +\xtc{ +Now the \axiomType{GraphImage} is created according to the component +specifications indicated above. +}{ +\spadpaste{g := makeGraphImage(llp,lpc,lc,lsize)\$GRIMAGE \bound{g} \free{llp lpc lc lsize}} +} +\psXtc{ +The \axiomFunFrom{makeViewport2D}{TwoDimensionalViewport} function now +creates a \axiomType{TwoDimensionalViewport} for this graph according to the +list of options specified within the brackets. +}{ +\graphpaste{makeViewport2D(g,[title("Lines")])\$VIEW2D \free{g}} +}{ +% +} +%See Figure #.#. +\xtc{ +This example demonstrates the use of the \axiomType{GraphImage} functions +\axiomFunFrom{component}{GraphImage} and \axiomFunFrom{appendPoint}{GraphImage} +in adding points to an empty \axiomType{GraphImage}. +}{ +\spadpaste{)clear all \bound{clearAll}} +} +\xtc{ +}{ +\spadpaste{g := graphImage()\$GRIMAGE \bound{Sg}\free{clearAll}} +} +\xtc{ +}{ +\spadpaste{p1 := point [0,0]\$(Point DFLOAT) \bound{Sp1}} +} +\xtc{ +}{ +\spadpaste{p2 := point [.25,.25]\$(Point DFLOAT) \bound{Sp2}} +} +\xtc{ +}{ +\spadpaste{p3 := point [.5,.5]\$(Point DFLOAT) \bound{Sp3}} +} +\xtc{ +}{ +\spadpaste{p4 := point [.75,.75]\$(Point DFLOAT) \bound{Sp4}} +} +\xtc{ +}{ +\spadpaste{p5 := point [1,1]\$(Point DFLOAT) \bound{Sp5}} +} +\xtc{ +}{ +\spadpaste{component(g,p1)\$GRIMAGE\free{Sg Sp1}\bound{gp1}} +} +\xtc{ +}{ +\spadpaste{component(g,p2)\$GRIMAGE\free{Sg Sp2}\bound{gp2}} +} +\xtc{ +}{ +\spadpaste{appendPoint(g,p3)\$GRIMAGE\free{gp1 gp2 Sp3}\bound{gp3}} +} +\xtc{ +}{ +\spadpaste{appendPoint(g,p4)\$GRIMAGE\free{gp3 Sp4}\bound{gp4}} +} +\xtc{ +}{ +\spadpaste{appendPoint(g,p5)\$GRIMAGE\free{gp4 Sp5}\bound{gp5}} +} +\xtc{ +}{ +\spadpaste{g1 := makeGraphImage(g)\$GRIMAGE \bound{Sg1} \free{gp5}} +} +\psXtc{ +Here is the graph. +}{ +\graphpaste{makeViewport2D(g1,[title("Graph Points")])\$VIEW2D \free{Sg1}} +}{ +% +} +% +%See Figure #.#. +% +\xtc{ +A list of points can also be made into a \axiomType{GraphImage} by using +the operation \axiomFunFrom{coerce}{GraphImage}. It is equivalent to adding +each point to \axiom{g2} using \axiomFunFrom{component}{GraphImage}. +}{ +\spadpaste{g2 := coerce([[p1],[p2],[p3],[p4],[p5]])\$GRIMAGE \free{Sp1 Sp2 Sp3 Sp4 Sp5} \bound{Sg2}} +} +\xtc{ +Now, create an empty \axiomType{TwoDimensionalViewport}. +}{ +\spadpaste{v := viewport2D()\$VIEW2D \bound{Sv}} +} +\xtc{ +}{ +\spadpaste{options(v,[title("Just Points")])\$VIEW2D \free{Sv}\bound{Svo}} +} +\xtc{ +Place the graph into the viewport. +}{ +\spadpaste{putGraph(v,g2,1)\$VIEW2D \free{Sg2 Svo}\bound{Svog2}} +} +\psXtc{ +Take a look. +}{ +\graphpaste{makeViewport2D(v)\$VIEW2D \free{Svog2}} +}{ +% +} + +%See Figure #.#. + +\subsubsection{Creating a Two-Dimensional Viewport of a List of Points from a File} + +The following three functions read a list of points from a +file and then draw the points and the connecting lines. The +points are stored in the file in readable form as floating point numbers +(specifically, \axiomType{DoubleFloat} values) as an alternating +stream of \axiom{x}- and \axiom{y}-values. For example, +\begin{verbatim} +0.0 0.0 1.0 1.0 2.0 4.0 +3.0 9.0 4.0 16.0 5.0 25.0 +\end{verbatim} + +\beginImportant + +\noindent +{\tt 1.\ \ \ drawPoints(lp:List\ Point\ DoubleFloat):VIEW2D\ ==}\newline +{\tt 2.\ \ \ \ \ g\ :=\ graphImage()\$GRIMAGE}\newline +{\tt 3.\ \ \ \ \ for\ p\ in\ lp\ repeat}\newline +{\tt 4.\ \ \ \ \ \ \ component(g,p,pointColorDefault(),lineColorDefault(),}\newline +{\tt 5.\ \ \ \ \ \ \ \ \ pointSizeDefault())}\newline +{\tt 6.\ \ \ \ \ gi\ :=\ makeGraphImage(g)\$GRIMAGE}\newline +{\tt 7.\ \ \ \ \ makeViewport2D(gi,[title("Points")])\$VIEW2D}\newline +{\tt 8.\ \ \ }\newline +{\tt 9.\ \ \ drawLines(lp:List\ Point\ DoubleFloat):VIEW2D\ ==}\newline +{\tt 10.\ \ \ \ g\ :=\ graphImage()\$GRIMAGE}\newline +{\tt 11.\ \ \ \ component(g,\ lp,\ pointColorDefault(),\ lineColorDefault(),}\newline +{\tt 12.\ \ \ \ \ \ pointSizeDefault())\$GRIMAGE}\newline +{\tt 13.\ \ \ \ gi\ :=\ makeGraphImage(g)\$GRIMAGE}\newline +{\tt 14.\ \ \ \ makeViewport2D(gi,[title("Points")])\$VIEW2D}\newline +{\tt 15.\ \ }\newline +{\tt 16.\ \ plotData2D(name,\ title)\ ==}\newline +{\tt 17.\ \ \ \ f:File(DFLOAT)\ :=\ open(name,"input")}\newline +{\tt 18.\ \ \ \ lp:LIST(Point\ DFLOAT)\ :=\ empty()}\newline +{\tt 19.\ \ \ \ while\ ((x\ :=\ readIfCan!(f))\ case\ DFLOAT)\ repeat}\newline +{\tt 20.\ \ \ \ \ \ y\ :\ DFLOAT\ :=\ read!(f)}\newline +{\tt 21.\ \ \ \ \ \ lp\ :=\ cons(point\ [x,y]\$(Point\ DFLOAT),\ lp)}\newline +{\tt 22.\ \ \ \ \ \ lp}\newline +{\tt 23.\ \ \ \ close!(f)}\newline +{\tt 24.\ \ \ \ drawPoints(lp)}\newline +{\tt 25.\ \ \ \ drawLines(lp)}\newline +\endImportant +% +This command will actually create the viewport and the graph if +the point data is in the file \axiom{"file.data"}. +\beginImportant + +\noindent +{\tt 1.\ \ \ plotData2D("file.data",\ "2D\ Data\ Plot")}\newline +\endImportant + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphTwoDappendTitle}{Addendum: Appending a Graph to a Viewport Window Containing a Graph} +\newcommand{\ugGraphTwoDappendNumber}{7.1.10.} +% +% ===================================================================== +\begin{page}{ugGraphTwoDappendPage}{7.1.10. Addendum: Appending a Graph to a Viewport Window Containing a Graph} +% ===================================================================== +\beginscroll + +This section demonstrates how to append a \twodim{} graph to a viewport +already containing other graphs. +The default \axiomFun{draw} command places a graph into the first +\axiomType{GraphImage} slot position of the \axiomType{TwoDimensionalViewport}. + +\xtc{ +This graph is in the first slot in its viewport. +}{ +\spadpaste{v1 := draw(sin(x),x=0..2*\%pi) \bound{v1}} +} +\xtc{ +So is this graph. +}{ +\spadpaste{v2 := draw(cos(x),x=0..2*\%pi, curveColor==light red()) \bound{v2}} +} +\xtc{ +The operation \axiomFunFrom{getGraph}{TwoDimensionalViewport} +retrieves the \axiomType{GraphImage} \axiom{g1} from the first slot position +in the viewport \axiom{v1}. +}{ +\spadpaste{g1 := getGraph(v1,1) \bound{g1}\free{v1}} +} +\xtc{ +Now \axiomFunFrom{putGraph}{TwoDimensionalViewport} +places \axiom{g1} into the the second slot position of \axiom{v2}. +}{ +\spadpaste{putGraph(v2,g1,2) \bound{v22}\free{g1 v2}} +} +\psXtc{ +Display the new \axiomType{TwoDimensionalViewport} containing both graphs. +}{ +\graphpaste{makeViewport2D(v2) \free{v22}} +}{ +% +} +% +%See Figure #.#. +% + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphThreeDTitle}{Three-Dimensional Graphics} +\newcommand{\ugGraphThreeDNumber}{7.2.} +% +% ===================================================================== +\begin{page}{ugGraphThreeDPage}{7.2. Three-Dimensional Graphics} +% ===================================================================== +\beginscroll +% +The \Language{} \threedim{} graphics package provides the ability to +%-% \HDindex{graphics!three-dimensional}{ugGraphThreeDPage}{7.2.}{Three-Dimensional Graphics} +% +\indent{4} +\beginitems +% +\item[-] generate surfaces defined by a function of two real variables +% +\item[-] generate space curves and tubes defined by parametric equations +% +\item[-] generate surfaces defined by parametric equations +\enditems +\indent{0} +These graphs can be modified by using various options, such as calculating +points in the spherical coordinate system or changing the polygon grid size +of a surface. + +\beginmenu + \menudownlink{{7.2.1. Plotting Three-Dimensional Functions of Two Variables}}{ugGraphThreeDPlotPage} + \menudownlink{{7.2.2. Plotting Three-Dimensional Parametric Space Curves}}{ugGraphThreeDParmPage} + \menudownlink{{7.2.3. Plotting Three-Dimensional Parametric Surfaces}}{ugGraphThreeDParPage} + \menudownlink{{7.2.4. Three-Dimensional Options}}{ugGraphThreeDOptionsPage} + \menudownlink{{7.2.5. The makeObject Command}}{ugGraphMakeObjectPage} + \menudownlink{{7.2.6. Building Three-Dimensional Objects From Primitives}}{ugGraphThreeDBuildPage} + \menudownlink{{7.2.7. Coordinate System Transformations}}{ugGraphCoordPage} + \menudownlink{{7.2.8. Three-Dimensional Clipping}}{ugGraphClipPage} + \menudownlink{{7.2.9. Three-Dimensional Control-Panel}}{ugGraphThreeDControlPage} + \menudownlink{{7.2.10. Operations for Three-Dimensional Graphics}}{ugGraphThreeDopsPage} + \menudownlink{{7.2.11. Customization using .Xdefaults}}{ugXdefaultsPage} +\endmenu +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphThreeDPlotTitle}{Plotting Three-Dimensional Functions of Two Variables} +\newcommand{\ugGraphThreeDPlotNumber}{7.2.1.} +% +% ===================================================================== +\begin{page}{ugGraphThreeDPlotPage}{7.2.1. Plotting Three-Dimensional Functions of Two Variables} +% ===================================================================== +\beginscroll + +%-% \HDindex{surface!two variable function}{ugGraphThreeDPlotPage}{7.2.1.}{Plotting Three-Dimensional Functions of Two Variables} +The simplest \threedim{} graph is that of a surface defined by a function +of two variables, \axiom{z = f(x,y)}. + +% +\beginImportant +The general format for drawing a surface defined by a formula \axiom{f(x,y)} +of two variables \axiom{x} and \axiom{y} is: +% +\centerline{{{\tt draw(f(x,y), x = a..b, y = c..d, {\it options})}}} +where \axiom{a..b} and \axiom{c..d} define the range of \axiom{x} +and \axiom{y}, and where {\it options} prescribes zero or more +options as described in \downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. +An example of an option is \axiom{title == "Title of Graph".} +An alternative format involving a function \axiom{f} is also +available. +\endImportant + +% +\psXtc{ +The simplest way to plot a function of two variables is to use a formula. +With formulas you always precede the range specifications with +the variable name and an \spadSyntax{=} sign. +}{ +\graphpaste{draw(cos(x*y),x=-3..3,y=-3..3)} +}{ +\epsffile[0 0 295 295]{../ps/3D2VarA.ps} +} +% +\xtc{ +If you intend to use a function more than once, +or it is long and complex, then first +give its definition to \Language{}. +}{ +\spadpaste{f(x,y) == sin(x)*cos(y) \bound{f}} +} +% +% +\psXtc{ +To draw the function, just give its name and drop the variables +from the range specifications. +\Language{} compiles your function for efficient computation +of data for the graph. +Notice that \Language{} uses the text of your function as a +default title. +}{ +\graphpaste{draw(f,-\%pi..\%pi,-\%pi..\%pi) \free{f}} +}{ +\epsffile[0 0 295 295]{../ps/3D2VarB.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphThreeDParmTitle}{Plotting Three-Dimensional Parametric Space Curves} +\newcommand{\ugGraphThreeDParmNumber}{7.2.2.} +% +% ===================================================================== +\begin{page}{ugGraphThreeDParmPage}{7.2.2. Plotting Three-Dimensional Parametric Space Curves} +% ===================================================================== +\beginscroll + +A second kind of \threedim{} graph is a \threedim{} space curve +%-% \HDindex{curve!parametric space}{ugGraphThreeDParmPage}{7.2.2.}{Plotting Three-Dimensional Parametric Space Curves} +defined by the parametric equations for \axiom{x(t)}, \axiom{y(t)}, +%-% \HDindex{parametric space curve}{ugGraphThreeDParmPage}{7.2.2.}{Plotting Three-Dimensional Parametric Space Curves} +and \axiom{z(t)} as a function of an independent variable \axiom{t}. + +% +\beginImportant +The general format for drawing a \threedim{} space curve defined by +parametric formulas \axiom{x = f(t)}, \axiom{y = g(t)}, and +\axiom{z = h(t)} is: +% +\centerline{{{\tt draw(curve(f(t),g(t),h(t)), t = a..b, {\it options})}}} +where \axiom{a..b} defines the range of the independent variable +\axiom{t}, and where {\it options} prescribes zero or more options +as described in \downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. +An example of an option is \axiom{title == "Title of Graph".} +An alternative format involving functions \axiom{f}, \axiom{g} and +\axiom{h} is also available. +\endImportant + +% +\psXtc{ +If you use explicit formulas to draw a space curve, always precede +the range specification with the variable name and an +\spadSyntax{=} sign. +}{ +\graphpaste{draw(curve(5*cos(t), 5*sin(t),t), t=-12..12)} +}{ +\epsffile[0 0 295 295]{../ps/3DpscA.ps} +} +% +\xtc{ +Alternatively, you can draw space curves by referring to functions. +}{ +\spadpaste{i1(t:DFLOAT):DFLOAT == sin(t)*cos(3*t/5) \bound{i1}} +} +\xtc{ +This is useful if the functions are to be used more than once \ldots +}{ +\spadpaste{i2(t:DFLOAT):DFLOAT == cos(t)*cos(3*t/5) \bound{i2}} +} +\xtc{ +or if the functions are long and complex. +}{ +\spadpaste{i3(t:DFLOAT):DFLOAT == cos(t)*sin(3*t/5) \bound{i3}} +} +% +% +\psXtc{ +Give the names of the functions and +drop the variable name specification in the second argument. +Again, \Language{} supplies a default title. +}{ +\graphpaste{draw(curve(i1,i2,i3),0..15*\%pi) \free{i1 i2 i3}} +}{ +\epsffile[0 0 295 295]{../ps/3DpscB.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphThreeDParTitle}{Plotting Three-Dimensional Parametric Surfaces} +\newcommand{\ugGraphThreeDParNumber}{7.2.3.} +% +% ===================================================================== +\begin{page}{ugGraphThreeDParPage}{7.2.3. Plotting Three-Dimensional Parametric Surfaces} +% ===================================================================== +\beginscroll + +%-% \HDindex{surface!parametric}{ugGraphThreeDParPage}{7.2.3.}{Plotting Three-Dimensional Parametric Surfaces} +A third kind of \threedim{} graph is a surface defined by +%-% \HDindex{parametric surface}{ugGraphThreeDParPage}{7.2.3.}{Plotting Three-Dimensional Parametric Surfaces} +parametric equations for \axiom{x(u,v)}, \axiom{y(u,v)}, and +\axiom{z(u,v)} of two independent variables \axiom{u} and \axiom{v}. + +% +\beginImportant +The general format for drawing a \threedim{} graph defined by +parametric formulas \axiom{x = f(u,v)}, \axiom{y = g(u,v)}, +and \axiom{z = h(u,v)} is: +% +\centerline{{{\tt draw(surface(f(u,v),g(u,v),h(u,v)), u = a..b, v = c..d, {\it options})}}} +where \axiom{a..b} and \axiom{c..d} define the range of the +independent variables \axiom{u} and \axiom{v}, and where +{\it options} prescribes zero or more options as described in +\downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. +An example of an option is \axiom{title == "Title of Graph".} +An alternative format involving functions \axiom{f}, \axiom{g} and +\axiom{h} is also available. +\endImportant + +% +\psXtc{ +This example draws a graph of a surface plotted using the +parabolic cylindrical coordinate system option. +%-% \HDindex{coordinate system!parabolic cylindrical}{ugGraphThreeDParPage}{7.2.3.}{Plotting Three-Dimensional Parametric Surfaces} +The values of the functions supplied to \axiomFun{surface} are +%-% \HDindex{parabolic cylindrical coordinate system}{ugGraphThreeDParPage}{7.2.3.}{Plotting Three-Dimensional Parametric Surfaces} +interpreted in coordinates as given by a {\tt coordinates} option, +here as parabolic cylindrical coordinates (see +\downlink{``\ugGraphCoordTitle''}{ugGraphCoordPage} in Section \ugGraphCoordNumber\ignore{ugGraphCoord}). +}{ +\graphpaste{draw(surface(u*cos(v), u*sin(v), v*cos(u)), u=-4..4, v=0..\%pi, coordinates== parabolicCylindrical)} +}{ +\epsffile[0 0 295 295]{../ps/3DpsA.ps} +} +% +Again, you can graph these parametric surfaces using functions, +if the functions are long and complex. +\xtc{ +Here we declare the types of arguments and values to be of type +\axiomType{DoubleFloat}. +}{ +\spadpaste{n1(u:DFLOAT,v:DFLOAT):DFLOAT == u*cos(v) \bound{n1}} +} +\xtc{ +As shown by previous examples, these declarations are necessary. +}{ +\spadpaste{n2(u:DFLOAT,v:DFLOAT):DFLOAT == u*sin(v) \bound{n2}} +} +\xtc{ +In either case, \Language{} compiles the functions +when needed to graph a result. +}{ +\spadpaste{n3(u:DFLOAT,v:DFLOAT):DFLOAT == u \bound{n3}} +} +\xtc{ +Without these declarations, you have to suffix floats +with \axiom{@DFLOAT} to get a \axiomType{DoubleFloat} result. +However, a call here with an unadorned float produces a \axiomType{DoubleFloat}. +}{ +\spadpaste{n3(0.5,1.0)\free{n3}} +} +% +% +\psXtc{ +Draw the surface by referencing the function names, this time +choosing the toroidal coordinate system. +%-% \HDindex{coordinate system!toroidal}{ugGraphThreeDParPage}{7.2.3.}{Plotting Three-Dimensional Parametric Surfaces} +%-% \HDindex{toroidal coordinate system}{ugGraphThreeDParPage}{7.2.3.}{Plotting Three-Dimensional Parametric Surfaces} +}{ +\graphpaste{draw(surface(n1,n2,n3), 1..4, 1..2*\%pi, coordinates == toroidal(1\$DFLOAT)) \free{n1 n2 n3}} +}{ +\epsffile[0 0 295 295]{../ps/3DpsB.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphThreeDOptionsTitle}{Three-Dimensional Options} +\newcommand{\ugGraphThreeDOptionsNumber}{7.2.4.} +% +% ===================================================================== +\begin{page}{ugGraphThreeDOptionsPage}{7.2.4. Three-Dimensional Options} +% ===================================================================== +\beginscroll + +%-% \HDindex{graphics!3D options}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +The \axiomFun{draw} commands optionally take an optional list of options such +as {\tt coordinates} as shown in the last example. +Each option is given by the syntax: \axiom{name} {\tt ==} \axiom{value}. +Here is a list of the available options in the order that they are +described below: + +\table{ {title} {coordinates} {var1Steps} {style} {tubeRadius} {var2Steps} +{colorFunction} {tubePoints} {space}} + +\psXtc{ +The option \axiom{title} gives your graph a title. +%-% \HDindex{graphics!3D options!title}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +}{ +\graphpaste{draw(cos(x*y),x=0..2*\%pi,y=0..\%pi,title == "Title of Graph") } +}{ +\epsffile[0 0 295 295]{../ps/3DOptTtl.ps} +} +% +\psXtc{ +The \axiom{style} determines which of four rendering algorithms is used for +%-% \HDindex{rendering}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +the graph. +The choices are +{\tt "wireMesh"}, {\tt "solid"}, {\tt "shade"}, and {\tt "smooth"}. +}{ +\graphpaste{draw(cos(x*y),x=-3..3,y=-3..3, style=="smooth", title=="Smooth Option")} +}{ +\epsffile[0 0 295 295]{../ps/3DOptSty.ps} +} +% + +In all but the wire-mesh style, polygons in a surface or tube plot +are normally colored in a graph according to their +\axiom{z}-coordinate value. Space curves are colored according to their +parametric variable value. +%-% \HDindex{graphics!3D options!color function}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +To change this, you can give a coloring function. +%-% \HDindex{function!coloring}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +The coloring function is sampled across the range of its arguments, then +normalized onto the standard \Language{} colormap. + +\xtc{ +A function of one variable makes the color depend on the +value of the parametric variable specified for a tube plot. +}{ +\spadpaste{color1(t) == t \bound{colorFxn1}} +} +\psXtc{ +}{ +\graphpaste{draw(curve(sin(t), cos(t),0), t=0..2*\%pi, tubeRadius == .3, colorFunction == color1) \free{colorFxn1}} +}{ +\epsffile[0 0 295 295]{../ps/3DOptCf1.ps} +} +% +\xtc{ +A function of two variables makes the color depend on the +values of the independent variables. +}{ +\spadpaste{color2(u,v) == u**2 - v**2 \bound{colorFxn2}} +} +\psXtc{ +Use the option {\tt colorFunction} for special coloring. +}{ +\graphpaste{draw(cos(u*v), u=-3..3, v=-3..3, colorFunction == color2) \free{colorFxn2}} +}{ +\epsffile[0 0 295 295]{../ps/3DOptCf2.ps} +} +% +\xtc{ +With a three variable function, the +color also depends on the value of the function. +}{ +\spadpaste{color3(x,y,fxy) == sin(x*fxy) + cos(y*fxy) \bound{colorFxn3}} +} +\psXtc{ +}{ +\graphpaste{draw(cos(x*y), x=-3..3, y=-3..3, colorFunction == color3) \free{colorFxn3}} +}{ +\epsffile[0 0 295 295]{../ps/3DOptCf3.ps} +} +% +Normally the Cartesian coordinate system is used. +%-% \HDindex{Cartesian!coordinate system}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +To change this, use the {\tt coordinates} option. +%-% \HDindex{coordinate system!Cartesian}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +For details, see \downlink{``\ugGraphCoordTitle''}{ugGraphCoordPage} in Section \ugGraphCoordNumber\ignore{ugGraphCoord}. +% +% +\xtc{ +}{ +\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 \bound{m}} +} +\psXtc{ +Use the spherical +%-% \HDindex{spherical coordinate system}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +coordinate system. +%-% \HDindex{coordinate system!spherical}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +}{ +\graphpaste{draw(m, 0..2*\%pi,0..\%pi, coordinates == spherical, style=="shade") \free{m}} +}{ +\epsffile[0 0 295 295]{../ps/3DOptCrd.ps} +} +% +Space curves may be displayed as tubes with polygonal cross sections. +%-% \HDindex{tube}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +Two options, {\tt tubeRadius} and {\tt tubePoints}, control the size and +shape of this cross section. +% +\psXtc{ +The {\tt tubeRadius} option specifies the radius of the tube that +%-% \HDindex{tube!radius}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +encircles the specified space curve. +}{ +\graphpaste{draw(curve(sin(t),cos(t),0),t=0..2*\%pi, style=="shade", tubeRadius == .3)} +}{ +\epsffile[0 0 295 295]{../ps/3DOptRad.ps} +} +% +% +\psXtc{ +The {\tt tubePoints} option specifies the number of vertices +%-% \HDindex{tube!points in polygon}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +defining the polygon that is used to create a tube around the +specified space curve. +The larger this number is, the more cylindrical the tube becomes. +}{ +\graphpaste{draw(curve(sin(t), cos(t), 0), t=0..2*\%pi, style=="shade", tubeRadius == .25, tubePoints == 3)} +}{ +\epsffile[0 0 295 295]{../ps/3DOptPts.ps} +} +% +%-% \HDindex{graphics!3D options!variable steps}{ugGraphThreeDOptionsPage}{7.2.4.}{Three-Dimensional Options} +% +% +\psXtc{ +Options \axiomFunFrom{var1Steps}{DrawOption} and +\axiomFunFrom{var2Steps}{DrawOption} specify the number of intervals into +which the grid defining a surface plot is subdivided with respect to the +first and second parameters of the surface function(s). +}{ +\graphpaste{draw(cos(x*y),x=-3..3,y=-3..3, style=="shade", var1Steps == 30, var2Steps == 30)} +}{ +\epsffile[0 0 295 295]{../ps/3DOptvB.ps} +} +% +The {\tt space} option +of a \axiomFun{draw} command lets you build multiple graphs in three space. +To use this option, first create an empty three-space object, +then use the {\tt space} option thereafter. +There is no restriction as to the number or kinds +of graphs that can be combined this way. +\xtc{ +Create an empty three-space object. +}{ +\spadpaste{s := create3Space()\$(ThreeSpace DFLOAT) \bound{s}} +} +% +% +\xtc{ +}{ +\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 \bound{m}} +} +\psXtc{ +Add a graph to this three-space object. +The new graph destructively inserts the graph +into \axiom{s}. +}{ +\graphpaste{draw(m,0..\%pi,0..2*\%pi, coordinates == spherical, space == s) \free{s m}} +}{ +\epsffile[0 0 295 295]{../ps/3Dmult1A.ps} +} +% +% +\psXtc{ +Add a second graph to \axiom{s}. +}{ +\graphpaste{v := draw(curve(1.5*sin(t), 1.5*cos(t),0), t=0..2*\%pi, tubeRadius == .25, space == s) \free{s} \bound{v}} +}{ +\epsffile[0 0 295 295]{../ps/3Dmult1B.ps} +} +% +A three-space object can also be obtained from an existing \threedim{} viewport +using the \axiomFunFrom{subspace}{ThreeSpace} command. +You can then use \axiomFun{makeViewport3D} to create a viewport window. +\xtc{ +Assign to \axiom{subsp} the three-space object in viewport \axiom{v}. +}{ +\spadpaste{subsp := subspace v \free{v} \bound{su}} +} +\xtc{ +Reset the space component of \axiom{v} to the value of \axiom{subsp}. +}{ +\spadpaste{subspace(v, subsp) \bound{sp} \free{su}} +} +\noOutputXtc{ +Create a viewport window from a three-space object. +}{ +\graphpaste{makeViewport3D(subsp,"Graphs") \free{sp}} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphMakeObjectTitle}{The makeObject Command} +\newcommand{\ugGraphMakeObjectNumber}{7.2.5.} +% +% ===================================================================== +\begin{page}{ugGraphMakeObjectPage}{7.2.5. The makeObject Command} +% ===================================================================== +\beginscroll + +An alternate way to create multiple graphs is to use +\axiomFun{makeObject}. +The \axiomFun{makeObject} command is similar to the \axiomFun{draw} +command, except that it returns a three-space object rather than a +\axiomType{ThreeDimensionalViewport}. +In fact, \axiomFun{makeObject} is called by the \axiomFun{draw} +command to create the \axiomType{ThreeSpace} then +\axiomFunFrom{makeViewport3D}{ThreeDimensionalViewport} to create a +viewport window. + +\xtc{ +}{ +\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 \bound{m}} +} +\noOutputXtc{ +Do the last example a new way. +First use \axiomFun{makeObject} to +create a three-space object \axiom{sph}. +}{ +\spadpaste{sph := makeObject(m, 0..\%pi, 0..2*\%pi, coordinates==spherical)\bound{sph}\free{m}} +} +\noOutputXtc{ +Add a second object to \axiom{sph}. +}{ +\spadpaste{makeObject(curve(1.5*sin(t), 1.5*cos(t), 0), t=0..2*\%pi, space == sph, tubeRadius == .25) \free{sph}\bound{v1}} +} +\noOutputXtc{ +Create and display a viewport +containing \axiom{sph}. +}{ +\graphpaste{makeViewport3D(sph,"Multiple Objects") \free{v1}} +} + +Note that an undefined \axiomType{ThreeSpace} parameter declared in a +\axiomFun{makeObject} or \axiomFun{draw} command results in an error. +Use the \axiomFunFrom{create3Space}{ThreeSpace} function to define a +\axiomType{ThreeSpace}, or obtain a \axiomType{ThreeSpace} that has been +previously generated before including it in a command line. + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphThreeDBuildTitle}{Building Three-Dimensional Objects From Primitives} +\newcommand{\ugGraphThreeDBuildNumber}{7.2.6.} +% +% ===================================================================== +\begin{page}{ugGraphThreeDBuildPage}{7.2.6. Building Three-Dimensional Objects From Primitives} +% ===================================================================== +\beginscroll + +Rather than using the \axiomFun{draw} and \axiomFun{makeObject} commands, +%-% \HDindex{graphics!advanced!build 3D objects}{ugGraphThreeDBuildPage}{7.2.6.}{Building Three-Dimensional Objects From Primitives} +you can create \threedim{} graphs from primitives. +Operation \axiomFunFrom{create3Space}{ThreeSpace} creates a +three-space object to which points, curves and polygons +can be added using the operations from the \axiomType{ThreeSpace} +domain. +The resulting object can then be displayed in a viewport using +\axiomFunFrom{makeViewport3D}{ThreeDimensionalViewport}. + +\xtc{ +Create the empty three-space object \axiom{space}. +}{ +\spadpaste{space := create3Space()\$(ThreeSpace DFLOAT) \bound{space}} +} + +Objects can be sent to this \axiom{space} using the operations +exported by the \axiomType{ThreeSpace} domain. +%-% \HDexptypeindex{ThreeSpace}{ugGraphThreeDBuildPage}{7.2.6.}{Building Three-Dimensional Objects From Primitives} +The following examples place curves into \axiom{space}. + +\xtc{ +Add these eight curves to the space. +}{ +\spadpaste{closedCurve(space,[[0,30,20], [0,30,30], [0,40,30], [0,40,100], [0,30,100],[0,30,110], [0,60,110], [0,60,100], [0,50,100], [0,50,30], [0,60,30], [0,60,20]]) \bound{curve1} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[80,0,30], [80,0,100], [70,0,110], [40,0,110], [30,0,100], [30,0,90], [40,0,90], [40,0,95], [45,0,100], [65,0,100], [70,0,95], [70,0,35]]) \bound{curve2} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[70,0,35], [65,0,30], [45,0,30], [40,0,35], [40,0,60], [50,0,60], [50,0,70], [30,0,70], [30,0,30], [40,0,20], [70,0,20], [80,0,30]]) \bound{curve3} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[0,70,20], [0,70,110], [0,110,110], [0,120,100], [0,120,70], [0,115,65], [0,120,60], [0,120,30], [0,110,20], [0,80,20], [0,80,30], [0,80,20]]) \bound{curve4} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[0,105,30], [0,110,35], [0,110,55], [0,105,60], [0,80,60], [0,80,70], [0,105,70], [0,110,75], [0,110,95], [0,105,100], [0,80,100], [0,80,20], [0,80,30]]) \bound{curve5} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[140,0,20], [140,0,110], [130,0,110], [90,0,20], [101,0,20],[114,0,50], [130,0,50], [130,0,60], [119,0,60], [130,0,85], [130,0,20]]) \bound{curve6} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[0,140,20], [0,140,110], [0,150,110], [0,170,50], [0,190,110], [0,200,110], [0,200,20], [0,190,20], [0,190,75], [0,175,35], [0,165,35],[0,150,75], [0,150,20]]) \bound{curve7} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[200,0,20], [200,0,110], [189,0,110], [160,0,45], [160,0,110], [150,0,110], [150,0,20], [161,0,20], [190,0,85], [190,0,20]]) \bound{curve8} \free{space}} +} +\psXtc{ +Create and display the viewport using \axiomFun{makeViewport3D}. +Options may also be given but here are displayed as a list with values +enclosed in parentheses. +}{ +\graphpaste{makeViewport3D(space, title == "Letters") \free{space curve1 curve2 curve3 curve4 curve5 curve6 curve7 curve8}} +}{ +\epsffile[0 0 295 295]{../ps/3DBuildA.ps} +} + +\subsubsection{Cube Example} + +As a second example of the use of primitives, we generate a cube using a +polygon mesh. +It is important to use a consistent orientation of the polygons for +correct generation of \threedim{} objects. + +\xtc{ +Again start with an empty three-space object. +}{ +\spadpaste{spaceC := create3Space()\$(ThreeSpace DFLOAT) \bound{spaceC}} +} +\xtc{ +For convenience, +give \axiomType{DoubleFloat} values \axiom{+1} and \axiom{-1} names. +}{ +\spadpaste{x: DFLOAT := 1 \bound{x}} +} +\xtc{ +}{ +\spadpaste{y: DFLOAT := -1 \bound{y}} +} +\xtc{ +Define the vertices of the cube. +}{ +\spadpaste{a := point [x,x,y,1::DFLOAT]\$(Point DFLOAT) \bound{a} \free{x y}} +} +\xtc{ +}{ +\spadpaste{b := point [y,x,y,4::DFLOAT]\$(Point DFLOAT) \bound{b} \free{x y}} +} +\xtc{ +}{ +\spadpaste{c := point [y,x,x,8::DFLOAT]\$(Point DFLOAT) \bound{c} \free{x y}} +} +\xtc{ +}{ +\spadpaste{d := point [x,x,x,12::DFLOAT]\$(Point DFLOAT) \bound{d} \free{x y}} +} +\xtc{ +}{ +\spadpaste{e := point [x,y,y,16::DFLOAT]\$(Point DFLOAT) \bound{e} \free{x y}} +} +\xtc{ +}{ +\spadpaste{f := point [y,y,y,20::DFLOAT]\$(Point DFLOAT) \bound{f} \free{x y}} +} +\xtc{ +}{ +\spadpaste{g := point [y,y,x,24::DFLOAT]\$(Point DFLOAT) \bound{g} \free{x y}} +} +\xtc{ +}{ +\spadpaste{h := point [x,y,x,27::DFLOAT]\$(Point DFLOAT) \bound{h} \free{x y}} +} +\xtc{ +Add the faces of the cube as polygons to the space using a +consistent orientation. +}{ +\spadpaste{polygon(spaceC,[d,c,g,h]) \free{d c g h spaceC} \bound{pol1}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[d,h,e,a]) \free{d h e a spaceC} \bound{pol2}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[c,d,a,b]) \free{c d a b spaceC} \bound{pol3}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[g,c,b,f]) \free{g c b f spaceC} \bound{pol4}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[h,g,f,e]) \free{h g f e spaceC} \bound{pol5}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[e,f,b,a]) \free{e f b a spaceC} \bound{pol6}} +} +\psXtc{ +Create and display the viewport. +}{ +\graphpaste{makeViewport3D(spaceC, title == "Cube") \free{pol1 pol2 pol3 pol4 pol5 pol6}} +}{ +\epsffile[0 0 295 295]{../ps/3DBuildB.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphCoordTitle}{Coordinate System Transformations} +\newcommand{\ugGraphCoordNumber}{7.2.7.} +% +% ===================================================================== +\begin{page}{ugGraphCoordPage}{7.2.7. Coordinate System Transformations} +% ===================================================================== +\beginscroll +%-% \HDindex{graphics!advanced!coordinate systems}{ugGraphCoordPage}{7.2.7.}{Coordinate System Transformations} + +The \axiomType{CoordinateSystems} package provides coordinate transformation +functions that map a given data point from the coordinate system specified +into the Cartesian coordinate system. +%-% \HDexptypeindex{CoordinateSystems}{ugGraphCoordPage}{7.2.7.}{Coordinate System Transformations} +The default coordinate system, given a triplet \axiom{(f(u,v), u, v)}, assumes +that \axiom{z = f(u, v)}, \axiom{x = u} and \axiom{y = v}, +that is, reads the coordinates in \axiom{(z, x, y)} order. + +\xtc{ +}{ +\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == u**2 \bound{m}} +} +% +\psXtc{ +Graph plotted in default coordinate system. +}{ +\graphpaste{draw(m,0..3,0..5) \free{m}} +}{ +\epsffile[0 0 295 295]{../ps/defcoord.ps} +} + +The \axiom{z} coordinate comes first since the first argument of +the \axiomFun{draw} command gives its values. +In general, the coordinate systems \Language{} provides, or any +that you make up, must provide a map to an \axiom{(x, y, z)} triplet in +order to be compatible with the +\axiomFunFrom{coordinates}{DrawOption} \axiomType{DrawOption}. +%-% \HDexptypeindex{DrawOption}{ugGraphCoordPage}{7.2.7.}{Coordinate System Transformations} +Here is an example. + +\xtc{ +Define the identity function. +}{ +\spadpaste{cartesian(point:Point DFLOAT):Point DFLOAT == point \bound{cart}} +} +\psXtc{ +Pass \axiom{cartesian} as the \axiomFunFrom{coordinates}{DrawOption} +parameter to the \axiomFun{draw} command. +}{ +\graphpaste{draw(m,0..3,0..5,coordinates==cartesian) \free{m cart}} +}{ +\epsffile[0 0 295 295]{../ps/cartcoord.ps} +} +% + +What happened? +The option {\tt coordinates == cartesian} directs \Language{} to +treat the dependent variable \axiom{m} defined by +\texht{$m=u^2$}{m=u**2} as the \axiom{x} coordinate. +Thus the triplet of values \axiom{(m, u, v)} is transformed to +coordinates \axiom{(x, y, z)} and so we get the graph of +\texht{$x=y^2$}{x=y**2}. + +Here is another example. +The \axiomFunFrom{cylindrical}{CoordinateSystems} transform takes +%-% \HDindex{coordinate system!cylindrical}{ugGraphCoordPage}{7.2.7.}{Coordinate System Transformations} +input of the form \axiom{(w,u,v)}, interprets it in the order +%-% \HDindex{cylindrical coordinate system}{ugGraphCoordPage}{7.2.7.}{Coordinate System Transformations} +\texht{($r$,$\theta$,$z$)}{(\axiom{r}, \axiom{theta}, \axiom{z})} +and maps it to the Cartesian coordinates +\texht{$x=r\cos(\theta)$, $y=r\sin(\theta)$, $z=z$} +{\axiom{x = r * cos(theta)}, \axiom{y = r * sin(theta)}, \axiom{z = z}} +in which +\texht{$r$}{\axiom{r}} is the radius, +\texht{$\theta$}{\axiom{theta}} is the angle and +\texht{$z$}{\axiom{z}} is the z-coordinate. +\xtc{ +An example using the \axiomFunFrom{cylindrical}{CoordinateSystems} +coordinates for the constant \axiom{r = 3}. +}{ +\spadpaste{f(u:DFLOAT,v:DFLOAT):DFLOAT == 3 \bound{f}} +} +\psXtc{ +Graph plotted in cylindrical coordinates. +}{ +\graphpaste{draw(f,0..\%pi,0..6,coordinates==cylindrical) \free{f}} +}{ +\epsffile[0 0 295 295]{../ps/cylCoord.ps} +} + +Suppose you would like to specify \smath{z} as a function of +\smath{r} and \texht{$\theta$}{\axiom{theta}} instead of just +\smath{r}? +Well, you still can use the \axiomFun{cylindrical} \Language{} +transformation but we have to reorder the triplet before +passing it to the transformation. + +\xtc{ +First, let's create a point to +work with and call it \axiom{pt} with some color \axiom{col}. +}{ +\spadpaste{col := 5 \bound{c}} +} +\xtc{ +}{ +\spadpaste{pt := point[1,2,3,col]\$(Point DFLOAT) \free{c} \bound{pt}} +} +The reordering you want is +\texht{$(z,r, \theta)$}{\axiom{(z,r,theta)}} to +\texht{$(r, \theta,z)$}{\axiom{(r,theta,z)}} +so that the first element is moved to the third element, while the second +and third elements move forward and the color element does not change. +\xtc{ +Define a function \userfun{reorder} to reorder the point elements. +}{ +\spadpaste{reorder(p:Point DFLOAT):Point DFLOAT == point[p.2, p.3, p.1, p.4] \bound{freo}} +} +\xtc{ +The function moves the second and third elements +forward but the color does not change. +}{ +\spadpaste{reorder pt \free{pt freo}} +} +\xtc{ +The function \userfun{newmap} converts our reordered version of +the cylindrical coordinate system to the standard +\texht{$(x,y,z)$}{\axiom{(x,y,z)}} Cartesian system. +}{ +\spadpaste{newmap(pt:Point DFLOAT):Point DFLOAT == cylindrical(reorder pt) \free{freo} \bound{fnewmap}} +} +\xtc{ +}{ +\spadpaste{newmap pt \free{fnewmap pt} \bound{new}} +} +% +\psXtc{ +Graph the same function \axiom{f} using the coordinate mapping of the function +\axiom{newmap}, so it is now interpreted as +\texht{$z=3$}{\axiom{z = 3}}: +}{ +\graphpaste{draw(f,0..3,0..2*\%pi,coordinates==newmap) \free{f new}} +}{ +\epsffile[0 0 295 295]{../ps/newmap.ps} +} + +{\texht{\sloppy}{} +The \axiomType{CoordinateSystems} package exports the following +%-% \HDindex{coordinate system}{ugGraphCoordPage}{7.2.7.}{Coordinate System Transformations} +operations: +\axiomFun{bipolar}, +\axiomFun{bipolarCylindrical}, +\axiomFun{cartesian}, +\axiomFun{conical}, +\axiomFun{cylindrical}, +\axiomFun{elliptic}, +\axiomFun{ellipticCylindrical}, +\axiomFun{oblateSpheroidal}, +\axiomFun{parabolic}, +\axiomFun{parabolicCylindrical}, +\axiomFun{paraboloidal}, +\axiomFun{polar}, +\axiomFun{prolateSpheroidal}, +\axiomFun{spherical}, and +\axiomFun{toroidal}. +Use \Browse{} or the \spadcmd{)show} system command +%-% \HDsyscmdindex{show}{ugGraphCoordPage}{7.2.7.}{Coordinate System Transformations} +to get more information. + +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphClipTitle}{Three-Dimensional Clipping} +\newcommand{\ugGraphClipNumber}{7.2.8.} +% +% ===================================================================== +\begin{page}{ugGraphClipPage}{7.2.8. Three-Dimensional Clipping} +% ===================================================================== +\beginscroll + +A \threedim{} graph can be explicitly clipped within the \axiomFun{draw} +%-% \HDindex{graphics!advanced!clip}{ugGraphClipPage}{7.2.8.}{Three-Dimensional Clipping} +command by indicating a minimum and maximum threshold for the +%-% \HDindex{clipping}{ugGraphClipPage}{7.2.8.}{Three-Dimensional Clipping} +given function definition. +These thresholds can be defined using the \Language{} \axiomFun{min} +and \axiomFun{max} functions. +\xtc{ +}{ +\begin{spadsrc}[\bound{g}] +gamma(x,y) == + g := Gamma complex(x,y) + point [x, y, max( min(real g, 4), -4), argument g] +\end{spadsrc} +} +\psXtc{ +Here is an example that clips +the gamma function in order to eliminate the extreme divergence it creates. +}{ +\graphpaste{draw(gamma,-\%pi..\%pi,-\%pi..\%pi,var1Steps==50,var2Steps==50) \free{g}} +}{ +\epsffile[0 0 295 295]{../ps/clipGamma.ps} +} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphThreeDControlTitle}{Three-Dimensional Control-Panel} +\newcommand{\ugGraphThreeDControlNumber}{7.2.9.} +% +% ===================================================================== +\begin{page}{ugGraphThreeDControlPage}{7.2.9. Three-Dimensional Control-Panel} +% ===================================================================== +\beginscroll +%-% \HDindex{graphics!3D control-panel}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +Once you have created a viewport, move your mouse to the viewport +and click with your left mouse button. +This displays a control-panel on the side of the viewport +that is closest to where you clicked. + + +\subsubsection{Transformations} + +We recommend you first select the {\bf Bounds} button while +%-% \HDindex{graphics!3D control-panel!transformations}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +executing transformations since the bounding box displayed +indicates the object's position as it changes. +% +\indent{0} +\beginitems +% +\item[Rotate:] A rotation transformation occurs by clicking the mouse +%-% \HDindex{graphics!3D control-panel!rotate}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +within the {\bf Rotate} window in the upper left corner of the +control-panel. +The rotation is computed in spherical coordinates, using the +horizontal mouse position to increment or decrement the value of +the longitudinal angle \texht{$\theta$}{\axiom{theta}} within the +range of 0 to \texht{2$\pi$}{2*pi} and the vertical mouse position +to increment or decrement the value of the latitudinal angle +\texht{$\phi$}{\axiom{phi}} within the range of \texht{-$\pi$}{pi} +to \texht{$\pi$}{pi}. +The active mode of rotation is displayed in green on a color +monitor or in clear text on a black and white monitor, while the +inactive mode is displayed in red for color display or a mottled +pattern for black and white. +% +\indent{0} +\beginitems +% +\item[origin:] The {\bf origin} button indicates that the +rotation is to occur with respect to the origin of the viewing space, that is +indicated by the axes. +% +\item[object:] The {\bf object} button indicates that the +rotation is to occur with respect to the center of volume of the object, +independent of the axes' origin position. +\enditems +\indent{0} +% +\item[Scale:] A scaling transformation occurs by clicking the mouse +%-% \HDindex{graphics!3D control-panel!scale}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +within the {\bf Scale} window in the upper center of the +control-panel, containing a zoom arrow. +The axes along which the scaling is to occur are indicated by +selecting the appropriate button above the zoom arrow window. +The selected axes are displayed in green on a color monitor or in +clear text on a black and white monitor, while the unselected axes +are displayed in red for a color display or a mottled pattern for +black and white. +% +\indent{0} +\beginitems +% +\item[uniform:] Uniform scaling along the {\tt x}, {\tt y} +and {\tt z} axes occurs when all the axes buttons are selected. +% +\item[non-uniform:] If any of the axes buttons are +not selected, non-uniform scaling occurs, that is, scaling occurs only in the +direction of the axes that are selected. +\enditems +\indent{0} +% +\item[Translate:] Translation occurs by indicating with the mouse in the +%-% \HDindex{graphics!3D control-panel!translate}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +{\bf Translate} window the direction you want the graph to move. +This window is located in the upper right corner of the +control-panel and contains a potentiometer with crossed arrows +pointing up, down, left and right. +Along the top of the {\bf Translate} window are three buttons +({\bf XY}, +{\bf XZ}, and {\bf YZ}) indicating the three orthographic projection planes. +Each orientates the group as a view into that plane. +Any translation of the graph occurs only along this plane. +\enditems +\indent{0} + +\subsubsection{Messages} +%-% \HDindex{graphics!3D control-panel!messages}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} + +The window directly below the potentiometer windows for transformations is +used to display system messages relating to the viewport, the control-panel +and the current graph displaying status. + +\subsubsection{Colormap} +%-% \HDindex{graphics!3D control-panel!color map}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} + +Directly below the message window is the colormap range indicator +window. +%-% \HDindex{colormap}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +The \Language{} Colormap shows a sampling of the spectrum from +which hues can be drawn to represent the colors of a surface. +The Colormap is composed of five shades for each of the hues along +this spectrum. +By moving the markers above and below the Colormap, the range of +hues that are used to color the existing surface are set. +The bottom marker shows the hue for the low end of the color range +and the top marker shows the hue for the upper end of the range. +Setting the bottom and top markers at the same hue results in +monochromatic smooth shading of the graph when {\bf Smooth} mode is selected. +At each end of the Colormap are {\bf +} and {\bf -} buttons. +When clicked on, these increment or decrement the top or bottom +marker. + +\subsubsection{Buttons} +%-% \HDindex{graphics!3D control-panel!buttons}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} + +Below the Colormap window and to the left are located various +buttons that determine the characteristics of a graph. +The buttons along the bottom and right hand side all have special +meanings; the remaining buttons in the first row indicate the mode +or style used to display the graph. +The second row are toggles that turn on or off a property of the +graph. +On a color monitor, the property is on if green (clear text, on a +monochrome monitor) and off if red (mottled pattern, on a +monochrome monitor). +Here is a list of their functions. +% +\indent{0} +\beginitems +% +\item[Wire] displays surface and tube plots as a +%-% \HDindex{graphics!3D control-panel!wire}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +wireframe image in a single color (blue) with no hidden surfaces removed, +or displays space curve plots in colors based upon their parametric variables. +This is the fastest mode for displaying a graph. +This is very useful when you +want to find a good orientation of your graph. +% +\item[Solid] displays the graph with hidden +%-% \HDindex{graphics!3D control-panel!solid}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +surfaces removed, drawing each polygon beginning with the furthest +from the viewer. +The edges of the polygons are displayed in the hues specified by +the range in the Colormap window. +% +\item[Shade] displays the graph with hidden +%-% \HDindex{graphics!3D control-panel!shade}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +surfaces removed and with the polygons shaded, drawing each +polygon beginning with the furthest from the viewer. +Polygons are shaded in the hues specified by the range in the +Colormap window using the Phong illumination model. +%-% \HDindex{Phong!illumination model}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +% +\item[Smooth] displays the graph using a +%-% \HDindex{graphics!3D control-panel!smooth}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +renderer that computes the graph one line at a time. +The location and color of the graph at each visible point on the +screen are determined and displayed using the Phong illumination +%-% \HDindex{Phong!illumination model}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +model. +Smooth shading is done in one of two ways, depending on the range +selected in the colormap window and the number of colors available +from the hardware and/or window manager. +When the top and bottom markers of the colormap range are set to +different hues, the graph is rendered by dithering between the +%-% \HDindex{dithering}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +transitions in color hue. +When the top and bottom markers of the colormap range are set to +the same hue, the graph is rendered using the Phong smooth shading +model. +%-% \HDindex{Phong!smooth shading model}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +However, if enough colors cannot be allocated for this purpose, +the renderer reverts to the color dithering method until a +sufficient color supply is available. +For this reason, it may not be possible to render multiple Phong +smooth shaded graphs at the same time on some systems. +% +\item[Bounds] encloses the entire volume of the +viewgraph within a bounding box, or removes the box if previously selected. +%-% \HDindex{graphics!3D control-panel!bounds}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +The region that encloses the entire volume of the viewport graph is displayed. +% +\item[Axes] displays Cartesian +%-% \HDindex{graphics!3D control-panel!axes}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +coordinate axes of the space, or turns them off if previously selected. +% +\item[Outline] causes +%-% \HDindex{graphics!3D control-panel!outline}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +quadrilateral polygons forming the graph surface to be outlined in black when +the graph is displayed in {\bf Shade} mode. +% +\item[BW] converts a color viewport to black and white, or vice-versa. +%-% \HDindex{graphics!3D control-panel!bw}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +When this button is selected the +control-panel and viewport switch to an immutable colormap composed of a range +of grey scale patterns or tiles that are used wherever shading is necessary. +% +\item[Light] takes you to a control-panel described below. +% +\item[ViewVolume] takes you to another control-panel as described below. +%-% \HDindex{graphics!3D control-panel!save}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +% +\item[Save] creates a menu of the possible file types that can +be written using the control-panel. +The {\bf Exit} button leaves the save menu. +The {\bf Pixmap} button writes an \Language{} pixmap of +%-% \HDindex{graphics!3D control-panel!pixmap}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +the current viewport contents. The file is called {\bf axiom3D.pixmap} and is +located in the directory from which \Language{} or {\bf viewAlone} was +started. +The {\bf PS} button writes the current viewport contents to +%-% \HDindex{graphics!3D control-panel!ps}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +PostScript output rather than to the viewport window. +By default the file is called {\bf axiom3D.ps}; however, if a file +%-% \HDindex{file!.Xdefaults @{\bf .Xdefaults}}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +name is specified in the user's {\bf .Xdefaults} file it is +%-% \HDindex{graphics!.Xdefaults!PostScript file name}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +used. +The file is placed in the directory from which the \Language{} or +{\bf viewAlone} session was begun. +See also the \axiomFunFrom{write}{ThreeDimensionalViewport} +function. +%-% \HDindex{PostScript}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +% +\item[Reset] returns the object transformation +%-% \HDindex{graphics!3D control-panel!reset}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +characteristics back to their initial states. +% +\item[Hide] causes the control-panel for the +%-% \HDindex{graphics!3D control-panel!hide}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +corresponding viewport to disappear from the screen. +% +\item[Quit] queries whether the current viewport +%-% \HDindex{graphics!3D control-panel!quit}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +session should be terminated. +\enditems +\indent{0} + +\subsubsection{Light} +%-% \HDindex{graphics!3D control-panel!light}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} + +% +%>>>\begin{texonly} +% +%>>>\begin{figure}[htbp] +%>>>\begin{picture}(183,252)(-125,0) +%>>>\special{psfile=../ps/3Dlight.ps} +%>>>\end{picture} +%>>>\caption{Three-Dimensional Lighting Panel.} +%>>>\end{figure} +%>>>\end{texonly} +% + +The {\bf Light} button changes the control-panel into the +{\bf Lighting Control-Panel}. At the top of this panel, the three axes +are shown with the same orientation as the object. A light vector from +the origin of the axes shows the current position of the light source +relative to the object. At the bottom of the panel is an {\bf Abort} +button that cancels any changes to the lighting that were made, and a +{\bf Return} button that carries out the current set of lighting changes +on the graph. +% +\indent{0} +\beginitems +% +\item[XY:] The {\bf XY} lighting axes window is below the +%-% \HDindex{graphics!3D control-panel!move xy}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +{\bf Lighting Control-Panel} title and to the left. +This changes the light vector within the {\bf XY} view plane. +% +\item[Z:] The {\bf Z} lighting axis window is below the +%-% \HDindex{graphics!3D control-panel!move z}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +{\bf Lighting Control-Panel} title and in the center. This +changes the {\bf Z} +location of the light vector. +% +\item[Intensity:] +Below the {\bf Lighting Control-Panel} title +%-% \HDindex{graphics!3D control-panel!intensity}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +and to the right is the light intensity meter. +Moving the intensity indicator down decreases the amount of +light emitted from the light source. +When the indicator is at the top of the meter the light source is +emitting at 100\% intensity. +At the bottom of the meter the light source is emitting at a level +slightly above ambient lighting. +\enditems +\indent{0} + +\subsubsection{View Volume} +%-% \HDindex{graphics!3D control-panel!view volume}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} + +The {\bf View Volume} button changes the control-panel into +the {\bf Viewing Volume Panel}. +At the bottom of the viewing panel is an {\bf Abort} button that +cancels any changes to the viewing volume that were made and a +{\it Return} button that carries out the current set of +viewing changes to the graph. +% +%>>>\begin{texonly} +% +%>>>\begin{figure}[htbp] +%>>>\begin{picture}(183,252)(-125,0) +%>>>\special{psfile=../ps/3Dvolume.ps} +%>>>\end{picture} +%>>>\caption{Three-Dimensional Volume Panel.} +%>>>\end{figure} +%>>>\end{texonly} +% +\indent{0} +\beginitems +% +\item[Eye Reference:] At the top of this panel is the +%-% \HDindex{graphics!3D control-panel!eye reference}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +{\bf Eye Reference} window. +It shows a planar projection of the viewing pyramid from the eye +of the viewer relative to the location of the object. +This has a bounding region represented by the rectangle on the +left. +Below the object rectangle is the {\bf Hither} window. +By moving the slider in this window the hither clipping plane sets +%-% \HDindex{hither clipping plane}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +the front of the view volume. +As a result of this depth clipping all points of the object closer +to the eye than this hither plane are not shown. +The {\bf Eye Distance} slider to the right of the {\bf Hither} +slider is used to change the degree of perspective in the image. +% +\item[Clip Volume:] The {\bf Clip Volume} window is at the +%-% \HDindex{graphics!3D control-panel!clip volume}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +bottom of the {\bf Viewing Volume Panel}. +On the right is a {\bf Settings} menu. +In this menu are buttons to select viewing attributes. +Selecting the {\bf Perspective} button computes the image using +perspective projection. +%-% \HDindex{graphics!3D control-panel!perspective}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +The {\bf Show Region} button indicates whether the clipping region +of the +%-% \HDindex{graphics!3D control-panel!show clip region}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +volume is to be drawn in the viewport and the {\bf Clipping On} +button shows whether the view volume clipping is to be in effect +when the image +%-% \HDindex{graphics!3D control-panel!clipping on}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +is drawn. +The left side of the {\bf Clip Volume} window shows the clipping +%-% \HDindex{graphics!3D control-panel!clip volume}{ugGraphThreeDControlPage}{7.2.9.}{Three-Dimensional Control-Panel} +boundary of the graph. +Moving the knobs along the {\bf X}, {\bf Y}, and {\bf Z} sliders +adjusts the volume of the clipping region accordingly. +\enditems +\indent{0} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugGraphThreeDopsTitle}{Operations for Three-Dimensional Graphics} +\newcommand{\ugGraphThreeDopsNumber}{7.2.10.} +% +% ===================================================================== +\begin{page}{ugGraphThreeDopsPage}{7.2.10. Operations for Three-Dimensional Graphics} +% ===================================================================== +\beginscroll + +Here is a summary of useful \Language{} operations for \threedim{} +graphics. +Each operation name is followed by a list of arguments. +Each argument is written as a variable informally named according +to the type of the argument (for example, {\it integer}). +If appropriate, a default value for an argument is given in +parentheses immediately following the name. + +% +\texht{\bgroup\hbadness = 10001\sloppy}{} +\indent{0} +\beginitems +% +\item[\axiomFun{adaptive3D?}]\funArgs{} +tests whether space curves are to be plotted +%-% \HDindex{graphics!plot3d defaults!adaptive}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +according to the +%-% \HDindex{adaptive plotting}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +adaptive refinement algorithm. + +% +\item[\axiomFun{axes}]\funArgs{viewport, string\argDef{"on"}} +turns the axes on and off. +%-% \HDindex{graphics!3D commands!axes}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} + +% +\item[\axiomFun{close}]\funArgs{viewport} +closes the viewport. +%-% \HDindex{graphics!3D commands!close}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} + +% +\item[\axiomFun{colorDef}]\funArgs{viewport, +\subscriptIt{color}{1}\argDef{1}, \subscriptIt{color}{2}\argDef{27}} +sets the colormap +%-% \HDindex{graphics!3D commands!define color}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +range to be from +\subscriptIt{color}{1} to \subscriptIt{color}{2}. + +% +\item[\axiomFun{controlPanel}]\funArgs{viewport, string\argDef{"off"}} +declares whether the +%-% \HDindex{graphics!3D commands!control-panel}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +control-panel for the viewport is to be displayed or not. + +% +\item[\axiomFun{diagonals}]\funArgs{viewport, string\argDef{"off"}} +declares whether the +%-% \HDindex{graphics!3D commands!diagonals}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +polygon outline includes the diagonals or not. + +% +\item[\axiomFun{drawStyle}]\funArgs{viewport, style} +selects which of four drawing styles +%-% \HDindex{graphics!3D commands!drawing style}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +are used: {\tt "wireMesh", "solid", "shade",} or {\tt "smooth".} + +% +\item[\axiomFun{eyeDistance}]\funArgs{viewport,float\argDef{500}} +sets the distance of the eye from the origin of the object +%-% \HDindex{graphics!3D commands!eye distance}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +for use in the \axiomFunFrom{perspective}{ThreeDimensionalViewport}. + +% +\item[\axiomFun{key}]\funArgs{viewport} +returns the operating +%-% \HDindex{graphics!3D commands!key}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +system process ID number for the viewport. + +% +\item[\axiomFun{lighting}]\funArgs{viewport, +\subscriptText{float}{x}\argDef{-0.5}, +\subscriptText{float}{y}\argDef{0.5}, \subscriptText{float}{z}\argDef{0.5}} +sets the Cartesian +%-% \HDindex{graphics!3D commands!lighting}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +coordinates of the light source. + +% +\item[\axiomFun{modifyPointData}]\funArgs{viewport,integer,point} +replaces the coordinates of the point with +%-% \HDindex{graphics!3D commands!modify point data}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +the index {\it integer} with {\it point}. + +% +\item[\axiomFun{move}]\funArgs{viewport, +\subscriptText{integer}{x}\argDef{viewPosDefault}, +\subscriptText{integer}{y}\argDef{viewPosDefault}} +moves the upper +%-% \HDindex{graphics!3D commands!move}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +left-hand corner of the viewport to screen position +\allowbreak +({\small \subscriptText{integer}{x}, \subscriptText{integer}{y}}). + +% +\item[\axiomFun{options}]\funArgs{viewport} +returns a list of all current draw options. + +% +\item[\axiomFun{outlineRender}]\funArgs{viewport, string\argDef{"off"}} +turns polygon outlining +%-% \HDindex{graphics!3D commands!outline}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +off or on when drawing in {\tt "shade"} mode. + +% +\item[\axiomFun{perspective}]\funArgs{viewport, string\argDef{"on"}} +turns perspective +%-% \HDindex{graphics!3D commands!perspective}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +viewing on and off. + +% +\item[\axiomFun{reset}]\funArgs{viewport} +resets the attributes of a viewport to their +%-% \HDindex{graphics!3D commands!reset}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +initial settings. + +% +\item[\axiomFun{resize}]\funArgs{viewport, +\subscriptText{integer}{width} \argDef{viewSizeDefault}, +\subscriptText{integer}{height} \argDef{viewSizeDefault}} +resets the width and height +%-% \HDindex{graphics!3D commands!resize}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +values for a viewport. + +% +\item[\axiomFun{rotate}]\funArgs{viewport, +\subscriptText{number}{\texht{$\theta$}{\axiom{theta}}}\argDef{viewThetaDefault}, +\subscriptText{number}{\texht{$\phi$}{\axiom{phi}}}\argDef{viewPhiDefault}} +rotates the viewport by rotation angles for longitude +({\it \texht{$\theta$}{\axiom{theta}}}) and +latitude ({\it \texht{$\phi$}{\axiom{phi}}}). +Angles designate radians if given as floats, or degrees if given +%-% \HDindex{graphics!3D commands!rotate}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +as integers. + +% +\item[\axiomFun{setAdaptive3D}]\funArgs{boolean\argDef{true}} +sets whether space curves are to be plotted +%-% \HDindex{graphics!plot3d defaults!set adaptive}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +according to the adaptive +%-% \HDindex{adaptive plotting}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +refinement algorithm. + +% +\item[\axiomFun{setMaxPoints3D}]\funArgs{integer\argDef{1000}} + sets the default maximum number of possible +%-% \HDindex{graphics!plot3d defaults!set max points}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +points to be used when constructing a \threedim{} space curve. + +% +\item[\axiomFun{setMinPoints3D}]\funArgs{integer\argDef{49}} +sets the default minimum number of possible +%-% \HDindex{graphics!plot3d defaults!set min points}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +points to be used when constructing a \threedim{} space curve. + +% +\item[\axiomFun{setScreenResolution3D}]\funArgs{integer\argDef{500}} +sets the default screen resolution constant +%-% \HDindex{graphics!plot3d defaults!set screen resolution}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +used in setting the computation limit of adaptively +%-% \HDindex{adaptive plotting}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +generated \threedim{} space curve plots. + +% +\item[\axiomFun{showRegion}]\funArgs{viewport, string\argDef{"off"}} +declares whether the bounding +%-% \HDindex{graphics!3D commands!showRegion}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +box of a graph is shown or not. +% +\item[\axiomFun{subspace}]\funArgs{viewport} +returns the space component. +% +\item[\axiomFun{subspace}]\funArgs{viewport, subspace} +resets the space component +%-% \HDindex{graphics!3D commands!subspace}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +to {\it subspace}. + +% +\item[\axiomFun{title}]\funArgs{viewport, string} +gives the viewport the +%-% \HDindex{graphics!3D commands!title}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +title {\it string}. + +% +\item[\axiomFun{translate}]\funArgs{viewport, +\subscriptText{float}{x}\argDef{viewDeltaXDefault}, +\subscriptText{float}{y}\argDef{viewDeltaYDefault}} +translates +%-% \HDindex{graphics!3D commands!translate}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +the object horizontally and vertically relative to the center of the viewport. + +% +\item[\axiomFun{intensity}]\funArgs{viewport,float\argDef{1.0}} +resets the intensity {\it I} of the light source, +%-% \HDindex{graphics!3D commands!intensity}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +\texht{$0 \le I \le 1.$}{{\it 0 \le I \le 1}.} + +% +\item[\axiomFun{tubePointsDefault}]\funArgs{\optArg{integer\argDef{6}}} +sets or indicates the default number of +%-% \HDindex{graphics!3D defaults!tube points}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +vertices defining the polygon that is used to create a tube around +a space curve. + +% +\item[\axiomFun{tubeRadiusDefault}]\funArgs{\optArg{float\argDef{0.5}}} +sets or indicates the default radius of +%-% \HDindex{graphics!3D defaults!tube radius}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +the tube that encircles a space curve. + +% +\item[\axiomFun{var1StepsDefault}]\funArgs{\optArg{integer\argDef{27}}} +sets or indicates the default number of +%-% \HDindex{graphics!3D defaults!var1 steps}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +increments into which the grid defining a surface plot is subdivided with +respect to the first parameter declared in the surface function. + +% +\item[\axiomFun{var2StepsDefault}]\funArgs{\optArg{integer\argDef{27}}} +sets or indicates the default number of +%-% \HDindex{graphics!3D defaults!var2 steps}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +increments into which the grid defining a surface plot is subdivided with +respect to the second parameter declared in the surface function. + +% +\item[\axiomFun{viewDefaults}]\funArgs{{\tt [}\subscriptText{integer}{% +point}, \subscriptText{integer}{line}, \subscriptText{integer}{axes}, +\subscriptText{integer}{units}, \subscriptText{float}{point}, +\allowbreak\subscriptText{list}{position}, +\subscriptText{list}{size}{\tt ]}} +resets the default settings for the +%-% \HDindex{graphics!3D defaults!reset viewport defaults}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +point color, line color, axes color, units color, point size, +viewport upper left-hand corner position, and the viewport size. + +% +\item[\axiomFun{viewDeltaXDefault}]\funArgs{\optArg{float\argDef{0}}} +resets the default horizontal offset +%-% \HDindex{graphics!3D commands!deltaX default}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +from the center of the viewport, or returns the current default offset if no argument is given. + +% +\item[\axiomFun{viewDeltaYDefault}]\funArgs{\optArg{float\argDef{0}}} +resets the default vertical offset +%-% \HDindex{graphics!3D commands!deltaY default}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +from the center of the viewport, or returns the current default offset if no argument is given. + +% +\item[\axiomFun{viewPhiDefault}]\funArgs{\optArg{float\argDef{-\texht{$\pi$}{{\it pi}}/4}}} +resets the default latitudinal view angle, +or returns the current default angle if no argument is given. +%-% \HDindex{graphics!3D commands!phi default}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +\texht{$\phi$}{{\it phi}} is set to this value. + +% +\item[\axiomFun{viewpoint}]\funArgs{viewport, \subscriptText{float}{x}, +\subscriptText{float}{y}, \subscriptText{float}{z}} +sets the viewing position in Cartesian coordinates. + +% +\item[\axiomFun{viewpoint}]\funArgs{viewport, +\subscriptText{float}{\texht{$\theta$}{\axiom{theta}}}, +\subscriptText{Float}{\texht{$\phi$}{\axiom{phi}}}} +sets the viewing position in spherical coordinates. + +% +\item[\axiomFun{viewpoint}]\funArgs{viewport, +\subscriptText{Float}{\texht{$\theta$}{\axiom{theta}}}, +\subscriptText{Float}{\texht{$\phi$}{\axiom{phi}}}, +\subscriptText{Float}{scaleFactor}, +\subscriptText{Float}{xOffset}, \subscriptText{Float}{yOffset}} +sets the viewing position in spherical coordinates, +the scale factor, and offsets. +%-% \HDindex{graphics!3D commands!viewpoint}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +\texht{$\theta$}{{\it theta}} (longitude) and +\texht{$\phi$}{{\it phi}} (latitude) are in radians. + +% +\item[\axiomFun{viewPosDefault}]\funArgs{\optArg{list\argDef{[0,0]}}} +sets or indicates the position of the upper +%-% \HDindex{graphics!3D defaults!viewport position}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +left-hand corner of a \twodim{} viewport, relative to the display root +window (the upper left-hand corner of the display is \axiom{[0, 0]}). + +% +\item[\axiomFun{viewSizeDefault}]\funArgs{\optArg{list\argDef{[400,400]}}} +sets or indicates the width and height dimensions +%-% \HDindex{graphics!3D defaults!viewport size}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +of a viewport. + +% +\item[\axiomFun{viewThetaDefault}]\funArgs{\optArg{float\argDef{\texht{$\pi$}{{\it pi}}/4}}} +resets the default longitudinal view angle, +or returns the current default angle if no argument is given. +%-% \HDindex{graphics!3D commands!theta default}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +When a parameter is specified, the default longitudinal view angle +\texht{$\theta$}{{\it theta}} is set to this value. + +% +\item[\axiomFun{viewWriteAvailable}]\funArgs{\optArg{list\argDef{["pixmap", +"bitmap", "postscript", "image"}}} +indicates the possible file types +%-% \HDindex{graphics!3D defaults!available viewport writes}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +that can be created with the \axiomFunFrom{write}{ThreeDimensionalViewport} function. + +% +\item[\axiomFun{viewWriteDefault}]\funArgs{\optArg{list\argDef{[]}}} +sets or indicates the default types of files +that are created in addition to the {\bf data} file when a +\axiomFunFrom{write}{ThreeDimensionalViewport} command +%-% \HDindex{graphics!3D defaults!viewport writes}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +is executed on a viewport. + +% +\item[\axiomFun{viewScaleDefault}]\funArgs{\optArg{float}} +sets the default scaling factor, or returns +%-% \HDindex{graphics!3D commands!scale default}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +the current factor if no argument is given. + +% +\item[\axiomFun{write}]\funArgs{viewport, directory, \optArg{option}} +writes the file {\bf data} for {\it viewport} +in the directory {\it directory}. +An optional third argument specifies a file type (one of {\tt +pixmap}, {\tt bitmap}, {\tt postscript}, or {\tt image}), or a +list of file types. +An additional file is written for each file type listed. + +% +\item[\axiomFun{scale}]\funArgs{viewport, float\argDef{2.5}} +specifies the scaling factor. +%-% \HDindex{graphics!3D commands!scale}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +%-% \HDindex{scaling graphs}{ugGraphThreeDopsPage}{7.2.10.}{Operations for Three-Dimensional Graphics} +\enditems +\indent{0} +\texht{\egroup}{} + +\endscroll +\autobuttons +\end{page} +% +% +\newcommand{\ugXdefaultsTitle}{Customization using .Xdefaults} +\newcommand{\ugXdefaultsNumber}{7.2.11.} +% +% ===================================================================== +\begin{page}{ugXdefaultsPage}{7.2.11. Customization using .Xdefaults} +% ===================================================================== +\beginscroll +%-% \HDindex{graphics!.Xdefaults}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} + +Both the \twodim{} and \threedim{} drawing facilities consult +the {\bf .Xdefaults} file for various defaults. +%-% \HDindex{file!.Xdefaults @{\bf .Xdefaults}}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +The list of defaults that are recognized by the graphing routines +is discussed in this section. +These defaults are preceded by {\tt Axiom.3D.} +for \threedim{} viewport defaults, {\tt Axiom.2D.} +for \twodim{} viewport defaults, or {\tt Axiom*} (no dot) for +those defaults that are acceptable to either viewport type. + +% +\indent{0} +\beginitems +% +\item[{\tt Axiom*buttonFont:\ \it font}] \ \newline +This indicates which +%-% \HDindex{graphics!.Xdefaults!button font}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +font type is used for the button text on the control-panel. +\xdefault{Rom11} +% +\item[{\tt Axiom.2D.graphFont:\ \it font}] \quad (2D only) \newline +This indicates +%-% \HDindex{graphics!.Xdefaults!graph number font}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +which font type is used for displaying the graph numbers and +slots in the {\bf Graphs} section of the \twodim{} control-panel. +\xdefault{Rom22} +% +\item[{\tt Axiom.3D.headerFont:\ \it font}] \ \newline +This indicates which +%-% \HDindex{graphics!.Xdefaults!graph label font}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +font type is used for the axes labels and potentiometer +header names on \threedim{} viewport windows. +This is also used for \twodim{} control-panels for indicating +which font type is used for potentionmeter header names and +multiple graph title headers. +%for example, {\tt Axiom.2D.headerFont: 8x13}. +\xdefault{Itl14} +% +\item[{\tt Axiom*inverse:\ \it switch}] \ \newline +This indicates whether the +%-% \HDindex{graphics!.Xdefaults!inverting background}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +background color is to be inverted from white to black. +If {\tt on}, the graph viewports use black as the background +color. +If {\tt off} or no declaration is made, the graph viewports use a +white background. +\xdefault{off} +% +\item[{\tt Axiom.3D.lightingFont:\ \it font}] \quad (3D only) \newline +This indicates which font type is used for the {\bf x}, +%-% \HDindex{graphics!.Xdefaults!lighting font}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +{\bf y}, and {\bf z} labels of the two lighting axes potentiometers, and for +the {\bf Intensity} title on the lighting control-panel. +\xdefault{Rom10} +% +\item[{\tt Axiom.2D.messageFont, Axiom.3D.messageFont:\ \it font}] \ \newline +These indicate the font type +%-% \HDindex{graphics!.Xdefaults!message font}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +to be used for the text in the control-panel message window. +\xdefault{Rom14} +% +\item[{\tt Axiom*monochrome:\ \it switch}] \ \newline +This indicates whether the +%-% \HDindex{graphics!.Xdefaults!monochrome}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +graph viewports are to be displayed as if the monitor is black and +white, that is, a 1 bit plane. +If {\tt on} is specified, the viewport display is black and white. +If {\tt off} is specified, or no declaration for this default is +given, the viewports are displayed in the normal fashion for the +monitor in use. +\xdefault{off} +% +\item[{\tt Axiom.2D.postScript:\ \it filename}] \ \newline +This specifies +%-% \HDindex{graphics!.Xdefaults!PostScript file name}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +the name of the file that is generated when a 2D PostScript graph +%-% \HDindex{PostScript}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +is saved. +\xdefault{axiom2D.ps} +% +\item[{\tt Axiom.3D.postScript:\ \it filename}] \ \newline +This specifies +%-% \HDindex{graphics!.Xdefaults!PostScript file name}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +the name of the file that is generated when a 3D PostScript graph +%-% \HDindex{PostScript}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +is saved. +\xdefault{axiom3D.ps} +% +\item[{\tt Axiom*titleFont \it font}] \ \newline +This +%-% \HDindex{graphics!.Xdefaults!title font}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +indicates which font type is used +for the title text and, for \threedim{} graphs, +in the lighting and viewing-volume control-panel windows. +%-% \HDindex{graphics!Xdefaults!2d}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +\xdefault{Rom14} +% +\item[{\tt Axiom.2D.unitFont:\ \it font}] \quad (2D only) \newline +This indicates +%-% \HDindex{graphics!.Xdefaults!unit label font}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +which font type is used for displaying the unit labels on +\twodim{} viewport graphs. +\xdefault{6x10} +% +\item[{\tt Axiom.3D.volumeFont:\ \it font}] \quad (3D only) \newline +This indicates which font type is used for the {\bf x}, +%-% \HDindex{graphics!.Xdefaults!volume label font}{ugXdefaultsPage}{7.2.11.}{Customization using .Xdefaults} +{\bf y}, and {\bf z} labels of the clipping region sliders; for the +{\bf Perspective}, {\bf Show Region}, and {\bf Clipping On} buttons under +{\bf Settings}, and above the windows for the {\bf Hither} and +{\bf Eye Distance} sliders in the {\bf Viewing Volume Panel} of the +\threedim{} control-panel. +\xdefault{Rom8} +\enditems +\indent{0} +\endscroll +\autobuttons +\end{page} +% -- cgit v1.2.3