contour

Scilab Function
Last update : 25/04/2007

contour - level curves on a 3D surface

### Calling Sequence

  `contour(x,y,z,nz,[theta,alpha,leg,flag,ebox,zlev])`
  `contour(x,y,z,nz,<opt_args>)`

### Parameters

- `x,y` : two real row vectors of size n1 and n2.
- `z` : real matrix of size (n1,n2), the values of the function or a Scilab function which defines the surface `z=f(x,y)` .
- `nz` : the level values or the number of levels.
  - `-` If `nz` is an integer, its value gives the number of level curves equally spaced from zmin to zmax as follows:

         z= zmin + (1:nz)*(zmax-zmin)/(nz+1)

    Note that the `zmin` and `zmax` levels are not drawn (generically they are reduced to points) but they can be added with

         [im,jm] = find(z == zmin);     // or zmax
         plot2d(x(im)',y(jm)',-9,"000")

  - `-` If `nz` is a vector, `nz(i)` gives the value of the ith level curve. Note that it can be useful in order to see `zmin` and `zmax` level curves to add an epsilon tolerance: `nz=[zmin+%eps,..,zmax-%eps]` .
- `<opt_args>` : a sequence of statements `key1=value1, key2=value2` , ... where keys may be `theta` ,`alpha` ,`leg` ,`flag` , `ebox` ,`zlev` (see below). In this case, the order has no special meaning.
- `theta, alpha` : real values giving in degree the spherical coordinates of the observation point.
- `leg` : string defining the captions for each axis with @ as a field separator, for example "X@Y@Z".
- `flag` : a real vector of size three `flag=[mode,type,box]` .
  - `mode` : string representation mode.
    - `mode=0:` the level curves are drawn on the surface defined by (x,y,z).
    - `mode=1:` the level curves are drawn on a 3D plot and on the plan defined by the equation z=zlev.
    - `mode=2:` the level curves are drawn on a 2D plot.
  - `type` : an integer (scaling).
    - `type=0` the plot is made using the current 3D scaling (set by a previous call to `param3d` , `plot3d` , `contour` or `plot3d1` ).
    - `type=1` rescales automatically 3d boxes with extreme aspect ratios, the boundaries are specified by the value of the optional argument `ebox` .
    - `type=2` rescales automatically 3d boxes with extreme aspect ratios, the boundaries are computed using the given data.
    - `type=3` 3d isometric with box bounds given by optional `ebox` , similarily to `type=1`
    - `type=4` 3d isometric bounds derived from the data, to similarily`type=2`
    - `type=5` 3d expanded isometric bounds with box bounds given by optional `ebox` , similarily to `type=1`
    - `type=6` 3d expanded isometric bounds derived from the data, similarily to `type=2`
  - `box` : an integer (frame around the plot).
    - `box=0` nothing is drawn around the plot.
    - `box=1` unimplemented (like box=0).
    - `box=2` only the axes behind the surface are drawn.
    - `box=3` a box surrounding the surface is drawn and captions are added.
    - `box=4` a box surrounding the surface is drawn, captions and axes are added.
- `ebox` : used when `type` in `flag` is 1. It specifies the boundaries of the plot as the vector `[xmin,xmax,ymin,ymax,zmin,zmax]` .
- `zlev` : real number.

### Description

`contour` draws level curves of a surface z=f(x,y). The level curves are drawn on a 3D surface. The optional arguments are the same as for the function `plot3d` (except `zlev` ) and their meanings are the same. They control the drawing of level curves on a 3D plot. Only `flag(1)=mode` has a special meaning.

  mode=0: the level curves are drawn on the surface defined by (x,y,z).
  mode=1: the level curves are drawn on a 3D plot and on the plan defined by the equation z=zlev.
  mode=2: the level curves are drawn on a 2D plot.

You can change the format of the floating point number printed on the levels by using `xset("fpf",string)` where `string` gives the format in C format syntax (for example `string="%.3f"` ). Use `string=""` to switch back to default format and Use `string=" "` to suppress printing.

Usually we use `contour2d` to draw levels curves on a 2D plot.

Enter the command `contour()` to see a demo.

### Examples

    t=linspace(-%pi,%pi,30);
    function z=my_surface(x,y),z=x*sin(x)^2*cos(y),endfunction

    contour(t,t,my_surface,10)
    // changing the format of the printing of the levels
    xset("fpf","%.1f")
    xbasc()
    contour(t,t,my_surface,10)
    // 3D
    xbasc()
    z=feval(t,t,my_surface);
    plot3d(t,t,z);contour(t,t,z+0.2*abs(z),20,flag=[0 2 4]);
    //

### See Also

`contour2d` , `plot3d` ,

### Author

J.Ph.C.