contour2dm compute level curves of a surface defined with a mesh

## Syntax

    [xc, yc] = contour2dm(x, y, polygons, func, nz)

## Arguments

x, y

  two vectors of size `n`, `(x(i),y(i))` gives the coordinates of node `i`.

polygons

  is a `[Ntr,N+2]` matrix. Each line of `polygons` specifies a convex polygon of the mesh `polygons(j) = [number,node1,node2,node3, ..., nodeN, flag]`. `node1,node2,node3, ..., nodeN` are the number of the nodes which constitutes the polygon. number is the number of the polygons and flag is an integer not used in the `contour2dm` function.

func

  a vector of size `n` : `func(i)` gives the value at node `i` of the function.

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)

  If `nz` is a vector

    `nz(i)` gives the value of the `i`-th level curve.

xc, yc

  vectors of identical sizes containing the contours definitions. See below for details.

## Description

`contour2dm` computes level curves of a surface `z = f(x, y)` on a 2D plot. The values of `f(x,y)` are given by the matrix `z` at the points of the mesh defined by `x` and `y`.

`xc(1)` contains the level associated with first contour path, `yc(1)` contains the number `N1` of points defining this contour path and (`xc(1+(1:N1))`, `yc(1+(1:N1))` ) contain the coordinates of the paths points. The second path begin at `xc(2+N1)` and `yc(2+N1)` and so on.

Note that some loops can appear on a level curve when some vertexes of polygons as the same value as the level one. See example #2

## Examples

    m = [6 5 4; ...
               6 2 5; ...
               6 4 1; ...
               5 2 3];

    nodes = [55  20; ...
              85  5; ...
              100 10; ...
              75  30; ...
              80  20; ...
              70  15];
    z_fec = [-1 -1 0 0 1 1];

    f = scf();
    f.color_map = jetcolormap(12);
    fec(nodes(:, 1), nodes(:, 2), [(1:size(m, 1))', m, (1:size(m, 1))'], z_fec);
    [xc, yc] = contour2dm(nodes(:,1), nodes(:,2), [(1:size(m, 1))', m, (1:size(m, 1))'], z_fec, [-0.5, 0, 0.5]);
    k=1;n=yc(k);c=1;
    N = size(xc, '*')
    while k <= N & k+yc(k)<=N
      n=yc(k);
      plot2d(xc(k+(1:n)),yc(k+(1:n)));
      c=c+1;
      k=k+n+1;
    end

m = [6 5 4; ... 6 2 5; ... 6 4 1; ... 5 2 3]; nodes = [55 20; ... 85 5; ... 100 10; ... 75 30; ... 80 20; ... 70 15]; z_fec = [-1 -1 0 0 1 1]; f = scf(); f.color_map = jetcolormap(12); fec(nodes(:, 1), nodes(:, 2), [(1:size(m, 1))', m, (1:size(m, 1))'], z_fec); [xc, yc] = contour2dm(nodes(:,1), nodes(:,2), [(1:size(m, 1))', m, (1:size(m, 1))'], z_fec, [-0.5, 0, 0.5]); k=1;n=yc(k);c=1; N = size(xc, '*'); while k <= N & k+yc(k) <=N n=yc(k); plot2d(xc(k+(1:n)),yc(k+(1:n))) c=c+1; k=k+n+1; end

    f=scf();
    f.color_map = jetcolormap(3);
    m = [1  2  3; ...
         1  3  4; ...
         3  4  5; ...
         6  2  3; ...
         7  6  3; ...
         7  3  5; ...
         7  5  8; ...
         2  9  6; ...
         9  6  10; ...
         6  7  10; ...
         10 11 7; ...
         7  8  12; ...
         9  10 13; ...
         7  10 11; ...
         7  12 11; ...
         13 10 14; ...
         10 11 14; ...
         11 14 15; ...
         11 12 15];

    nodes = [0  50; ... //1
             20 60; ... //2
             15 40; ... //3
             0  30; ... //4
             20 20; ... //5
             30 45; ... //6
             27 25; ... //7
             26 10; ... //8
             35 65; ... //9
             40 42; ... //10
             45 30; ... //11
             42 15; ... //12
             50 62; ... //13
             55 40; ... //14
             53 17]; //15

    z = [0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 2, 2, 2];

    nb_mesh = [(1:size(m, 1))', m, (1:size(m, 1))'];
    fec(nodes(:, 1), nodes(:, 2), nb_mesh, z, mesh=%t);
    e=gce();
    e.children.foreground = -2;

    // Contour2dm
    [xc, yc] = contour2dm(nodes(:,1), nodes(:,2), nb_mesh, z, linspace(0,3,4));
    k=1;n=yc(k);c=1;
    N = size(xc, '*');
    while k <= N & k+yc(k)<=N
        n=yc(k);
        plot2d(xc(k+(1:n)),yc(k+(1:n)));
        e=gce();
        e.children.foreground = -1;
        c=c+1;
        k=k+n+1;
    end
    // Here we have a loop in the green part because each vertex on this level curve is equal to 1.
    // To be clearer, let us change the color_map
    f.color_map = jetcolormap(1024);

f=scf(); f.color_map = jetcolormap(3); m = [1 2 3; ... 1 3 4; ... 3 4 5; ... 6 2 3; ... 7 6 3; ... 7 3 5; ... 7 5 8; ... 2 9 6; ... 9 6 10; ... 6 7 10; ... 10 11 7; ... 7 8 12; ... 9 10 13; ... 7 10 11; ... 7 12 11; ... 13 10 14; ... 10 11 14; ... 11 14 15; ... 11 12 15]; nodes = [0 50; ... //1 20 60; ... //2 15 40; ... //3 0 30; ... //4 20 20; ... //5 30 45; ... //6 27 25; ... //7 26 10; ... //8 35 65; ... //9 40 42; ... //10 45 30; ... //11 42 15; ... //12 50 62; ... //13 55 40; ... //14 53 17]; //15 z = [0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 2, 2, 2]; nb_mesh = [(1:size(m, 1))', m, (1:size(m, 1))']; fec(nodes(:, 1), nodes(:, 2), nb_mesh, z, mesh=%t); e=gce(); e.children.foreground = -2; // Contour2dm [xc, yc] = contour2dm(nodes(:,1), nodes(:,2), nb_mesh, z, linspace(0,3,4)); k=1;n=yc(k);c=1; N = size(xc, '*'); while k <= N & k+yc(k) <= N n=yc(k); plot2d(xc(k+(1:n)),yc(k+(1:n))); e=gce(); e.children.foreground = -1; c=c+1; k=k+n+1; end // Here we have a loop in the green part because each vertex on this level curve is equal to 1. // To be clearer, let us change the color_map f.color_map = jetcolormap(1024);

## See also

- contour2di
- contour2d
- contour
- fec
- plot2d

## History

5.5.2

Function contour2dm introduced.