diff options
Diffstat (limited to 'graphics/epix/samples/saddle.xp')
-rw-r--r-- | graphics/epix/samples/saddle.xp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/graphics/epix/samples/saddle.xp b/graphics/epix/samples/saddle.xp new file mode 100644 index 0000000000..b486cc4c9e --- /dev/null +++ b/graphics/epix/samples/saddle.xp @@ -0,0 +1,70 @@ +/* -*-ePiX-*- */ +// fake 3D by layering +#include "epix.h" +using namespace ePiX; + +// function to plot +P F(double u, double v) +{ + return P(u, v, 0.25*(u+v)*(u-v)); +} + +P TF(double u, double v) +{ + return P(u, v); +} + +int main() +{ + picture(P(-3,-2),P(3,2), "6x4in"); + + begin(); + backing(Black()); + + label_color(White()); + label(P(0, ymax()), P(0,-4), + "\\textbf{A quadratic saddle cut by a tangent plane}", b); + + camera.at(P(6,12,8)); + camera.look_at(P(0,0,-0.25)); + + domain R(P(-2,-2), P(2,2), mesh(24,24), mesh(48,48)); + + // clip to lower half space + clip_face(P(0,0,0), -E_3); // 2nd arg is inward normal vector + + // draw shaded saddle + fill(); + surface(F, R); + + // and re-draw the wiremesh in color + bold(); + green(); // change label color as well + plot(F, R); + label(F(0,2), P(0,-4), "$\\mathbf{z<0}$", b); + + // (x,y)-plane + red(); + plot(TF, R); + label(P(2,0,0), P(-4,-2), "$\\mathbf{z=0}$", bl); + + clip_restore(); // remove old restriction + clip_face(P(0,0,0), E_3); // and set new one + + fill(Blue()); // set pen and fill colors + surface(F, R); + + // fake transparency: re-draw (x,y)-plane lightly + pen(Red(), 0.2); + plot(TF, R); + + // and plot top half of wiremesh in color + bold(Blue()); + plot(F, R); + + rgb(0.5,0.5,1); + label(F(-2,0), P(4,4), "$\\mathbf{z>0}$", tr); + + pst_format(); + end(); +} |