% This notebook demonstrates 3D graphics.
% 
% The simplest form is the use of f3dplot with an expression
% or with a function f(x,y).
>reset; f3dplot("x^2+y^3"); wait(20);
% To plot 3D graphics, we need a matrix of x and y values
% for points in a rectangular grid. We can simply use a
% column vector for x and a row vector for y.
>x=-1:0.05:1; y=x';
% The simplest form of plot is a mesh grid. The function
% graph is viewed from a point (-r,r,z), where r is infinity,
% since mesh uses a very simple projection. The plot scales
% to the window automatically.
% 
% Note that x^2+y^3 evaluates into a matrix.
>mesh(x^2+y^3); wait(20);
% The same function can be view with a better projection
% from any viewpoint using the function solid. It needs
% three paramters, each a matrix of values, for the
% x-, y- and z-coordinates of the surface.
>reset; solid(x,y,x^2+y^3); wait(20);
% You can change the viewpoint. We go a little closer
% and a little lower with the eye. The view command
% needs a distance, a zoom factor, the horizontal angle
% and the vertical angle. Default is view(5,1.5,0.5,0.5).
>view(3,1.5,0.8,0); solid(x,y,x^2+y^3); wait(20);
% Going back a little, we can also draw a frame around
% the plot.
>view(5,2,0.8,0.5); framedsolid(x,y,x^2+y^3,0,0,0); wait(20);
% You can also let the system draw grids and ticks
>framedsolid(x,y,x^2+y^3);wait(20);
% We could also change the coordinates.
>framedsolid(x,x^2+y^3,y); wait(20);
% Therefore, we can also plot surfaces. Let us draw a ball.
>X=cos(pi*x)*cos(pi*y/2); Y=sin(pi*x)*cos(pi*y/2); Z=sin(pi*y/2);
>solid(X,Y,Z); wait(20);
% The function "solidhue" takes the shading as an additional
% argument.
>solidhue(X,Y,Z,X+Z,1); wait(20);
% The function "huecolor" sets the basic color for shading. The special
% value 0 set shading to rainbow colors.
>huecolor(0);solidhue(X,Y,Z,X+Z,1);huecolor(1);wait(20);
% Distort it a little bit.
>solid(cos(pi*x)^3*cos(pi*y/2),sin(pi*x)*cos(pi*y/2),sin(pi*y/2)); wait(20);
% Let us go closer.
>view(3,2,0.8,0.5);
% And view a wire frame model.
>wire(cos(pi*x)^3*cos(pi*y/2),sin(pi*x)*cos(pi*y/2),sin(pi*y/2)); wait(20);
% There is a utility file, which contains some nice
% things in this area.
>load "3dplot.e";
Nicer 3D plots
% We first provide our well known function.
>function f(x,y)
$return x^2+y^3
$endfunction
% f3d makes a normal plot with axis. The parameter range
% is -1 <= x,y <=1.
>f3d("f"); wait(20);
% We can do the same using an expression in x and y.
>f3d("x^2+y^3"); wait(20);
% A contour plot of the same data.
>fcontour("f"); wait(20);
>fcontour("x^2+y^3"); wait(20);
% If you want certain contour lines to be thicker, this
% is also possible. We use the normal contour function
% with a larger line width. The last plot did not show
% the contour line of level 0.
>linewidth(3); hold on; contour(f(x,y),0); hold off; linewidth(1); wait(20);
% We could also add a grid.
>setplot(-1,1,-1,1); xplot(); wait(20);
% And a title.
>title("x^2+y^3"); wait(20);
% Here is a density plot of the same functions. It is darker,
% where the function values are lower.
>density(x^2+y^3,1); wait(20);
% We can overlay it with the contour lines.
>hold on; contour(x^2+y^3,-10:0.1:10); hold off; wait(20);
% Even with grid lines.
>setplot(-1,1,-1,1); xplot(); wait(20);
% The same in color
>huecolor(0);density(x^2+y^3,1);hold on;contour(x^2+y^3,-10:0.1:10);hold off;huecolor(1);setplot(-1,1,-1,1);xplot();wait(20);
% This is another use of shading. We can see the function
% values more clearly.
>reset; framedsolidhue(x,y,(x^2+y^3),x^2+y^3,2,1); wait(20);
% The same in color ...
>huecolor(0); framedsolidhue(x,y,(x^2+y^3),x^2+y^3,2,1); huecolor(1); wait(20);
% The function "huegrid" enables or disables the surface mapping with
% a grid.
>view(5,1.5,0.8,0.5);huecolor(0);huegrid(1); framedsolidhue(x,y,(x^2+y^3),x^2+y^3,2,1); huegrid(0);huecolor(1); wait(20);
>
