summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Orbits.m4
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Orbits.m4')
-rw-r--r--Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Orbits.m474
1 files changed, 74 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Orbits.m4 b/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Orbits.m4
new file mode 100644
index 00000000000..ef85d279353
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Orbits.m4
@@ -0,0 +1,74 @@
+.PS
+# Orbits.m4
+threeD_init
+NeedDpicTools
+
+ crad = 1.0
+ g = 0.65
+
+# `orbitpos(long,lat,rad,ang)'
+define(`orbitpos',
+ `rot3Dx((`$2')*dtor_,rot3Dz((`$1')*dtor_,rot3Dy(-(`$4')*dtor_,`$3',0,0)))')
+
+define(`PO',`B.C+(Project(orbitpos(orbitlong,orbitlat,orbitrad,`$1')))')
+
+define vis { X: PO($1)
+ if (distance(X,B.C)>crad) || \
+ (dot3D(View3D,orbitpos(orbitlong,orbitlat,orbitrad,$1))>0) \
+ then {$2 = 1} else {$2 = -1} }
+
+# `orbit(long,lat,rad)'
+define(`orbit',
+ `[da = 3
+ orbitlong = `$1'
+ orbitlat = `$2'
+ orbitrad = `$3'
+ define(`decorated',`ifelse(`$4',,,`outlined `$4'')')
+ arrow from PO(0) to PO(da*3) decorated
+ n=0
+ P[n]: PO(0)
+ vis(0,v)
+ for d=da to 360 by da do {
+ vis(d,x)
+ if x*v < 0 then {
+ findroot(vis,d-da,d,1e-6,x)
+ n+=1; P[n]: PO(x)
+ if v < 0 then { fitcurve(P,n,dashed decorated) } \
+ else { fitcurve(P,n,decorated) }
+ P[0]: P[n]
+ n = 0; v = -v }
+ n +=1; P[n]: PO(d)
+ }
+ if v < 0 then { fitcurve(P,n,dashed decorated) } \
+ else { fitcurve(P,n,decorated) }
+ ] with .c at B.C')
+
+# ball(rad,highlight rad,highlight degrees)
+define(`ball',`[
+ lt = linethick bp__
+ C: circle invis rad `$1' at (0,0)
+ D: C+(Rect_(`$2',`$3'))
+ rm = `$1'+distance(C,D)
+ a = 1 # fade rate parameter
+ for r=lt to rm by lt do {
+ u = 1-(r/rm*(a*r/rm+(1-a)))
+ if r < (1-g)*`$1' then { circle outlined rgbstring(u,u,u) rad r at D } \
+ else { arc cw outlined rgbstring(u,u,u) from Cintersect(D,r,C,`$1') \
+ to Cintersect(D,r,C,`$1',R) with .c at D
+ }
+ }
+ circle rad C.rad at C
+ ]')
+
+ linethick = 0.8
+ B: ball(crad,crad*g,110)
+
+ azimuth = 0
+ elevation = 0
+ setview(azimuth,elevation)
+
+ orbit(10, 30,crad*1.3,"red")
+ orbit(10,-30,crad*1.3,"blue")
+ orbit(10,-90,crad*1.3,"cyan")
+
+.PE