diff options
Diffstat (limited to 'graphics/epix/samples/extract.xp')
-rw-r--r-- | graphics/epix/samples/extract.xp | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/graphics/epix/samples/extract.xp b/graphics/epix/samples/extract.xp deleted file mode 100644 index b061df18db..0000000000 --- a/graphics/epix/samples/extract.xp +++ /dev/null @@ -1,109 +0,0 @@ -/* -*-ePiX-*- */ -#include "epix.h" -using namespace ePiX; - -// a benign function -double phi(double x) -{ - return x*x; -} - -// and its derivative -Deriv dphi(phi); - -// parameters defining an arbitrary line ell -const double slope(-2); -const double beta(0.5); - -const double ht(phi(beta)); -const double alpha(slope-dphi.eval(beta)); - -const double eps(0.02); // size of extraction - -// a small perturbation to adjust the derivative -double f(double x) -{ - return x/(1+16384*x*x); -} - -double gn(double x) -{ - return f(alpha*(x-beta)); -} - -// phi's Evil Twin -double psi(double x) -{ - return phi(x) + gn(x); -} - -// inset parameters -const P mag_ctr(P(0.75, 0.2)); -const double mag_sz(0.125); - -int main() -{ - picture(P(0,0), P(1,0.75), "4x3in"); - - begin(); - set_crop(); - - // two nearly-equal graphs, and the tangent to one of them - plain(Blue()); - plot(psi, xmin(), beta-eps, 60); - plot(psi, beta+eps, xmax(), 60); - plot(psi, beta-eps, beta+eps, 60); - - pen(Green(0.6)); - Line(P(beta,phi(beta)), slope); - - bold(Red()); - plot(phi, xmin(), xmax(), 60); - plain(); - - // cut out a small neighborhood and magnify it - screen mag(canvas().extract_ellipse(P(beta-eps, psi(beta)-eps), - P(beta+eps, psi(beta)+eps))); - mag.backing(Yellow(0.05)); - mag.border(Black(), "0.4pt"); - - inset(mag, mag_ctr - mag_sz*P(1,1), mag_ctr + mag_sz*P(1,1)); - - pen(Black()); - // axes - line(P(xmin(),0), P(xmax(),0)); - line(P(0,ymin()), P(0,ymax())); - - // indicators - line(P(beta,0), P(beta,phi(beta)), -20); // shorten slightly - line(P(0,phi(beta)), P(beta,phi(beta)), -10); - - // zoom lines - line(P(beta, phi(beta)), mag_ctr + polar(mag_sz, 2*M_PI/3), -20); - line(P(beta, phi(beta)), mag_ctr + polar(mag_sz, 5*M_PI_4), -20); - - font_size("footnotesize"); - label(P(beta,0), P(0,-4), "$\\beta$", b); - label(P(0,phi(beta)), P(-4,0), "$b$", l); - - // use mag_ctr to place inset labels - red(); - label(P(beta+0.1,phi(beta+0.1)), P(-2,2), "$\\varphi$",tl); - label(mag_ctr, P(0,6), "$\\varphi$",tr); - - blue(); - label(P(beta+0.1,psi(beta+0.1)), P(2,-2), "$\\psi$",br); - label(mag_ctr, P(8,-2), "$\\psi$",br); - - green(0.6); - label(P(beta-0.1,ht-0.1*slope), P(2,2), "$\\ell$",tr); - label(mag_ctr, P(-12,20), "$\\ell$", bl); - - black(); - // a large label - label_border(Blue(), "0.2pt"); - masklabel(P(0.5*(xmin()+xmax()), ymax()), P(0,0), - "\\begin{minipage}{2.25in}A graph with unexpected tangent line\\end{minipage}", b); - - end(); -} |