summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/metapost/featpost/example/repeated/electricpotential.mp
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/metapost/featpost/example/repeated/electricpotential.mp')
-rw-r--r--Master/texmf-dist/doc/metapost/featpost/example/repeated/electricpotential.mp151
1 files changed, 151 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/featpost/example/repeated/electricpotential.mp b/Master/texmf-dist/doc/metapost/featpost/example/repeated/electricpotential.mp
new file mode 100644
index 00000000000..01caaab0c5e
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/featpost/example/repeated/electricpotential.mp
@@ -0,0 +1,151 @@
+% electricpotential.mp
+% L. Nobre G.
+% 2004
+% PAY ATTENTION: THESE FIGURES ARE INDEPENDANT. CONDUCTOR SURFACE POTENTIAL
+% CHANGES UNDER THE INFLUENCE OF EXTERNAL CHARGES.
+
+%input featpost3Dplus2D;
+
+f := 16*(4,1,1);
+Spread := 35;
+LightSource := 10*(4,-3,4);
+ActuC := 2;
+
+numeric potlim, cac, cbc, ccc, cdc;
+potlim = 2;
+cac = 2;
+cbc = -2;
+ccc = 4;
+cdc = 1.5;
+pair cap, cbp, ccp;
+cap = (-2,-4);
+ccp = (-2,4);
+cbp = (2,0);
+numeric np, ssize;
+np = 56;
+ssize = 18;
+
+def zi( expr xc, yc ) =
+ 0
+enddef;
+
+def za( expr xc, yc ) =
+ begingroup
+ save out;
+ numeric dist, out;
+ dist = abs( (xc,yc)-cap );
+ if abs(dist) < 0.005:
+ if cac<0:
+ out = -potlim;
+ else:
+ out = potlim;
+ fi;
+ else:
+ out = cac/dist;
+ fi;
+ if out > potlim:
+ out := potlim;
+ elseif out < -potlim:
+ out := -potlim;
+ fi;
+ (out)
+ endgroup
+enddef;
+
+def zb( expr xc, yc ) =
+ begingroup
+ save out;
+ numeric dist, out;
+ dist = abs( (xc,yc)-cbp );
+ if abs(dist) < 0.005:
+ if cbc<0:
+ out = -potlim;
+ else:
+ out = potlim;
+ fi;
+ else:
+ out = cbc/dist + za( xc, yc );
+ fi;
+ if out > potlim:
+ out := potlim;
+ elseif out < -potlim:
+ out := -potlim;
+ fi;
+ (out)
+ endgroup
+enddef;
+
+def zc( expr xc, yc ) =
+ begingroup
+ save out;
+ numeric dist, out;
+ dist = abs( (xc,yc)-ccp );
+ if abs(dist) < 0.005:
+ if ccc<0:
+ out = -potlim;
+ else:
+ out = potlim;
+ fi;
+ else:
+ out = ccc/dist + zb( xc, yc );
+ fi;
+ if out > potlim:
+ out := potlim;
+ elseif out < -potlim:
+ out := -potlim;
+ fi;
+ (out)
+ endgroup
+enddef;
+
+def zd( expr xc, yc ) =
+ begingroup
+ save out;
+ numeric dist, out, i, tmp;
+ pair poi;
+ tmp = 0;
+ for i=0 upto np:
+ poi := (i/np)[cap,ccp];
+ dist := abs( (xc,yc)-poi );
+ if abs(dist) < 0.005:
+ if cdc<0:
+ out := -potlim;
+ else:
+ out := potlim;
+ fi;
+ else:
+ out := cdc/dist/np;
+ fi;
+ tmp := tmp+out;
+ endfor;
+ tmp := tmp + zc( xc, yc );
+ if tmp > potlim:
+ tmp := potlim;
+ elseif tmp < -potlim:
+ tmp := -potlim;
+ fi;
+ (tmp)
+ endgroup
+enddef;
+
+beginfig(0);
+ hexagonaltrimesh( false, np, ssize, zi );
+endfig;
+
+beginfig(1);
+ hexagonaltrimesh( false, np, ssize, za );
+endfig;
+
+beginfig(2);
+ hexagonaltrimesh( false, np, ssize, zb );
+endfig;
+
+beginfig(3);
+ hexagonaltrimesh( false, np, ssize, zc );
+endfig;
+
+beginfig(4);
+ hexagonaltrimesh( false, np, ssize, zd );
+endfig;
+
+end;