summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/luatikz/example/radon1.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/luatikz/example/radon1.lua')
-rw-r--r--Master/texmf-dist/doc/latex/luatikz/example/radon1.lua119
1 files changed, 119 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/luatikz/example/radon1.lua b/Master/texmf-dist/doc/latex/luatikz/example/radon1.lua
new file mode 100644
index 00000000000..166c44c7635
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/luatikz/example/radon1.lua
@@ -0,0 +1,119 @@
+tikz.within( '*' )
+
+local cos = math.cos
+local sin = math.sin
+local pi = math.pi
+
+-- granularity of calculation
+local fine = 10
+
+-- factor the projection length is reduced
+local fproj = 0.35
+
+-- strength of the ellipse mediums
+local s1 = 1.00
+local s2 = 1.50
+local s3 = 1.75
+
+local e1 = ellipse{ at=p{ 0.00, 0.00 }, xradius=3.00, yradius=3.00 }
+local e2 = ellipse{ at=p{ 0.40, 1.20 }, xradius=0.85, yradius=0.50 }
+local e3 = ellipse{ at=p{ 0.00, -0.89 }, xradius=1.00, yradius=0.60 }
+
+draw{ fill='black!08!white', line_width=1, e1 }
+draw{ fill='black!16!white', line_width=1, e2 }
+draw{ fill='black!24!white', line_width=1, e3 }
+
+-- list of projection angles
+local listphi =
+{
+ -1/4 * pi,
+ 2/4 * pi,
+ 5/4 * pi,
+}
+
+-- length of projection lines
+local lenmaintop = 5.0
+local lenmainbot = 6.5
+
+for proji, phimain in ipairs( listphi )
+do
+ local lmain =
+ line{
+ p{ cos( phimain ), sin( phimain ) } * -lenmaintop,
+ p{ cos( phimain ), sin( phimain ) } * lenmainbot,
+ }
+ local phinorm = phimain - pi/2
+
+ -- gets a point on the projection.
+ -- dp: distance from projection center
+ -- dv: projection value
+ function getpproj( dp, dv )
+ return(
+ lmain.p2
+ + p{ cos( phinorm ) * dp, sin( phinorm ) * dp }
+ + p{ cos( phimain ) * dv * fproj, sin( phimain ) * dv * fproj }
+ )
+ end
+
+ -- distance of projection line
+ local ddis = 1 / fine
+
+ -- list of all projection points
+ local listp = { }
+
+ for i = -3.5 * fine, 3.5 * fine
+ do
+ local p1i =
+ lmain.p1
+ + p{ cos( phinorm ) * ddis * i, sin( phinorm ) * ddis * i }
+ local li = line{ p1i, p1i + ( lmain.p2 - lmain.p1 ) }
+ local lv = 0
+ local is1 = e1.intersectLine( li )
+
+ if is1 and #is1 > 1
+ then
+ local lis = line{ is1[ 1 ], is1[ 2 ] }
+ lv = lv + lis.length * s1
+ end
+
+ local is2 = e2.intersectLine( li )
+ if is2 and #is2 > 1
+ then
+ local lis = line{ is2[ 1 ], is2[ 2 ] }
+ lv = lv + lis.length * s2
+ end
+
+ local is3 = e3.intersectLine( li )
+ if is3 and #is3 > 1
+ then
+ local lis = line{ is3[ 1 ], is3[ 2 ] }
+ lv = lv + lis.length * s3
+ end
+
+ local pproj = getpproj( ddis * i, lv )
+ if i % ( 0.7 * fine ) == 0
+ then
+ draw{
+ dotted, arrow, line_width=0.5,
+ line{ li.p1, getpproj( ddis * i, -0.20 ) },
+ }
+ draw{
+ dotted, line_width=0.5,
+ line{ li.p1, pproj },
+ }
+ end
+ table.insert( listp, pproj )
+ end
+
+ -- draws the projection screen
+ local lenlproj = 8
+ draw{
+ line{
+ getpproj( lenlproj / 2, 0 ),
+ getpproj( -lenlproj / 2, 0 ),
+ }
+ }
+
+ -- draws the projection curve
+ draw{ line_width=1, polyline{ table.unpack( listp ) } }
+end