# geom3d

projection from 3D on 2D after a 3D plot

## Calling Sequence

    [x,y]=geom3d(x1,y1,z1)

## Arguments

x1,y1,z1

  real vectors of the same size (points in 3D).

x,y

  real vectors of the same size as `x1`, `y1` and `z1`.

## Description

After having used a 3D plot function such as `plot3d`, `plot3d1` or `param3d`, `geom3d` gives the mapping between a point in 3D space `(x1(i),y1(i),z1(i))` and the corresponding point `(x(i),y(i))` in the projected 2D plan. Then all the 2D graphics primitives working on `(x,y)` can be used for superposition on the 3D plot.

## Examples

    deff("[z]=surface(x,y)","z=sin(x)*cos(y)")
    t=%pi*(-10:10)/10;
    // 3D plot of the surface
    fplot3d(t,t,surface,35,45,"X@Y@Z")
    // now (t,t,sin(t).*cos(t)) is a curve on the surface
    // which can be drawn using geom3d and xpoly
    [x,y]=geom3d(%pi/2,0,surface(%pi/2,0))

deff("[z]=surface(x,y)","z=sin(x)*cos(y)") t=%pi*(-10:10)/10; fplot3d(t,t,surface,35,45,"X@Y@Z") [x,y]=geom3d(%pi/2,0,surface(%pi/2,0))

    my_plot_desc          = "plot3d and use of geom3d";

      r = (%pi):-0.01:0;
    x = r.*cos(10*r);
    y = r.*sin(10*r);

    deff("[z]=Surf(x,y)","z=sin(x)*cos(y)");
    t=%pi*(-10:10)/10;

    // Plot the surface'
    fplot3d(t,t,Surf,35,45,"X@Y@Z",[19,2,3]);

    // Add 2d graphics on 3d graphic'
    z=(sin(x).*cos(y));
    [x1,y1] = geom3d(x,y,z);
    xpoly(x1,y1,"lines");

    // Adjust some plotting parameters'
    BackgroundColorId           = color(70,174,255);
    current_axe                 = gca();
    plot_3d                     = current_axe.children(2);
    plot_3d.hiddencolor         = 32;
    polyline                    = current_axe.children(1)';;
    polyline.foreground         = 8;
    current_axe.rotation_angles = [70,47];
    current_axe.background      = BackgroundColorId;

    // A second 2d graphics'
    [x1,y1] = geom3d([0,0],[0,0],[5,0]);
    xsegs(x1,y1);
    xstring(x1(1),y1(1),"The point (0,0,0)");

    xtitle(my_plot_desc," "," "," ");

my_plot_desc = "plot3d and use of geom3d";

r = (%pi):-0.01:0; x = r.*cos(10*r); y = r.*sin(10*r);

deff("[z]=Surf(x,y)","z=sin(x)*cos(y)"); t=%pi*(-10:10)/10;

// Plot the surface' fplot3d(t,t,Surf,35,45,"X@Y@Z",[19,2,3]);

// Add 2d graphics on 3d graphic' z=(sin(x).*cos(y)); [x1,y1] = geom3d(x,y,z); xpoly(x1,y1,"lines");

// Adjust some plotting parameters' BackgroundColorId = color(70,174,255); current_axe = gca(); plot_3d = current_axe.children(2); plot_3d.hiddencolor = 32; polyline = current_axe.children(1)';; polyline.foreground = 8; current_axe.rotation_angles = [70,47]; current_axe.background = BackgroundColorId;

// A second 2d graphics' [x1,y1] = geom3d([0,0],[0,0],[5,0]); xsegs(x1,y1); xstring(x1(1),y1(1),"The point (0,0,0)");

xtitle(my_plot_desc," "," "," ");