(*^ ::[ Information = "This is a Mathematica Notebook file. It contains ASCII text, and can be transferred by email, ftp, or other text-file transfer utility. It should be read or edited using a copy of Mathematica or MathReader. If you received this as email, use your mail application or copy/paste to save everything from the line containing (*^ down to the line containing ^*) into a plain text file. On some systems you may have to give the file a name ending with ".ma" to allow Mathematica to recognize it as a Notebook. The line below identifies what version of Mathematica created this file, but it can be opened using any other version as well."; FrontEndVersion = "NeXT Mathematica Notebook Front End Version 2.2"; NeXTStandardFontEncoding; fontset = title, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L1, a8, e6, 24, "Times"; ; fontset = subtitle, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L1, a6, e5, 18, "Times"; ; fontset = subsubtitle, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, groupLikeTitle, center, M7, italic, L1, a5, e6, 14, "Times"; ; fontset = section, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, grayBox, M22, N7, bold, L1, a6, 18, "Times"; ; fontset = subsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, blackBox, M19, N0, bold, L1, a6, e3, 14, "Times"; ; fontset = subsubsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, whiteBox, M17, N8, bold, L1, a12, e2, 12, "Times"; ; fontset = text, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M8, L1, e2, 12; fontset = smalltext, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M8, L1, a2, e2, 10, "Times"; ; fontset = input, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeInput, M25, N8, bold, L-5, e2, 10, "Courier"; ; fontset = output, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M25, N8, R15934, G514, B9509, L-5, e2, 10, "Courier"; ; fontset = message, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M25, N8, bold, R65535, B978, L-5, a2, e2, 10, "Courier"; ; fontset = print, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M25, N8, bold, L-5, e2, 10, "Courier"; ; fontset = info, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M25, N8, bold, R1260, G1957, B65535, L-5, e2, 10, "Courier"; ; fontset = postscript, PostScript, formatAsPostScript, evaluateAsCurrentKernel, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeGraphics, M25, N29, l34, w324, h200, L1, 12, "Courier"; ; fontset = name, inactive, noPageBreakInGroup, nohscroll, noKeepOnOnePage, preserveAspect, M7, B65535, L1, 9, "Courier"; ; fontset = header, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12; fontset = leftheader, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, italic, L1, 12, "Times"; ; fontset = footer, inactive, nohscroll, noKeepOnOnePage, preserveAspect, center, M7, L1, 12; fontset = leftfooter, inactive, nohscroll, noKeepOnOnePage, preserveAspect, center, M7, italic, L1, 12, "Times"; ; fontset = help, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 10, "Courier"; ; fontset = clipboard, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 10, "Courier"; ; fontset = completions, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 10, "Courier"; ; fontset = special1, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12; fontset = special2, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12; fontset = special3, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12; fontset = special4, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12; fontset = special5, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M9, N0, O491, bold, L1, 10, "Courier"; ; paletteColors = 128; currentKernel; ] :[font = title; inactive; dontPreserveAspect; startGroup] A Little Geometry :[font = subtitle; inactive; preserveAspect] Allan Hayes Leicester University and De Montfort University Leicester Department of Mathematics Leicester LE1 7RH UNITED KINGDOM hay@le.ac.uk ;[s] 1:0,0;141,-1; 1:1,12,9,Times,1,14,0,0,0; :[font = subsubtitle; inactive; preserveAspect] Mathematica in Education Volume 3 Number 1 Winter 1994 (c) TELOS/Springer-Verlag :[font = section; inactive; Cclosed; preserveAspect; startGroup] Introduction :[font = text; inactive; preserveAspect] I got this problem some time ago from a colleague; he could not solve it with the computer algebra system that he was using; I give below a solution using Mathematica. ;[s] 3:0,0;155,1;166,2;168,-1; 3:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] Take any point on the circumcircle of a triangle; drop perpendiculars from this point onto the sides of the triangle. :[font = postscript; PostScript; formatAsPostScript; output; inactive; thinLines; preserveAspect; leftWrapOffset = 30; pictureLeft = 67; pictureTop = 3; pictureWidth = 283; pictureHeight = 197] %! %%Creator: Mathematica %%AspectRatio: 0.698675 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0 1 0 1 [ [ 117 350 0 0 ] [ 419 561 0 0 ] ] MathScale % Start of Graphics %!PS-Adobe-2.0 EPSF-1.2 %%Title: UNTITLED %%Creator: Altsys Virtuoso 1.0 %%CreationDate: Thu Sep 16 14:42:09 GMT 1993 %%BoundingBox: 117 350 419 561 %%FHPathName: UNTITLED %%DocumentProcSets: Altsys_header 4 0 %%DocumentSuppliedProcSets: Altsys_header 4 0 %%ColorUsage: Color %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFonts: Symbol %%DocumentNeededFonts: Symbol %%EndComments %%BeginProcSet: Altsys_header 4 0 /AltsysDict 233 dict def AltsysDict begin /bdf{bind def}bind def /xdf{exch def}bdf /defed{where{pop true}{false}ifelse}bdf /ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf /d{setdash}bdf /h{closepath}bdf /H{}bdf /J{setlinecap}bdf /j{setlinejoin}bdf /M{setmiterlimit}bdf /n{newpath}bdf /N{newpath}bdf /q{gsave}bdf /Q{grestore}bdf /w{setlinewidth}bdf /sepdef{ dup where not { AltsysSepDict } if 3 1 roll exch put }bdf /st{settransfer}bdf /colorimage defed /_rci xdf /md defed{ md type /dicttype eq { /colorimage where { md eq { /_rci false def }if }if /settransfer where { md eq { /st systemdict /settransfer get def }if }if }if }if /setstrokeadjust defed { true setstrokeadjust /C{curveto}bdf /L{lineto}bdf /m{moveto}bdf } { /dr{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform}bdf /C{dr curveto}bdf /L{dr lineto}bdf /m{dr moveto}bdf /setstrokeadjust{pop}bdf }ifelse /rectstroke defed /xt xdf xt {/yt save def} if /privrectpath { 4 -2 roll m dtransform round exch round exch idtransform 2 copy 0 lt exch 0 lt xor {dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto} {exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto} ifelse closepath }bdf /rectclip{newpath privrectpath clip newpath}def /rectfill{gsave newpath privrectpath fill grestore}def /rectstroke{gsave newpath privrectpath stroke grestore}def xt {yt restore} if /packedarray{array astore readonly}ndf /` {false setoverprint /-save0- save def pop pop pop pop pop concat userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath false setstrokeadjust } bdf /currentpacking defed{true setpacking}if /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /xformfont { currentfont exch makefont setfont } bdf /fhnumcolors 1 statusdict begin /processcolors defed { pop processcolors } { /deviceinfo defed { deviceinfo /Colors known { pop deviceinfo /Colors get } if } if } ifelse end def /printerRes gsave matrix defaultmatrix setmatrix 72 72 dtransform abs exch abs max grestore def /graycalcs [ {Angle Frequency} {GrayAngle GrayFrequency} {0 Width Height matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} {0 GrayWidth GrayHeight matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} ] def /calcgraysteps { /currenthalftone defed {currenthalftone /dicttype eq}{false}ifelse { currenthalftone begin HalftoneType 4 le {graycalcs HalftoneType 1 sub get exec} { HalftoneType 5 eq { Default begin {graycalcs HalftoneType 1 sub get exec} end } {0 60} ifelse } ifelse end } { currentscreen pop exch } ifelse printerRes 300 max exch div exch 2 copy sin mul round dup mul 3 1 roll cos mul round dup mul add 1 add dup maxsteps gt {pop maxsteps} if } bdf /nextrelease defed { /languagelevel defed not { /framebuffer defed { 0 40 string framebuffer 9 1 roll 8 {pop} repeat dup 516 eq exch 520 eq or { /fhnumcolors 3 def /currentscreen {60 0 {pop pop 1}}bdf /calcgraysteps {maxsteps} bdf }if }if }if }if /goodsep { spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or }bdf /bottom -0 def /delta -0 def /frac -0 def /height -0 def /left -0 def /numsteps -0 def /numsteps1 -0 def /radius -0 def /right -0 def /top -0 def /width -0 def /xt -0 def /yt -0 def /df currentflat def /tempstr 1 string def /clipflatness currentflat def /inverted? 0 currenttransfer exec .5 ge def /tc1 [0 0 0 1] def /tc2 [0 0 0 1] def /storerect{/top xdf /right xdf /bottom xdf /left xdf /width right left sub def /height top bottom sub def}bdf /concatprocs{ systemdict /packedarray known {dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse { /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx } { /proc2 exch cvlit def/proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }ifelse }bdf /i{dup 0 eq {pop df dup} {dup} ifelse /clipflatness xdf setflat }bdf version cvr 38.0 le {/setrgbcolor{ currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll setrgbcolor}bdf}if /vms {/vmsv save def} bdf /vmr {vmsv restore} bdf /vmrs{vmsv restore /vmsv save def}bdf /eomode{ {/filler /eofill load def /clipper /eoclip load def} {/filler /fill load def /clipper /clip load def} ifelse }bdf /normtaper{}bdf /logtaper{9 mul 1 add log}bdf /lfxform { /yt xdf /xt xdf xt yt translate rotate storerect left xt sub bottom yt sub translate right left sub 0.00001 max top bottom sub 0.00001 max scale }bdf /CD{/NF exch def{exch dup/FID ne 1 index/UniqueID ne and{exch NF 3 1 roll put} {pop pop}ifelse}forall NF}bdf /MN{1 index length/Len exch def dup length Len add string dup Len 4 -1 roll putinterval dup 0 4 -1 roll putinterval}bdf /RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch {1 index MN cvn/NewN exch def cvn findfont dup maxlength dict CD dup/FontName NewN put dup /Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf /RF{dup FontDirectory exch known{pop 3 -1 roll pop}{RC}ifelse}bdf /FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known {exch pop findfont 3 -1 roll pop} {pop dup findfont dup maxlength dict CD dup dup /Encoding exch /Encoding get 256 array copy 7 -1 roll {3 -1 roll dup 4 -2 roll put}forall put definefont} ifelse}bdf /fps{ currentflat exch dup 0 le{pop 1}if { dup setflat 3 index stopped {1.3 mul dup 3 index gt{pop setflat pop pop stop}if} {exit} ifelse }loop pop setflat pop pop }bdf /fp{100 currentflat fps}bdf /clipper{clip}bdf /W{/clipper load 100 clipflatness fps}bdf end%. AltsysDict %%EndProcSet %%EndProlog %%BeginSetup AltsysDict begin %%IncludeFont: Symbol 0 dict dup begin end /f0 /Symbol FF def end %. AltsysDict %%EndSetup AltsysDict begin /onlyk{false}ndf /ccmyk{dup 5 -1 roll sub 0 max exch}ndf /cmyk2gray{ 4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul add add add 1 min neg 1 add }bdf /setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf /setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf /findcmykcustomcolor{5 packedarray}ndf /setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf /setseparationgray{setgray}ndf /setoverprint{pop}ndf /currentoverprint false ndf /cmykbufs2gray{ 0 1 2 index length 1 sub { 4 index 1 index get0.3 mul 4 index 2 index get0.59 mul 4 index 3 index get0.11 mul 4 index 4 index get add add add cvi 255 min 255 exch sub 2 index 3 1 roll put }for 4 1 roll pop pop pop }bdf /colorimage{ pop pop [ 5 -1 roll/exec cvx 6 -1 roll/exec cvx 7 -1 roll/exec cvx 8 -1 roll/exec cvx /cmykbufs2gray cvx ]cvx image } %. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only) version cvr 47.1 le statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse and{userdict begin bdf end}{ndf}ifelse fhnumcolors 1 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf ic im iy ik cmyk2gray /xt xdf currenttransfer {dup 1.0 exch sub xt mul add}concatprocs st image } ifelse }ndf fhnumcolors 1 ne {yt restore} if fhnumcolors 3 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf 1.0 dup ic ik add min sub 1.0 dup im ik add min sub 1.0 dup iy ik add min sub /ic xdf /iy xdf /im xdf currentcolortransfer 4 1 roll {dup 1.0 exch sub ic mul add}concatprocs 4 1 roll {dup 1.0 exch sub iy mul add}concatprocs 4 1 roll {dup 1.0 exch sub im mul add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage } ifelse }ndf fhnumcolors 3 ne {yt restore} if fhnumcolors 4 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf currentcolortransfer {1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll {1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll {1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll {1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy} true 4 colorimage } ifelse }ndf fhnumcolors 4 ne {yt restore} if /separationimage{image}ndf /newcmykcustomcolor{6 packedarray}ndf /inkoverprint false ndf /setinkoverprint{pop}ndf /setspotcolor { spots exch get dup 4 get (_vc_Registration) eq {pop 1 exch sub setseparationgray} {0 5 getinterval exch setcustomcolor} ifelse }ndf /currentcolortransfer{currenttransfer dup dup dup}ndf /setcolortransfer{st pop pop pop}ndf /fas{}ndf /sas{}ndf /fhsetspreadsize{pop}ndf /filler{fill}bdf /F{gsave {filler}fp grestore}bdf /f{closepath F}bdf /S{gsave {stroke}fp grestore}bdf /s{closepath S}bdf /lfs{ gsave W n lfxform pop pop pop /xt xdf /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} [spots xt get aload pop pop] customcolorimage grestore }ndf /lfp{ gsave W n lfxform 9 {pop} repeat _rci { /lfbuf4 xdf /lfbuf3 xdf /lfbuf2 xdf /lfbuf1 xdf pop 1 256 8 [1 0 0 -256 0 256] {lfbuf1}{lfbuf2}{lfbuf3}{lfbuf4} true 4 colorimage } { 4 {pop} repeat /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} image } ifelse grestore }ndf /bcs [0 0] def /_rfs { /tint2 xdf /tint1 xdf bcs exch 1 exch put /radius xdf /yt xdf /xt xdf tint1 tint2 sub abs calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bcs 0 tint2 tint1 sub frac mul tint1 add put bcs vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /bc4 [0 0 0 0] def /_rfp { /k2 xdf /y2 xdf /m2 xdf /c2 xdf /k1 xdf /y1 xdf /m1 xdf /c1 xdf /radius xdf /yt xdf /xt xdf c1 c2 sub abs m1 m2 sub abs y1 y2 sub abs k1 k2 sub abs max max max calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bc4 0 c2 c1 sub frac mul c1 add put bc4 1 m2 m1 sub frac mul m1 add put bc4 2 y2 y1 sub frac mul y1 add put bc4 3 k2 k1 sub frac mul k1 add put bc4 vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /rfs{_rfs}ndf /rfp{_rfp}ndf /cvc [0 0 0 1] def /vc{ AltsysDict /cvc 2 index put aload length 4 eq {setcmykcolor} {setspotcolor} ifelse }bdf /origmtx matrix currentmatrix def /ImMatrix matrix currentmatrix def 0 setseparationgray /imgr {-4000 -4000 4000 4000 } def /bleed 0 def /clpr {-4000 -4000 4000 4000 } def /xs 1 def /ys 1 def /botx 0 def /overlap 0 def /wdist 18 def 0 2 mul fhsetspreadsize 0 0 ne {/df 0 def /clipflatness 0 def} if /maxsteps 256 def /currentpacking defed{false setpacking}if /spots[ 1 0 0 0 (Process Cyan) false newcmykcustomcolor 0 1 0 0 (Process Magenta) false newcmykcustomcolor 0 0 1 0 (Process Yellow) false newcmykcustomcolor 0 0 0 1 (Process Black) false newcmykcustomcolor ]def clpr storerect left bottom width height rectclip [] 0 d 3.863708 M 1 w 0 j 0 J false setoverprint 0 i false eomode [0 0 0 1]vc vms [1 0 0 1 0 0] 117.625 350 418.375 561 () ` %%BeginDocument: %!PS-Adobe-2.0 EPSF-1.2 %%Title: fig 1 eps %%Creator: CLARIS EPSF Export Filter V1.0 %%CreationDate:8/6/93 7:29:20 p.m. %%BoundingBox: 117.625 350.000 418.375 561.000 %%QDBoundingBox: 117.625 231.000 418.375 442.000 %%DocumentProcessColors: Cyan Magenta Yellow Black %%ObjectsIncluded: tText=T tLine=T tRect=T tRRect=T tOval=T tArc=F tFree=F tPoly=F tBMap=F tNote=F tBez=F tPMap=F %%AttributesIncluded: kBaWPattType=T kPixPattType=T kGradientType=F %%EndComments /MAV 300 dict def MAV begin /useClip true def /top 0 def /left 1 def /bottom 2 def /right 3 def /CM 6 array def /CTM 6 array def /CTMR 6 array def /MTC 6 array def /blimit 1500 def /bcnt 0 def /rbox 8 array def /segbox 8 array def /bbox1 4 array def /c1 3 array def /c2 3 array def /d 3 array def /delta 3 array def /mycurrentrgbcolor 3 array def /ulx 0 def /uly 1 def /llx 2 def /lly 3 def /urx 4 def /ury 5 def /lrx 6 def /lry 7 def /sp [0 0] def /ep [0 0] def /bbox 4 array def /pbox 4 array def /scrnProc currentscreen 3 1 roll pop pop def /currentcolorscreen where { begin currentcolorscreen end 3 1 roll pop pop 4 2 roll pop pop 5 -2 roll pop pop 6 -2 roll pop pop /kProc exch def /bProc exch def /gProc exch def /rProc exch def } if /Max {2 copy gt {pop}{exch pop} ifelse} bind def /cellPenW 72.0 /currentcolorscreen where {begin currentcolorscreen end pop pop 10 1 roll pop pop 8 1 roll pop pop 6 1 roll pop pop Max Max Max } {currentscreen pop pop} ifelse div 2.0 div def %%BeginProcSet : rect /rect { /saveobj save def R PC PF LC SS saveobj restore } bind def %%EndProcSet %%BeginProcSet : R /R { newpath pbox astore pop 0 792 translate 1 -1 scale CTMR currentmatrix pop exch translate /objectCord mstore def pbox right get 2 div dup pbox left get exch sub pbox left 3 -1 roll put dup pbox right 3 -1 roll put pbox bottom get 2 div dup pbox top get exch sub pbox top 3 -1 roll put dup pbox bottom 3 -1 roll put translate CTM currentmatrix pop 57.3 mul rotate RT } bind def %%EndProcSet %%BeginProcSet : SaveScreenBW /SaveScreenBW { currentscreen /scrnProc exch def /scrnAngle exch def /scrnFreq exch def } bind def %%EndProcSet %%BeginProcSet : RestoreScreenBW /RestoreScreenBW { scrnFreq scrnAngle MAV /scrnProc get setscreen } bind def %%EndProcSet %%BeginProcSet : SetFreqAngleBW /SetFreqAngleBW { currentscreen 3 1 roll pop pop setscreen } bind def %%EndProcSet %%BeginProcSet : SaveScreenColor /SaveScreenColor { currentcolorscreen /grayProc exch def /grayAngle exch def /grayFreq exch def /bProc exch def /bAngle exch def /bFreq exch def /gProc exch def /gAngle exch def /gFreq exch def /rProc exch def /rAngle exch def /rFreq exch def } bind def %%EndProcSet %%BeginProcSet : RestoreColorScreen /RestoreColorScreen { rFreq rAngle MAV /rProc get gFreq gAngle MAV /gProc get bFreq bAngle MAV /bProc get grayFreq grayAngle MAV /grayProc get setcolorscreen } bind def %%EndProcSet %%BeginProcSet : SetFreqAngleColor /SetFreqAngleColor { currentcolorscreen 3 1 roll pop pop 4 2 roll pop pop 5 -2 roll pop pop 6 -2 roll pop pop 4 1 roll 6 1 roll 8 1 roll 10 1 roll setcolorscreen } bind def %%EndProcSet /initmsaverestore { userdict begin /mdict 10 dict def mdict begin /mindex -1 def /mstacksize 25 def /mstack mstacksize array def /incmindex { /mindex mindex 1 add def } bind def /decmindex { /mindex mindex 1 sub def } bind def /checkmindex { mindex 0 lt { (%ERROR: msave/mrestore stack underflow: Offending command 'mrestore' ) print flush stop } { mindex mstacksize ge { (%ERROR: msave/mrestore stack overflow: Offending command 'msave' ) print flush stop } if } ifelse } bind def /mpush { incmindex checkmindex mstack mindex 3 -1 roll put } bind def /mpop { checkmindex mstack mindex get decmindex } bind def end end } bind def /msave { mdict begin matrix currentmatrix mpush end } bind def /mrestore { mdict begin mpop setmatrix end } bind def /msavelevel { mdict begin mindex 1 add end } bind def /mstore { matrix currentmatrix } bind def /AutoSizeY { 0 0 pl dup 3 1 roll 4 -1 roll add pl exch pop exch sub } bind def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } bind def /pll { transform round exch round exch itransform } bind def /pr { dtransform round exch round exch idtransform } bind def /m { pl moveto } bind def /l { pl lineto } bind def /c { pl curveto } bind def /rm { pr rmoveto } bind def /rl { pr rlineto } bind def /ar { 5 -2 roll pl 5 2 roll arc } bind def /an { 5 -2 roll pl 5 2 roll arcn } bind def /MakePatternFont { /FontDict 20 dict def FontDict begin /FontName exch def /Encoding exch def /FontMatrix [1 0 0 1 0 0 ] def /FontType 3 def /FontBBox [ 0 0 1 1 ] def /PatternDict exch def /RenderPattern { patternDict exch get exec } bind def /BuildChar { exch begin 1 0 0 0 1 1 setcachedevice Encoding exch get RenderPattern end } bind def FontName FontDict definefont pop end } bind def /SnapToPattenGrid { exch dup 0 lt { 1 index sub } if 1 index div truncate mul } bind def /FillPatternString { dup length 1 sub 0 1 3 -1 roll { 2 index 2 index 3 -2 roll put } for pop pop } bind def /AutoSizeY { 0.0 exch dtransform round idtransform exch pop } bind def /AutoSizeX { 0.0 dtransform exch round exch idtransform pop } bind def /AutoCellSize { AutoSizeY exch AutoSizeX exch } bind def /CheckPath { false { pop pop pop true exit} { pop pop pop true exit} { pop pop pop pop pop pop pop true exit} { pop true exit} pathforall } bind def /PatternFill { % patternCharacter /patternString 1 string def /cm mstore def patternMatrix setmatrix 1 1 AutoCellSize dup 0 eq { pop 1} if exch dup 0 eq { pop 1} if exch /patternSize exch 24.0 mul def /PatternSizeX exch 24.0 mul patternString length mul def /flaterror 0 def patternString FillPatternString gsave flaterror 1 add setflat flattenpath pathbbox grestore psy add flaterror add psy SnapToPattenGrid exch psx add flaterror add psx SnapToPattenGrid 3 -1 roll flaterror sub psy SnapToPattenGrid 4 -1 roll flaterror sub psx SnapToPattenGrid 4 2 roll pll 4 2 roll pll /llxsnap exch def /llysnap exch def /urxsnap exch def /urysnap exch def gsave useClip true eq {clip}{eoclip} ifelse newpath /PatternFont findfont [psx 0.0 0.0 psy 0.0 0.0] makefont setfont llysnap patternSize urysnap { llxsnap exch moveto llxsnap PatternSizeX urxsnap { pop patternString show %currentpoint am } for } bind for grestore cm setmatrix } bind def % End 'PatternFill' /DefaultPatternFont { /cm mstore def patternMatrix setmatrix 1 1 AutoCellSize dup 0 eq { pop 1} if exch dup 0 eq { pop 1} if exch /psy exch iSizeY mul def /psx exch iSizeX mul def /patternDict 64 dict def patternDict begin /NotDef {} def /LiteDiagLines { iSizeX iSizeY false [iSizeX 0.0 0.0 iSizeY -1.0 mul 0.0 iSizeY] {pat} imagemask } bind def end /CustEncoding 256 array def 0 255 1 { CustEncoding exch /NotDef put } bind for CustEncoding 65 /LiteDiagLines put patternDict CustEncoding /PatternFont MakePatternFont /pathSegProc { strokepath CheckPath { 65 PatternFill newpath } if } bind def cm setmatrix } bind def /XRound { dup 3 -1 roll exch mul round exch div } bind def /RoundMatrix { /i 0 def dup { 100000.0 XRound 1 index exch i exch put /i i 1 add def } forall } bind def /GetBoxesRatio { 3 -1 roll sub 7 1 roll exch sub 6 1 roll 3 -1 roll sub 5 1 roll exch sub 4 1 roll 3 -1 roll div 3 1 roll exch div exch } bind def %%BeginProcSet : Text Attributes Procs /T {792 exch sub} bind def /sx 0 def /sy 0 def /ex 0 def /ey 0 def /lw 0 def /siz 0 def /U {gsave 0 setlinecap /lw siz 0.078125 mul def /ey exch neg def /ex exch def /sy exch neg def /sx exch def fontkind plain eq { lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto stroke } { currentdict /outlineFontSize known outlineFontSize 0 gt and { fontkind outline eq { /sy sy 0.0119444 siz mul sub def /ey ey 0.0119444 siz mul sub def gsave 1 1 1 setrgbcolor lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto stroke grestore lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto strokepath 0.0119444 siz mul setlinewidth stroke } if fontkind shadow eq fontkind outlineshadow eq or { /sy sy 0.0358332 siz mul sub def /ey ey 0.0358332 siz mul sub def lw setlinewidth lw 2 div sx add sy lw 2 div sub moveto lw 2 div ex add ey lw 2 div sub lineto stroke gsave 1 1 1 setrgbcolor lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto stroke grestore lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto strokepath 0.0119444 siz mul setlinewidth stroke } if } if } ifelse grestore} bind def /plain 1 def /outline 2 def /shadow 3 def /outlineshadow 4 def /fess { currentdict /outlineFontSize known { /outlineFontSize 2 index def } if findfont exch dup /siz exch def scalefont setfont } bind def /SHDW {gsave siz oldfontname fess siz 0.055 mul x add y siz 0.05 mul sub moveto c show grestore} def /NRML {gsave 1 1 1 setrgbcolor siz oldfontname fess x y moveto c show grestore siz /Outline fess x y moveto c show} def /S { fontkind plain eq {neg moveto show} if fontkind outline eq {neg /y exch def /x exch def /c exch def NRML} if fontkind shadow eq {neg /y exch def /x exch def /c exch def SHDW NRML} if fontkind outlineshadow eq {neg /y exch def /x exch def /c exch def SHDW NRML} if } bind def /F { /fontkind exch def fontkind plain eq {fess} if fontkind outline eq {dup /oldfontname exch def exch dup /siz exch def exch OLF} if fontkind shadow eq {dup /oldfontname exch def exch dup /siz exch def exch OLF} if fontkind outlineshadow eq {dup /oldfontname exch def exch dup /siz exch def exch OLF} if } bind def /makeoutlinedict 15 dict def /makeoutlinefont { makeoutlinedict begin /uniqueid exch def /strokewidth exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /numentries basefontdict maxlength 1 add def basefontdict /UniqueID known not {/numentries numentries 1 add def} if /outfontdict numentries dict def basefontdict { exch dup /FID ne {exch outfontdict 3 1 roll put} {pop pop} ifelse }forall outfontdict /FontName newfontname put outfontdict /PaintType 2 put outfontdict /StrokeWidth strokewidth put outfontdict /UniqueID uniqueid put newfontname outfontdict definefont pop end }def /UID { findfont dup /UniqueID known {/UniqueID get 1 add} {pop 1} ifelse } def /OLF { dup /Outline 1000 62 div 4 -1 roll UID /outlineFontSize 5 index def makeoutlinefont /Outline findfont exch scalefont setfont } def /CopyEncoding { findfont /Encoding get dup length array /tarrayz exch def tarrayz 0 3 -1 roll putinterval tarrayz } bind def /Re-encode { dup length array copy /eap 0 def exch { dup type /integertype eq { /eap exch def } { 1 index exch eap exch put /eap eap 1 add def } ifelse } forall } bind def /EncodeFont { findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /FontName exch def /Encoding exch def FontName currentdict end definefont pop } bind def %%EndProcSet %%BeginProcSet : clip2pathbbox /clip2pathbbox { /magicNum linewidth 2 div 1 2 sqrt div mul def pathbbox /urymn exch magicNum add def /urxmn exch magicNum add def /llymn exch magicNum sub def /llxmn exch magicNum sub def newpath llxmn llymn moveto llxmn urymn lineto urxmn urymn lineto urxmn llymn lineto closepath clip newpath } bind def %%EndProcSet %% Line takes the following arguments: %% linewidth xEnd yEnd xStart yStart %%BeginProcSet : Line /Line { MAV /LC get length 0 ne { gsave newpath MAV /ArrowType get length 0 eq MAV /SD get length 0 eq and {2 setlinecap /UseClip {clip2pathbbox} def } {0 setlinecap /UseClip {} def } ifelse 0 792 translate 1 -1 scale CTM currentmatrix pop /yStart exch def /xStart exch def /yEnd exch def /xEnd exch def /linewidth exch def MAV /ArrowType get length 0 eq xStart xEnd ne yStart yEnd ne and and {xStart yStart moveto xEnd yEnd lineto UseClip xStart yStart moveto xEnd yEnd lineto} {xStart yStart moveto xEnd yEnd lineto} ifelse linewidth setlinewidth SD strokepath CheckPath {LC PF ArrowType} if grestore } {pop pop pop pop pop} ifelse } bind def /CompensateForStroke { sin currentlinewidth mul exch cos currentlinewidth mul dup 0 translate 4 -1 roll exch 2.0 mul sub 3 1 roll 2.0 mul sub } bind def /arrowdict 10 dict def arrowdict begin /SwallowTail { newpath 0.0 0.0 moveto 1.0 -.5 lineto .666 0.0 lineto 1.0 .5 lineto closepath } bind def /Triangular { newpath 0.0 0.0 moveto 1.0 -.5 lineto 1.0 .5 lineto closepath } bind def /OpenTri { newpath 1.0 0.5 moveto 0.0 0.0 lineto 1.0 -0.5 lineto } bind def /ClosedTri { newpath 1.0 0.5 moveto 0.0 0.0 lineto 1.0 -0.5 lineto closepath } bind def /SlashBar { newpath 0.5 -.5 moveto -.5 0.5 lineto } bind def /Dot { newpath 0.5 0.0 moveto 0 0 1 0 360 arc closepath } bind def /ExtSlashBar { newpath 1.0 -.5 moveto 0.0 0.5 lineto } bind def end /ScaleArrowHead { 0 0 4 -2 roll 0 0 1 1 8 -4 roll GetBoxesRatio scale } bind def /DrawArrowHead { gsave [] 0 setdash currentpoint translate rotate { 4 copy gsave initmatrix 100 200 translate msave ScaleArrowHead pop arrowdict exch get exec mrestore strokepath 0 0 3 index 3 index pathbbox 8 4 roll GetBoxesRatio 4 2 roll grestore 3 index 1.0 exch sub 6 -1 roll { 2 index mul 0 translate }{ pop } ifelse msave ScaleArrowHead scale arrowdict exch get exec mrestore strokepath } { msave ScaleArrowHead arrowdict exch get exec mrestore } ifelse CheckPath { LC PF } if grestore } bind def %%EndProcSet %%BeginProcSet : SR /SR { pbox left get pbox top get moveto pbox right get pbox top get lineto pbox right get pbox bottom get lineto pbox left get pbox bottom get lineto closepath } bind def %%EndProcSet %%BeginProcSet : RR1 /RR1 { pbox top get pbox bottom get sub abs 2 div dup dup dup pbox left get add pbox left 3 -1 roll put pbox right get exch sub pbox right 3 -1 roll put pbox left get pbox bottom get moveto pbox right get 0 3 -1 roll 90 -90 arcn pbox left get 0 3 -1 roll -90 90 arcn closepath } bind def %%EndProcSet %%BeginProcSet : RR2 /RR2 { dup dup dup dup dup dup dup dup pbox top get add pbox top 3 -1 roll put pbox left get add pbox left 3 -1 roll put pbox bottom get exch sub pbox bottom 3 -1 roll put pbox right get exch sub pbox right 3 -1 roll put pbox bottom get add pbox left get exch moveto pbox right get pbox bottom get 3 -1 roll 90 0 arcn pbox right get pbox top get 3 -1 roll 0 270 arcn pbox left get pbox top get 3 -1 roll 270 180 arcn pbox left get pbox bottom get 3 -1 roll 180 90 arcn closepath } bind def %%EndProcSet %%BeginProcSet : E /E { 1.415 setmiterlimit CM currentmatrix pop pbox right get pbox left get sub abs dup pbox bottom get pbox top get sub abs dup 3 -1 roll lt {exch dup 3 -1 roll exch div 1 exch} {dup 3 -1 roll exch div 1} ifelse scale 0 0 3 -1 roll 2 div 0 360 arc closepath CM setmatrix } bind def %%EndProcSet /StripFromFront { dup length 2 index sub 3 1 roll exch 3 -1 roll getinterval } bind def /MakePathArray { /k 0 def {/k k 1 add def pop pop}{/k k 1 add def pop pop}{/k k 1 add def pop pop pop pop pop pop}{/k k 1 add def }pathforall k array /k 0 def {{moveto} 3 array astore 1 index k 3 -1 roll put /k k 1 add def} {{lineto} 3 array astore 1 index k 3 -1 roll put /k k 1 add def} {{curveto} 7 array astore 1 index k 3 -1 roll put /k k 1 add def} {{closepath} 1 array astore 1 index k 3 -1 roll put /k k 1 add def} pathforall }bind def /MakeFlatPathArray { /k 0 def {/k k 1 add def pop pop}{/k k 1 add def pop pop}{pop pop pop pop pop pop}{}pathforall k array /k 0 def {{moveto} 3 array astore 1 index k 3 -1 roll put /k k 1 add def} {{lineto} 3 array astore 1 index k 3 -1 roll put /k k 1 add def} { pop pop pop pop pop pop} {} pathforall }bind def /FractionalLine { 2 index sub .00001 mul exch 3 index sub .00001 mul 4 -1 roll add 3 1 roll add } bind def /calcLineLength { exch 4 -1 roll sub dup mul 3 1 roll exch sub dup mul add sqrt } bind def /InitTotalLineLength { /oldY exch def /oldX exch def theDash aload pop currentLineLength add setdash } bind def /AccumeLineLength { 3 copy pop 2 copy oldX oldY 4 2 roll calcLineLength /segmentLength exch def /currentLineLength currentLineLength segmentLength add def /oldY exch def /oldX exch def } bind def /DecumeLastLineLength { /currentLineLength currentLineLength segmentLength sub def } bind def /DrawFlattendSegment { /pointCount 2 def dup 0 lt { pop 0 } if fpc 3 1 roll 2 index 1 index gt { 2 copy get dup length dup 3 eq { pop dup 0 get exch 1 get 2 copy InitTotalLineLength m } { } ifelse } { pop 1 index } ifelse dup 1 add 3 index exch sub dup 10 gt { pop 10} if { 1 add 2 copy get aload pop AccumeLineLength exec } repeat 3 1 roll pop pop DecumeLastLineLength } bind def /IncFPC { fpc add /fpc exch def } bind def /DrawFlatPathArray { fpc 0 { dup 2 index 1 sub lt { flatPathArray exch newpath 1 sub DrawFlattendSegment gsave pathSegProc grestore newpath } { pop pop exit } ifelse } loop } bind def /RecordFirstSubSegment { closepathArray 0 pathArray 0 get put closepathArray 1 pathArray 0 get aload pop pop pathArray 1 get dup length 3 eq { aload pop pop } { newpath 0 0 moveto aload pop exec /segmentArray flattenpath MakeFlatPathArray def segmentArray 1 get aload pop pop } ifelse FractionalLine {lineto} 3 array astore put } bind def /AppendClosePath { closepathArray 0 get 2 {lineto} put flatPathArray fpc closepathArray 0 get put 1 IncFPC flatPathArray fpc closepathArray 1 get put 1 IncFPC } bind def /RecordCurrentDash { /theDash currentdash 2 array astore def /currentLineLength 0 def } bind def /PatternStroke { 0 setlinecap RecordCurrentDash /saveFlat currentflat def .5 setflat /pathArray MakePathArray def /closepathArray 2 array def /pathLength pathArray length def /flatPathArray 513 array def /currentLineLength 0 def /fpc 0 def pathArray pathLength 1 sub get length 1 eq { /usingClosepath true def RecordFirstSubSegment /pathLength pathLength 1 sub def } { /usingClosepath false def } ifelse 0 1 pathLength 1 sub { pathArray exch get dup length 3 eq { fpc 1 add 512 ge { DrawFlatPathArray fpc 2 ge { flatPathArray flatPathArray fpc 2 sub get 0 put flatPathArray flatPathArray fpc 1 sub get 1 put /fpc 2 def }{ /fpc 0 def } ifelse } if flatPathArray exch fpc exch put 1 IncFPC } { dup length 7 eq { newpath /nToStrip 0 def fpc 1 gt { flatPathArray fpc 2 sub get aload pop pop m flatPathArray fpc 1 sub get aload pop exec /nToStrip 2 def } { fpc 1 eq { flatPathArray fpc 1 sub get aload pop exec /nToStrip 2 def } if } ifelse aload pop exec /segmentArray flattenpath MakeFlatPathArray def /segmentArray nToStrip segmentArray StripFromFront def segmentArray length fpc add 512 lt { flatPathArray fpc segmentArray putinterval segmentArray length IncFPC } { DrawFlatPathArray fpc 1 gt { flatPathArray flatPathArray fpc 2 sub get 0 exch put flatPathArray flatPathArray fpc 1 sub get 1 exch put /fpc 2 def }{ /fpc 0 def } ifelse segmentArray length 512 lt { flatPathArray fpc segmentArray putinterval segmentArray length IncFPC } { segmentArray length /exitLoop false def 0 { 2 copy sub dup 500 gt { pop 500 } { /exitLoop true def } ifelse segmentArray 2 index 2 index getinterval flatPathArray fpc 3 -1 roll putinterval dup IncFPC add exitLoop { exit } { DrawFlatPathArray fpc 1 gt { flatPathArray flatPathArray fpc 2 sub get 0 exch put flatPathArray flatPathArray fpc 1 sub get 1 exch put /fpc 2 def }{ /fpc 0 def } ifelse } ifelse } loop } ifelse } ifelse } if } ifelse } for fpc 0 gt { usingClosepath { AppendClosePath } if DrawFlatPathArray } if saveFlat setflat } bind def %%EndProlog initmsaverestore /tctm matrix currentmatrix def tctm RoundMatrix setmatrix /patternMatrix mstore def 10 setmiterlimit 2 setlinecap newpath % %tLayer % % %tfBegGrp % %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.499 setcmykcolor end} {0.500 0.500 0.500 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.000 setcmykcolor end} {1.000 1.000 1.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 0 231.500 155.875 0.000 0.000 210.000 211.500 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.499 setcmykcolor end} {0.500 0.500 0.500 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def 1.000 352.375 281.000 161.875 300.500 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.499 setcmykcolor end} {0.500 0.500 0.500 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def 1.000 233.875 438.500 352.375 281.000 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.499 setcmykcolor end} {0.500 0.500 0.500 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def 1.000 143.875 263.000 233.875 438.500 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginRect /RT {1.500 RR2} def /SD {} def /SS {setlinewidth SD stroke} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse } def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 0 237.500 221.875 0.000 0.000 3.000 3.000 rect %@EndRect %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC {0.698 0.128 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 417.875 338.015 118.125 267.250 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 381.875 358.500 224.375 239.999 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 223.376 241.999 228.544 292.500 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 2.044 434.199 230.288 0.000 0.000 6.000 6.000 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 151.375 275.680 223.875 238.500 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 2.044 278.949 348.538 0.000 0.000 6.000 6.000 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 2.044 297.824 159.913 0.000 0.000 6.000 6.000 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginRect /RT {SR} def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.000 setcmykcolor end} {1.000 1.000 1.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 -0.104 286.278 228.239 0.000 0.000 7.000 7.000 rect %@EndRect %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginRect /RT {SR} def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.000 setcmykcolor end} {1.000 1.000 1.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 -0.907 307.962 321.521 0.000 0.000 7.000 7.000 rect %@EndRect %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginRect /RT {SR} def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.000 setcmykcolor end} {1.000 1.000 1.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 -0.453 274.051 151.788 0.000 0.000 7.000 7.000 rect %@EndRect %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /SS {setlinewidth SD stroke} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse } def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 2.044 236.199 220.163 0.000 0.000 6.000 6.000 rect %@EndOval % %tfEndGrp % %%Trailer end %%EndDocument end -save0- restore vmr end %%Trailer %End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 1 :[font = text; inactive; preserveAspect; endGroup] What do we notice?The feet of the perpendiculars are colinear (the line is called Simpson's line, after its discoverer)± this has an elegant proof in Euclidean geometry, which I give later. But this was not the problem that my colleague had. What he wanted to know was: if we move the point around, is there any pattern to be seen in the corresponding Simpson lines , and if so can we describe it and find how it comes about? The answer,surprised me: it has to do with circles rolling in circles and relates to a classic circle, the nine-point circle; but I still don't have a proof by Euclidean geometry ± if you find one please let me know. A good way to see what's going on is by using animations ; several functions for making these are included. I found it pleasantly satisfying to be able to combine some Euclidean geometery, coordinate geomety, trigonometry, vector algebra, simultaneous equations, integers modulo 3, determinants and the differential calculus ±and, of course , Mathematica ± in exploring a simple direct topic. Some further investigations are suggested in the section Further Work. ;[s] 10:0,0;81,1;91,2;92,3;96,4;990,5;1002,6;1040,7;1041,8;1110,9;1112,-1; 10:1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0; :[font = section; inactive; Cclosed; preserveAspect; startGroup] The Exploration :[font = text; inactive; preserveAspect] I'm going to apply Mathematica. First, I clear out all existing definitions in the current context. ;[s] 3:0,0;19,1;30,2;99,-1; 3:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; preserveAspect] ClearAll["`*"]; :[font = text; inactive; preserveAspect] Now I can get to work. :[font = text; inactive; preserveAspect] The radius of the circle is taken to be 1, and t is the angle shown in the figure below (we are using polar coordinates). The triangle vertices are v[0], v[1], v[2]; the point on the circle is p[t]; and the feet of the perpendiculars from p[t] to the sides of the triangle are f[0,t],f[1,t],f[2,t]. :[font = postscript; PostScript; formatAsPostScript; output; inactive; thinLines; preserveAspect; leftWrapOffset = 30; pictureLeft = 53; pictureTop = 5; pictureWidth = 351; pictureHeight = 241] %! %%Creator: Mathematica %%AspectRatio: 0.68661 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0 1 0 1 [ [ 92 335 0 0 ] [ 443 576 0 0 ] ] MathScale % Start of Graphics %!PS-Adobe-2.0 EPSF-1.2 %%Title: UNTITLED %%Creator: Altsys Virtuoso 1.0 %%CreationDate: Thu Sep 16 14:46:44 GMT 1993 %%BoundingBox: 92 335 443 576 %%FHPathName: UNTITLED %%DocumentProcSets: Altsys_header 4 0 %%DocumentSuppliedProcSets: Altsys_header 4 0 %%ColorUsage: Color %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFonts: Symbol %%+Courier %%DocumentNeededFonts: Symbol %%+Courier %%EndComments %%BeginProcSet: Altsys_header 4 0 /AltsysDict 233 dict def AltsysDict begin /bdf{bind def}bind def /xdf{exch def}bdf /defed{where{pop true}{false}ifelse}bdf /ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf /d{setdash}bdf /h{closepath}bdf /H{}bdf /J{setlinecap}bdf /j{setlinejoin}bdf /M{setmiterlimit}bdf /n{newpath}bdf /N{newpath}bdf /q{gsave}bdf /Q{grestore}bdf /w{setlinewidth}bdf /sepdef{ dup where not { AltsysSepDict } if 3 1 roll exch put }bdf /st{settransfer}bdf /colorimage defed /_rci xdf /md defed{ md type /dicttype eq { /colorimage where { md eq { /_rci false def }if }if /settransfer where { md eq { /st systemdict /settransfer get def }if }if }if }if /setstrokeadjust defed { true setstrokeadjust /C{curveto}bdf /L{lineto}bdf /m{moveto}bdf } { /dr{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform}bdf /C{dr curveto}bdf /L{dr lineto}bdf /m{dr moveto}bdf /setstrokeadjust{pop}bdf }ifelse /rectstroke defed /xt xdf xt {/yt save def} if /privrectpath { 4 -2 roll m dtransform round exch round exch idtransform 2 copy 0 lt exch 0 lt xor {dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto} {exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto} ifelse closepath }bdf /rectclip{newpath privrectpath clip newpath}def /rectfill{gsave newpath privrectpath fill grestore}def /rectstroke{gsave newpath privrectpath stroke grestore}def xt {yt restore} if /packedarray{array astore readonly}ndf /` {false setoverprint /-save0- save def pop pop pop pop pop concat userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath false setstrokeadjust } bdf /currentpacking defed{true setpacking}if /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /xformfont { currentfont exch makefont setfont } bdf /fhnumcolors 1 statusdict begin /processcolors defed { pop processcolors } { /deviceinfo defed { deviceinfo /Colors known { pop deviceinfo /Colors get } if } if } ifelse end def /printerRes gsave matrix defaultmatrix setmatrix 72 72 dtransform abs exch abs max grestore def /graycalcs [ {Angle Frequency} {GrayAngle GrayFrequency} {0 Width Height matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} {0 GrayWidth GrayHeight matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} ] def /calcgraysteps { /currenthalftone defed {currenthalftone /dicttype eq}{false}ifelse { currenthalftone begin HalftoneType 4 le {graycalcs HalftoneType 1 sub get exec} { HalftoneType 5 eq { Default begin {graycalcs HalftoneType 1 sub get exec} end } {0 60} ifelse } ifelse end } { currentscreen pop exch } ifelse printerRes 300 max exch div exch 2 copy sin mul round dup mul 3 1 roll cos mul round dup mul add 1 add dup maxsteps gt {pop maxsteps} if } bdf /nextrelease defed { /languagelevel defed not { /framebuffer defed { 0 40 string framebuffer 9 1 roll 8 {pop} repeat dup 516 eq exch 520 eq or { /fhnumcolors 3 def /currentscreen {60 0 {pop pop 1}}bdf /calcgraysteps {maxsteps} bdf }if }if }if }if /goodsep { spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or }bdf /bottom -0 def /delta -0 def /frac -0 def /height -0 def /left -0 def /numsteps -0 def /numsteps1 -0 def /radius -0 def /right -0 def /top -0 def /width -0 def /xt -0 def /yt -0 def /df currentflat def /tempstr 1 string def /clipflatness currentflat def /inverted? 0 currenttransfer exec .5 ge def /tc1 [0 0 0 1] def /tc2 [0 0 0 1] def /storerect{/top xdf /right xdf /bottom xdf /left xdf /width right left sub def /height top bottom sub def}bdf /concatprocs{ systemdict /packedarray known {dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse { /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx } { /proc2 exch cvlit def/proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }ifelse }bdf /i{dup 0 eq {pop df dup} {dup} ifelse /clipflatness xdf setflat }bdf version cvr 38.0 le {/setrgbcolor{ currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll setrgbcolor}bdf}if /vms {/vmsv save def} bdf /vmr {vmsv restore} bdf /vmrs{vmsv restore /vmsv save def}bdf /eomode{ {/filler /eofill load def /clipper /eoclip load def} {/filler /fill load def /clipper /clip load def} ifelse }bdf /normtaper{}bdf /logtaper{9 mul 1 add log}bdf /lfxform { /yt xdf /xt xdf xt yt translate rotate storerect left xt sub bottom yt sub translate right left sub 0.00001 max top bottom sub 0.00001 max scale }bdf /CD{/NF exch def{exch dup/FID ne 1 index/UniqueID ne and{exch NF 3 1 roll put} {pop pop}ifelse}forall NF}bdf /MN{1 index length/Len exch def dup length Len add string dup Len 4 -1 roll putinterval dup 0 4 -1 roll putinterval}bdf /RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch {1 index MN cvn/NewN exch def cvn findfont dup maxlength dict CD dup/FontName NewN put dup /Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf /RF{dup FontDirectory exch known{pop 3 -1 roll pop}{RC}ifelse}bdf /FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known {exch pop findfont 3 -1 roll pop} {pop dup findfont dup maxlength dict CD dup dup /Encoding exch /Encoding get 256 array copy 7 -1 roll {3 -1 roll dup 4 -2 roll put}forall put definefont} ifelse}bdf /fps{ currentflat exch dup 0 le{pop 1}if { dup setflat 3 index stopped {1.3 mul dup 3 index gt{pop setflat pop pop stop}if} {exit} ifelse }loop pop setflat pop pop }bdf /fp{100 currentflat fps}bdf /clipper{clip}bdf /W{/clipper load 100 clipflatness fps}bdf end%. AltsysDict %%EndProcSet %%EndProlog %%BeginSetup AltsysDict begin %%IncludeFont: Symbol 0 dict dup begin end /f0 /Symbol FF def %%IncludeFont: Courier 0 dict dup begin end /f1 /Courier FF def end %. AltsysDict %%EndSetup AltsysDict begin /onlyk{false}ndf /ccmyk{dup 5 -1 roll sub 0 max exch}ndf /cmyk2gray{ 4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul add add add 1 min neg 1 add }bdf /setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf /setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf /findcmykcustomcolor{5 packedarray}ndf /setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf /setseparationgray{setgray}ndf /setoverprint{pop}ndf /currentoverprint false ndf /cmykbufs2gray{ 0 1 2 index length 1 sub { 4 index 1 index get0.3 mul 4 index 2 index get0.59 mul 4 index 3 index get0.11 mul 4 index 4 index get add add add cvi 255 min 255 exch sub 2 index 3 1 roll put }for 4 1 roll pop pop pop }bdf /colorimage{ pop pop [ 5 -1 roll/exec cvx 6 -1 roll/exec cvx 7 -1 roll/exec cvx 8 -1 roll/exec cvx /cmykbufs2gray cvx ]cvx image } %. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only) version cvr 47.1 le statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse and{userdict begin bdf end}{ndf}ifelse fhnumcolors 1 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf ic im iy ik cmyk2gray /xt xdf currenttransfer {dup 1.0 exch sub xt mul add}concatprocs st image } ifelse }ndf fhnumcolors 1 ne {yt restore} if fhnumcolors 3 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf 1.0 dup ic ik add min sub 1.0 dup im ik add min sub 1.0 dup iy ik add min sub /ic xdf /iy xdf /im xdf currentcolortransfer 4 1 roll {dup 1.0 exch sub ic mul add}concatprocs 4 1 roll {dup 1.0 exch sub iy mul add}concatprocs 4 1 roll {dup 1.0 exch sub im mul add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage } ifelse }ndf fhnumcolors 3 ne {yt restore} if fhnumcolors 4 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf currentcolortransfer {1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll {1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll {1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll {1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy} true 4 colorimage } ifelse }ndf fhnumcolors 4 ne {yt restore} if /separationimage{image}ndf /newcmykcustomcolor{6 packedarray}ndf /inkoverprint false ndf /setinkoverprint{pop}ndf /setspotcolor { spots exch get dup 4 get (_vc_Registration) eq {pop 1 exch sub setseparationgray} {0 5 getinterval exch setcustomcolor} ifelse }ndf /currentcolortransfer{currenttransfer dup dup dup}ndf /setcolortransfer{st pop pop pop}ndf /fas{}ndf /sas{}ndf /fhsetspreadsize{pop}ndf /filler{fill}bdf /F{gsave {filler}fp grestore}bdf /f{closepath F}bdf /S{gsave {stroke}fp grestore}bdf /s{closepath S}bdf /lfs{ gsave W n lfxform pop pop pop /xt xdf /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} [spots xt get aload pop pop] customcolorimage grestore }ndf /lfp{ gsave W n lfxform 9 {pop} repeat _rci { /lfbuf4 xdf /lfbuf3 xdf /lfbuf2 xdf /lfbuf1 xdf pop 1 256 8 [1 0 0 -256 0 256] {lfbuf1}{lfbuf2}{lfbuf3}{lfbuf4} true 4 colorimage } { 4 {pop} repeat /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} image } ifelse grestore }ndf /bcs [0 0] def /_rfs { /tint2 xdf /tint1 xdf bcs exch 1 exch put /radius xdf /yt xdf /xt xdf tint1 tint2 sub abs calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bcs 0 tint2 tint1 sub frac mul tint1 add put bcs vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /bc4 [0 0 0 0] def /_rfp { /k2 xdf /y2 xdf /m2 xdf /c2 xdf /k1 xdf /y1 xdf /m1 xdf /c1 xdf /radius xdf /yt xdf /xt xdf c1 c2 sub abs m1 m2 sub abs y1 y2 sub abs k1 k2 sub abs max max max calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bc4 0 c2 c1 sub frac mul c1 add put bc4 1 m2 m1 sub frac mul m1 add put bc4 2 y2 y1 sub frac mul y1 add put bc4 3 k2 k1 sub frac mul k1 add put bc4 vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /rfs{_rfs}ndf /rfp{_rfp}ndf /cvc [0 0 0 1] def /vc{ AltsysDict /cvc 2 index put aload length 4 eq {setcmykcolor} {setspotcolor} ifelse }bdf /origmtx matrix currentmatrix def /ImMatrix matrix currentmatrix def 0 setseparationgray /imgr {-4000 -4000 4000 4000 } def /bleed 0 def /clpr {-4000 -4000 4000 4000 } def /xs 1 def /ys 1 def /botx 0 def /overlap 0 def /wdist 18 def 0 2 mul fhsetspreadsize 0 0 ne {/df 0 def /clipflatness 0 def} if /maxsteps 256 def /currentpacking defed{false setpacking}if /spots[ 1 0 0 0 (Process Cyan) false newcmykcustomcolor 0 1 0 0 (Process Magenta) false newcmykcustomcolor 0 0 1 0 (Process Yellow) false newcmykcustomcolor 0 0 0 1 (Process Black) false newcmykcustomcolor ]def clpr storerect left bottom width height rectclip [] 0 d 3.863708 M 1 w 0 j 0 J false setoverprint 0 i false eomode [0 0 0 1]vc vms [1 0 0 1 0 0] 92.875 335.5 442.625 575.5 () ` %%BeginDocument: %!PS-Adobe-2.0 EPSF-1.2 %%Title: fig 3.eps %%Creator: CLARIS EPSF Export Filter V1.0 %%CreationDate:8/6/93 7:37:06 p.m. %%BoundingBox: 92.875 335.500 442.625 575.500 %%QDBoundingBox: 92.875 216.500 442.625 456.500 %%DocumentFonts: Courier %%DocumentProcessColors: Cyan Magenta Yellow Black %%ObjectsIncluded: tText=T tLine=T tRect=T tRRect=T tOval=T tArc=T tFree=F tPoly=F tBMap=F tNote=F tBez=F tPMap=F %%AttributesIncluded: kBaWPattType=T kPixPattType=T kGradientType=F %%EndComments /MAV 300 dict def MAV begin /useClip true def /top 0 def /left 1 def /bottom 2 def /right 3 def /CM 6 array def /CTM 6 array def /CTMR 6 array def /MTC 6 array def /blimit 1500 def /bcnt 0 def /rbox 8 array def /segbox 8 array def /bbox1 4 array def /c1 3 array def /c2 3 array def /d 3 array def /delta 3 array def /mycurrentrgbcolor 3 array def /ulx 0 def /uly 1 def /llx 2 def /lly 3 def /urx 4 def /ury 5 def /lrx 6 def /lry 7 def /sp [0 0] def /ep [0 0] def /bbox 4 array def /pbox 4 array def /scrnProc currentscreen 3 1 roll pop pop def /currentcolorscreen where { begin currentcolorscreen end 3 1 roll pop pop 4 2 roll pop pop 5 -2 roll pop pop 6 -2 roll pop pop /kProc exch def /bProc exch def /gProc exch def /rProc exch def } if /Max {2 copy gt {pop}{exch pop} ifelse} bind def /cellPenW 72.0 /currentcolorscreen where {begin currentcolorscreen end pop pop 10 1 roll pop pop 8 1 roll pop pop 6 1 roll pop pop Max Max Max } {currentscreen pop pop} ifelse div 2.0 div def %%BeginProcSet : rect /rect { /saveobj save def R PC PF LC SS saveobj restore } bind def %%EndProcSet %%BeginProcSet : R /R { newpath pbox astore pop 0 792 translate 1 -1 scale CTMR currentmatrix pop exch translate /objectCord mstore def pbox right get 2 div dup pbox left get exch sub pbox left 3 -1 roll put dup pbox right 3 -1 roll put pbox bottom get 2 div dup pbox top get exch sub pbox top 3 -1 roll put dup pbox bottom 3 -1 roll put translate CTM currentmatrix pop 57.3 mul rotate RT } bind def %%EndProcSet %%BeginProcSet : SaveScreenBW /SaveScreenBW { currentscreen /scrnProc exch def /scrnAngle exch def /scrnFreq exch def } bind def %%EndProcSet %%BeginProcSet : RestoreScreenBW /RestoreScreenBW { scrnFreq scrnAngle MAV /scrnProc get setscreen } bind def %%EndProcSet %%BeginProcSet : SetFreqAngleBW /SetFreqAngleBW { currentscreen 3 1 roll pop pop setscreen } bind def %%EndProcSet %%BeginProcSet : SaveScreenColor /SaveScreenColor { currentcolorscreen /grayProc exch def /grayAngle exch def /grayFreq exch def /bProc exch def /bAngle exch def /bFreq exch def /gProc exch def /gAngle exch def /gFreq exch def /rProc exch def /rAngle exch def /rFreq exch def } bind def %%EndProcSet %%BeginProcSet : RestoreColorScreen /RestoreColorScreen { rFreq rAngle MAV /rProc get gFreq gAngle MAV /gProc get bFreq bAngle MAV /bProc get grayFreq grayAngle MAV /grayProc get setcolorscreen } bind def %%EndProcSet %%BeginProcSet : SetFreqAngleColor /SetFreqAngleColor { currentcolorscreen 3 1 roll pop pop 4 2 roll pop pop 5 -2 roll pop pop 6 -2 roll pop pop 4 1 roll 6 1 roll 8 1 roll 10 1 roll setcolorscreen } bind def %%EndProcSet /initmsaverestore { userdict begin /mdict 10 dict def mdict begin /mindex -1 def /mstacksize 25 def /mstack mstacksize array def /incmindex { /mindex mindex 1 add def } bind def /decmindex { /mindex mindex 1 sub def } bind def /checkmindex { mindex 0 lt { (%ERROR: msave/mrestore stack underflow: Offending command 'mrestore' ) print flush stop } { mindex mstacksize ge { (%ERROR: msave/mrestore stack overflow: Offending command 'msave' ) print flush stop } if } ifelse } bind def /mpush { incmindex checkmindex mstack mindex 3 -1 roll put } bind def /mpop { checkmindex mstack mindex get decmindex } bind def end end } bind def /msave { mdict begin matrix currentmatrix mpush end } bind def /mrestore { mdict begin mpop setmatrix end } bind def /msavelevel { mdict begin mindex 1 add end } bind def /mstore { matrix currentmatrix } bind def /AutoSizeY { 0 0 pl dup 3 1 roll 4 -1 roll add pl exch pop exch sub } bind def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } bind def /pll { transform round exch round exch itransform } bind def /pr { dtransform round exch round exch idtransform } bind def /m { pl moveto } bind def /l { pl lineto } bind def /c { pl curveto } bind def /rm { pr rmoveto } bind def /rl { pr rlineto } bind def /ar { 5 -2 roll pl 5 2 roll arc } bind def /an { 5 -2 roll pl 5 2 roll arcn } bind def /MakePatternFont { /FontDict 20 dict def FontDict begin /FontName exch def /Encoding exch def /FontMatrix [1 0 0 1 0 0 ] def /FontType 3 def /FontBBox [ 0 0 1 1 ] def /PatternDict exch def /RenderPattern { patternDict exch get exec } bind def /BuildChar { exch begin 1 0 0 0 1 1 setcachedevice Encoding exch get RenderPattern end } bind def FontName FontDict definefont pop end } bind def /SnapToPattenGrid { exch dup 0 lt { 1 index sub } if 1 index div truncate mul } bind def /FillPatternString { dup length 1 sub 0 1 3 -1 roll { 2 index 2 index 3 -2 roll put } for pop pop } bind def /AutoSizeY { 0.0 exch dtransform round idtransform exch pop } bind def /AutoSizeX { 0.0 dtransform exch round exch idtransform pop } bind def /AutoCellSize { AutoSizeY exch AutoSizeX exch } bind def /CheckPath { false { pop pop pop true exit} { pop pop pop true exit} { pop pop pop pop pop pop pop true exit} { pop true exit} pathforall } bind def /PatternFill { % patternCharacter /patternString 1 string def /cm mstore def patternMatrix setmatrix 1 1 AutoCellSize dup 0 eq { pop 1} if exch dup 0 eq { pop 1} if exch /patternSize exch 24.0 mul def /PatternSizeX exch 24.0 mul patternString length mul def /flaterror 0 def patternString FillPatternString gsave flaterror 1 add setflat flattenpath pathbbox grestore psy add flaterror add psy SnapToPattenGrid exch psx add flaterror add psx SnapToPattenGrid 3 -1 roll flaterror sub psy SnapToPattenGrid 4 -1 roll flaterror sub psx SnapToPattenGrid 4 2 roll pll 4 2 roll pll /llxsnap exch def /llysnap exch def /urxsnap exch def /urysnap exch def gsave useClip true eq {clip}{eoclip} ifelse newpath /PatternFont findfont [psx 0.0 0.0 psy 0.0 0.0] makefont setfont llysnap patternSize urysnap { llxsnap exch moveto llxsnap PatternSizeX urxsnap { pop patternString show %currentpoint am } for } bind for grestore cm setmatrix } bind def % End 'PatternFill' /DefaultPatternFont { /cm mstore def patternMatrix setmatrix 1 1 AutoCellSize dup 0 eq { pop 1} if exch dup 0 eq { pop 1} if exch /psy exch iSizeY mul def /psx exch iSizeX mul def /patternDict 64 dict def patternDict begin /NotDef {} def /LiteDiagLines { iSizeX iSizeY false [iSizeX 0.0 0.0 iSizeY -1.0 mul 0.0 iSizeY] {pat} imagemask } bind def end /CustEncoding 256 array def 0 255 1 { CustEncoding exch /NotDef put } bind for CustEncoding 65 /LiteDiagLines put patternDict CustEncoding /PatternFont MakePatternFont /pathSegProc { strokepath CheckPath { 65 PatternFill newpath } if } bind def cm setmatrix } bind def /XRound { dup 3 -1 roll exch mul round exch div } bind def /RoundMatrix { /i 0 def dup { 100000.0 XRound 1 index exch i exch put /i i 1 add def } forall } bind def /GetBoxesRatio { 3 -1 roll sub 7 1 roll exch sub 6 1 roll 3 -1 roll sub 5 1 roll exch sub 4 1 roll 3 -1 roll div 3 1 roll exch div exch } bind def %%BeginProcSet : Text Attributes Procs /T {792 exch sub} bind def /sx 0 def /sy 0 def /ex 0 def /ey 0 def /lw 0 def /siz 0 def /U {gsave 0 setlinecap /lw siz 0.078125 mul def /ey exch neg def /ex exch def /sy exch neg def /sx exch def fontkind plain eq { lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto stroke } { currentdict /outlineFontSize known outlineFontSize 0 gt and { fontkind outline eq { /sy sy 0.0119444 siz mul sub def /ey ey 0.0119444 siz mul sub def gsave 1 1 1 setrgbcolor lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto stroke grestore lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto strokepath 0.0119444 siz mul setlinewidth stroke } if fontkind shadow eq fontkind outlineshadow eq or { /sy sy 0.0358332 siz mul sub def /ey ey 0.0358332 siz mul sub def lw setlinewidth lw 2 div sx add sy lw 2 div sub moveto lw 2 div ex add ey lw 2 div sub lineto stroke gsave 1 1 1 setrgbcolor lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto stroke grestore lw siz 0.0119444 mul sub setlinewidth sx sy moveto ex ey lineto strokepath 0.0119444 siz mul setlinewidth stroke } if } if } ifelse grestore} bind def /plain 1 def /outline 2 def /shadow 3 def /outlineshadow 4 def /fess { currentdict /outlineFontSize known { /outlineFontSize 2 index def } if findfont exch dup /siz exch def scalefont setfont } bind def /SHDW {gsave siz oldfontname fess siz 0.055 mul x add y siz 0.05 mul sub moveto c show grestore} def /NRML {gsave 1 1 1 setrgbcolor siz oldfontname fess x y moveto c show grestore siz /Outline fess x y moveto c show} def /S { fontkind plain eq {neg moveto show} if fontkind outline eq {neg /y exch def /x exch def /c exch def NRML} if fontkind shadow eq {neg /y exch def /x exch def /c exch def SHDW NRML} if fontkind outlineshadow eq {neg /y exch def /x exch def /c exch def SHDW NRML} if } bind def /F { /fontkind exch def fontkind plain eq {fess} if fontkind outline eq {dup /oldfontname exch def exch dup /siz exch def exch OLF} if fontkind shadow eq {dup /oldfontname exch def exch dup /siz exch def exch OLF} if fontkind outlineshadow eq {dup /oldfontname exch def exch dup /siz exch def exch OLF} if } bind def /makeoutlinedict 15 dict def /makeoutlinefont { makeoutlinedict begin /uniqueid exch def /strokewidth exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /numentries basefontdict maxlength 1 add def basefontdict /UniqueID known not {/numentries numentries 1 add def} if /outfontdict numentries dict def basefontdict { exch dup /FID ne {exch outfontdict 3 1 roll put} {pop pop} ifelse }forall outfontdict /FontName newfontname put outfontdict /PaintType 2 put outfontdict /StrokeWidth strokewidth put outfontdict /UniqueID uniqueid put newfontname outfontdict definefont pop end }def /UID { findfont dup /UniqueID known {/UniqueID get 1 add} {pop 1} ifelse } def /OLF { dup /Outline 1000 62 div 4 -1 roll UID /outlineFontSize 5 index def makeoutlinefont /Outline findfont exch scalefont setfont } def /CopyEncoding { findfont /Encoding get dup length array /tarrayz exch def tarrayz 0 3 -1 roll putinterval tarrayz } bind def /Re-encode { dup length array copy /eap 0 def exch { dup type /integertype eq { /eap exch def } { 1 index exch eap exch put /eap eap 1 add def } ifelse } forall } bind def /EncodeFont { findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /FontName exch def /Encoding exch def FontName currentdict end definefont pop } bind def %%EndProcSet %%BeginProcSet : clip2pathbbox /clip2pathbbox { /magicNum linewidth 2 div 1 2 sqrt div mul def pathbbox /urymn exch magicNum add def /urxmn exch magicNum add def /llymn exch magicNum sub def /llxmn exch magicNum sub def newpath llxmn llymn moveto llxmn urymn lineto urxmn urymn lineto urxmn llymn lineto closepath clip newpath } bind def %%EndProcSet %% Line takes the following arguments: %% linewidth xEnd yEnd xStart yStart %%BeginProcSet : Line /Line { MAV /LC get length 0 ne { gsave newpath MAV /ArrowType get length 0 eq MAV /SD get length 0 eq and {2 setlinecap /UseClip {clip2pathbbox} def } {0 setlinecap /UseClip {} def } ifelse 0 792 translate 1 -1 scale CTM currentmatrix pop /yStart exch def /xStart exch def /yEnd exch def /xEnd exch def /linewidth exch def MAV /ArrowType get length 0 eq xStart xEnd ne yStart yEnd ne and and {xStart yStart moveto xEnd yEnd lineto UseClip xStart yStart moveto xEnd yEnd lineto} {xStart yStart moveto xEnd yEnd lineto} ifelse linewidth setlinewidth SD strokepath CheckPath {LC PF ArrowType} if grestore } {pop pop pop pop pop} ifelse } bind def /CompensateForStroke { sin currentlinewidth mul exch cos currentlinewidth mul dup 0 translate 4 -1 roll exch 2.0 mul sub 3 1 roll 2.0 mul sub } bind def /arrowdict 10 dict def arrowdict begin /SwallowTail { newpath 0.0 0.0 moveto 1.0 -.5 lineto .666 0.0 lineto 1.0 .5 lineto closepath } bind def /Triangular { newpath 0.0 0.0 moveto 1.0 -.5 lineto 1.0 .5 lineto closepath } bind def /OpenTri { newpath 1.0 0.5 moveto 0.0 0.0 lineto 1.0 -0.5 lineto } bind def /ClosedTri { newpath 1.0 0.5 moveto 0.0 0.0 lineto 1.0 -0.5 lineto closepath } bind def /SlashBar { newpath 0.5 -.5 moveto -.5 0.5 lineto } bind def /Dot { newpath 0.5 0.0 moveto 0 0 1 0 360 arc closepath } bind def /ExtSlashBar { newpath 1.0 -.5 moveto 0.0 0.5 lineto } bind def end /ScaleArrowHead { 0 0 4 -2 roll 0 0 1 1 8 -4 roll GetBoxesRatio scale } bind def /DrawArrowHead { gsave [] 0 setdash currentpoint translate rotate { 4 copy gsave initmatrix 100 200 translate msave ScaleArrowHead pop arrowdict exch get exec mrestore strokepath 0 0 3 index 3 index pathbbox 8 4 roll GetBoxesRatio 4 2 roll grestore 3 index 1.0 exch sub 6 -1 roll { 2 index mul 0 translate }{ pop } ifelse msave ScaleArrowHead scale arrowdict exch get exec mrestore strokepath } { msave ScaleArrowHead arrowdict exch get exec mrestore } ifelse CheckPath { LC PF } if grestore } bind def %%EndProcSet %%BeginProcSet : SR /SR { pbox left get pbox top get moveto pbox right get pbox top get lineto pbox right get pbox bottom get lineto pbox left get pbox bottom get lineto closepath } bind def %%EndProcSet %%BeginProcSet : RR1 /RR1 { pbox top get pbox bottom get sub abs 2 div dup dup dup pbox left get add pbox left 3 -1 roll put pbox right get exch sub pbox right 3 -1 roll put pbox left get pbox bottom get moveto pbox right get 0 3 -1 roll 90 -90 arcn pbox left get 0 3 -1 roll -90 90 arcn closepath } bind def %%EndProcSet %%BeginProcSet : RR2 /RR2 { dup dup dup dup dup dup dup dup pbox top get add pbox top 3 -1 roll put pbox left get add pbox left 3 -1 roll put pbox bottom get exch sub pbox bottom 3 -1 roll put pbox right get exch sub pbox right 3 -1 roll put pbox bottom get add pbox left get exch moveto pbox right get pbox bottom get 3 -1 roll 90 0 arcn pbox right get pbox top get 3 -1 roll 0 270 arcn pbox left get pbox top get 3 -1 roll 270 180 arcn pbox left get pbox bottom get 3 -1 roll 180 90 arcn closepath } bind def %%EndProcSet %%BeginProcSet : E /E { 1.415 setmiterlimit CM currentmatrix pop pbox right get pbox left get sub abs dup pbox bottom get pbox top get sub abs dup 3 -1 roll lt {exch dup 3 -1 roll exch div 1 exch} {dup 3 -1 roll exch div 1} ifelse scale 0 0 3 -1 roll 2 div 0 360 arc closepath CM setmatrix } bind def %%EndProcSet %%BeginProcSet : A1 /A1 {msave pbox right get pbox left get sub abs dup pbox bottom get pbox top get sub abs dup 3 -1 roll lt {exch dup 3 -1 roll exch div 1 exch} {dup 3 -1 roll exch div 1} ifelse scale 0 0 3 -1 roll 2 div 5 -1 roll -90 add 5 -1 roll -90 add arcn mrestore} bind def %%EndProcSet %%BeginProcSet : A2 /A2 {msave 0 0 moveto A1 closepath mrestore} def %%EndProcSet /StripFromFront { dup length 2 index sub 3 1 roll exch 3 -1 roll getinterval } bind def /MakePathArray { /k 0 def {/k k 1 add def pop pop}{/k k 1 add def pop pop}{/k k 1 add def pop pop pop pop pop pop}{/k k 1 add def }pathforall k array /k 0 def {{moveto} 3 array astore 1 index k 3 -1 roll put /k k 1 add def} {{lineto} 3 array astore 1 index k 3 -1 roll put /k k 1 add def} {{curveto} 7 array astore 1 index k 3 -1 roll put /k k 1 add def} {{closepath} 1 array astore 1 index k 3 -1 roll put /k k 1 add def} pathforall }bind def /MakeFlatPathArray { /k 0 def {/k k 1 add def pop pop}{/k k 1 add def pop pop}{pop pop pop pop pop pop}{}pathforall k array /k 0 def {{moveto} 3 array astore 1 index k 3 -1 roll put /k k 1 add def} {{lineto} 3 array astore 1 index k 3 -1 roll put /k k 1 add def} { pop pop pop pop pop pop} {} pathforall }bind def /FractionalLine { 2 index sub .00001 mul exch 3 index sub .00001 mul 4 -1 roll add 3 1 roll add } bind def /calcLineLength { exch 4 -1 roll sub dup mul 3 1 roll exch sub dup mul add sqrt } bind def /InitTotalLineLength { /oldY exch def /oldX exch def theDash aload pop currentLineLength add setdash } bind def /AccumeLineLength { 3 copy pop 2 copy oldX oldY 4 2 roll calcLineLength /segmentLength exch def /currentLineLength currentLineLength segmentLength add def /oldY exch def /oldX exch def } bind def /DecumeLastLineLength { /currentLineLength currentLineLength segmentLength sub def } bind def /DrawFlattendSegment { /pointCount 2 def dup 0 lt { pop 0 } if fpc 3 1 roll 2 index 1 index gt { 2 copy get dup length dup 3 eq { pop dup 0 get exch 1 get 2 copy InitTotalLineLength m } { } ifelse } { pop 1 index } ifelse dup 1 add 3 index exch sub dup 10 gt { pop 10} if { 1 add 2 copy get aload pop AccumeLineLength exec } repeat 3 1 roll pop pop DecumeLastLineLength } bind def /IncFPC { fpc add /fpc exch def } bind def /DrawFlatPathArray { fpc 0 { dup 2 index 1 sub lt { flatPathArray exch newpath 1 sub DrawFlattendSegment gsave pathSegProc grestore newpath } { pop pop exit } ifelse } loop } bind def /RecordFirstSubSegment { closepathArray 0 pathArray 0 get put closepathArray 1 pathArray 0 get aload pop pop pathArray 1 get dup length 3 eq { aload pop pop } { newpath 0 0 moveto aload pop exec /segmentArray flattenpath MakeFlatPathArray def segmentArray 1 get aload pop pop } ifelse FractionalLine {lineto} 3 array astore put } bind def /AppendClosePath { closepathArray 0 get 2 {lineto} put flatPathArray fpc closepathArray 0 get put 1 IncFPC flatPathArray fpc closepathArray 1 get put 1 IncFPC } bind def /RecordCurrentDash { /theDash currentdash 2 array astore def /currentLineLength 0 def } bind def /PatternStroke { 0 setlinecap RecordCurrentDash /saveFlat currentflat def .5 setflat /pathArray MakePathArray def /closepathArray 2 array def /pathLength pathArray length def /flatPathArray 513 array def /currentLineLength 0 def /fpc 0 def pathArray pathLength 1 sub get length 1 eq { /usingClosepath true def RecordFirstSubSegment /pathLength pathLength 1 sub def } { /usingClosepath false def } ifelse 0 1 pathLength 1 sub { pathArray exch get dup length 3 eq { fpc 1 add 512 ge { DrawFlatPathArray fpc 2 ge { flatPathArray flatPathArray fpc 2 sub get 0 put flatPathArray flatPathArray fpc 1 sub get 1 put /fpc 2 def }{ /fpc 0 def } ifelse } if flatPathArray exch fpc exch put 1 IncFPC } { dup length 7 eq { newpath /nToStrip 0 def fpc 1 gt { flatPathArray fpc 2 sub get aload pop pop m flatPathArray fpc 1 sub get aload pop exec /nToStrip 2 def } { fpc 1 eq { flatPathArray fpc 1 sub get aload pop exec /nToStrip 2 def } if } ifelse aload pop exec /segmentArray flattenpath MakeFlatPathArray def /segmentArray nToStrip segmentArray StripFromFront def segmentArray length fpc add 512 lt { flatPathArray fpc segmentArray putinterval segmentArray length IncFPC } { DrawFlatPathArray fpc 1 gt { flatPathArray flatPathArray fpc 2 sub get 0 exch put flatPathArray flatPathArray fpc 1 sub get 1 exch put /fpc 2 def }{ /fpc 0 def } ifelse segmentArray length 512 lt { flatPathArray fpc segmentArray putinterval segmentArray length IncFPC } { segmentArray length /exitLoop false def 0 { 2 copy sub dup 500 gt { pop 500 } { /exitLoop true def } ifelse segmentArray 2 index 2 index getinterval flatPathArray fpc 3 -1 roll putinterval dup IncFPC add exitLoop { exit } { DrawFlatPathArray fpc 1 gt { flatPathArray flatPathArray fpc 2 sub get 0 exch put flatPathArray flatPathArray fpc 1 sub get 1 exch put /fpc 2 def }{ /fpc 0 def } ifelse } ifelse } loop } ifelse } ifelse } if } ifelse } for fpc 0 gt { usingClosepath { AppendClosePath } if DrawFlatPathArray } if saveFlat setflat } bind def %%EndProlog initmsaverestore /tctm matrix currentmatrix def tctm RoundMatrix setmatrix /patternMatrix mstore def 10 setmiterlimit 2 setlinecap newpath % %tLayer % % %tfBegGrp % %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ 1.000 setlinewidth 442.625 333.375 moveto /SwallowTail 12.337 8.224 false 180.012 DrawArrowHead } bind def /SD {} def /PF {fill} def /LC {0.000 0.600 0.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 441.125 333.375 237.000 333.375 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC {0.000 0.600 0.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 199.875 238.750 236.750 333.250 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginArc currentlinecap 0 setlinecap /RT { 450.000 336.000 A1 gsave} def /SD {} def /PF {fill} def /LC {0.000 0.600 0.299 setrgbcolor } def /SS { setlinewidth SD stroke} def /PC {} def /PF {} def 1.000 0 309.000 213.750 0.000 0.000 48.000 48.000 rect setlinecap %@EndArc %@BeginText save %%IncludeFont: Courier [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron] StandardEncoding Re-encode /_Courier /Courier EncodeFont %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 268.500 333.000 0.000 0.000 12.000 24.003 rect %@EndRect gsave 345.001 274.500 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) plain F /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse (v) -11.500 3.000 S ([) -5.499 3.000 S (1) 0.501 3.000 S (]) 6.502 3.000 S grestore %@EndText %@BeginText %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 444.500 189.000 0.000 0.000 12.000 24.003 rect %@EndRect gsave 201.001 450.500 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) fess /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse (v) -11.500 3.000 S ([) -5.499 3.000 S (0) 0.501 3.000 S (]) 6.502 3.000 S grestore %@EndText %@BeginText %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 216.500 182.500 0.000 0.000 12.000 24.003 rect %@EndRect gsave 194.501 222.500 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) fess /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse (p) -12.000 3.000 S ([) -5.999 3.000 S (t) 0.001 3.000 S (]) 6.002 3.000 S grestore %@EndText %@BeginText %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 340.500 385.000 0.000 0.000 12.000 30.004 rect %@EndRect gsave 400.002 346.500 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) fess /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse (s) -14.500 3.000 S (l) -8.499 3.000 S ([) -2.498 3.000 S (t) 3.502 3.000 S (]) 9.503 3.000 S grestore %@EndText %@BeginText %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 293.000 101.500 0.000 0.000 12.000 24.003 rect %@EndRect gsave 113.501 299.000 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) fess /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse (v) -12.000 3.000 S ([) -5.999 3.000 S (2) 0.001 3.000 S (]) 6.002 3.000 S grestore %@EndText %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.499 setcmykcolor end} {0.500 0.500 0.500 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def /PF {} def /PC {} def 1.000 0 227.500 131.125 0.000 0.000 210.000 211.500 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.499 setcmykcolor end} {0.500 0.500 0.500 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def 1.000 327.625 277.000 137.125 296.500 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.499 setcmykcolor end} {0.500 0.500 0.500 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def 1.000 209.125 434.500 327.625 277.000 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.499 setcmykcolor end} {0.500 0.500 0.500 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def 1.000 119.125 259.000 209.125 434.500 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginRect /RT {1.500 RR2} def /SD {} def /SS {setlinewidth SD stroke} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse } def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 0 233.500 197.125 0.000 0.000 3.000 3.000 rect %@EndRect %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 357.125 354.500 199.625 235.999 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 198.626 237.999 203.794 288.500 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 2.044 430.199 205.538 0.000 0.000 6.000 6.000 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 126.625 271.680 199.125 234.500 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 2.044 274.949 323.788 0.000 0.000 6.000 6.000 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /PF {fill} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.449 setcmykcolor end} {0.550 0.550 0.550 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 2.044 293.824 135.163 0.000 0.000 6.000 6.000 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginRect /RT {SR} def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.000 setcmykcolor end} {1.000 1.000 1.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 -0.104 282.278 203.489 0.000 0.000 7.000 7.000 rect %@EndRect %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginRect /RT {SR} def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.000 setcmykcolor end} {1.000 1.000 1.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 -0.907 303.962 296.771 0.000 0.000 7.000 7.000 rect %@EndRect %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginRect /RT {SR} def /SD {} def /PF {fill} def /LC {0.000 0.304 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.000 setcmykcolor end} {1.000 1.000 1.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 -0.453 270.051 127.038 0.000 0.000 7.000 7.000 rect %@EndRect %@BeginText %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 299.500 311.000 0.000 0.000 12.000 36.005 rect %@EndRect gsave 329.002 305.500 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) fess /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse (f) -17.500 3.000 S ([) -11.499 3.000 S (2) -5.498 3.000 S (,) 0.502 3.000 S (t) 6.503 3.000 S (]) 12.504 3.000 S grestore %@EndText %@BeginText %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 251.500 100.000 0.000 0.000 12.000 36.005 rect %@EndRect gsave 118.002 257.500 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) fess /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse (f) -17.500 3.000 S ([) -11.499 3.000 S (1) -5.498 3.000 S (,) 0.502 3.000 S (t) 6.503 3.000 S (]) 12.504 3.000 S grestore %@EndText %@BeginText %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 297.500 176.000 0.000 0.000 12.000 36.005 rect %@EndRect gsave 194.002 303.500 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) fess /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse (f) -17.500 3.000 S ([) -11.499 3.000 S (0) -5.498 3.000 S (,) 0.502 3.000 S (t) 6.503 3.000 S (]) 12.504 3.000 S grestore %@EndText %@BeginText %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 340.500 208.000 0.000 0.000 12.000 30.004 rect %@EndRect gsave 223.002 346.500 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) fess /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse ({) -14.500 3.000 S (0) -8.499 3.000 S (,) -2.498 3.000 S (0) 3.502 3.000 S (}) 9.503 3.000 S grestore %@EndText %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /PF {fill} def /LC {0.000 0.600 0.299 setrgbcolor } def /SS { setlinewidth SD stroke} def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 0.000 setcmykcolor end} {1.000 1.000 1.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 0 330.500 233.875 0.000 0.000 6.000 6.000 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ 1.000 setlinewidth 248.375 310.875 moveto /SwallowTail 12.337 8.224 false 397.597 DrawArrowHead } bind def /SD {} def /PF {fill} def /LC {0.000 0.600 0.299 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 249.563 311.789 251.625 313.375 Line %@EndLine %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginOval /RT {E} def /SD {} def /SS {setlinewidth SD stroke} def /LC { /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse } def /PC { /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse } def /PF {gsave fill grestore} def 1.000 2.044 232.199 195.413 0.000 0.000 6.000 6.000 rect %@EndOval %@BeginRuler %@ 9.0000000000000000000e+0 viewScale %@ 1.1111111111111110490e-1 realScale %@ 8 realDivs %@ 0000 rulerFormat %@EndRuler %@BeginLine /ArrowType{ } def /SD {} def /PF {fill} def /LC {0.698 0.128 1.000 setrgbcolor } def /SS { setlinewidth SD stroke} def 1.000 418.125 339.917 93.375 263.250 Line %@EndLine %@BeginText %@BeginRect /RT {SR} def /LC {} def /SS {pop} def /PF {} def /PC {} def 0.000 0 314.500 244.500 0.000 0.000 12.000 6.000 rect %@EndRect gsave 247.500 320.500 T translate 0.0 rotate 1 1 scale 10.000 (_Courier) fess /setcmykcolor where {begin 0.000 0.000 0.000 1.000 setcmykcolor end} {0.000 0.000 0.000 setrgbcolor} ifelse (t) -3.000 3.000 S grestore %@EndText % %tfEndGrp % restore %%Trailer end %%EndDocument end -save0- restore vmr end %%Trailer %End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 2 :[font = text; inactive; preserveAspect] Here is how these fit together (the use of Mod[i,3] simplifies formulas, since, for example, v[3] = p[ang[Mod[3,3]]] = p[ang[0]] = v[0]) ;[s] 10:0,0;44,1;52,2;95,3;99,4;102,5;119,6;120,7;131,8;132,9;138,-1; 10:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0; :[font = input; dontPreserveAspect] p[t_] := {Cos[t], Sin[t]}; v[i_] := p[ang[Mod[i,3]]]; :[font = text; inactive; preserveAspect] Put :[font = input; dontPreserveAspect] ang[0]= a; ang[1]= b; ang[2]= c; :[font = text; inactive; preserveAspect] I shall find the formula for f[i,t] (the foot of the perpendicular fron p[t] onto the side opposite vertex v[i]); since it is a pair of coordinates I call it {x,y}. What do I know about {x,y}? Because it is on the perpendicular from p[t] to the side v[i+1],v[i+2] it satisfies the equation ;[s] 18:0,0;29,1;35,2;72,3;76,4;107,5;111,6;159,7;164,8;165,9;167,10;188,11;193,12;205,13;235,14;239,15;252,16;266,17;291,-1; 18:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; dontPreserveAspect] perp = ({x,y}-p[t]).(v[i+2]-v[i+1]) == 0; :[font = text; inactive; preserveAspect] and, because it is on the side v[i+1],v[i+2], it satisfies the equation ;[s] 3:0,0;31,1;44,2;72,-1; 3:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; dontPreserveAspect] onside = Det[{{x,y}-v[i+1], {x,y}-v[i+2]}] == 0; :[font = postscript; PostScript; formatAsPostScript; evaluateAsNotebooksKernel; output; inactive; locked; preserveAspect; leftWrapOffset = 30; pictureLeft = 0; pictureTop = 9; pictureWidth = 443; pictureHeight = 232] %! %%Creator: Mathematica %%AspectRatio: 0.523077 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0 1 0 1 [ [ 68 149 0 0 ] [ 588 421 0 0 ] ] MathScale % Start of Graphics %!PS-Adobe-2.0 EPSF-1.2 %%Title: UNTITLED %%Creator: Altsys Virtuoso 1.0 %%CreationDate: Wed Oct 13 09:34:18 GMT 1993 %%BoundingBox: 68 149 588 421 %%FHPathName: UNTITLED %%DocumentProcSets: Altsys_header 4 0 %%DocumentSuppliedProcSets: Altsys_header 4 0 %%ColorUsage: Color %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFonts: Symbol %%+Courier %%+Courier-Bold %%DocumentNeededFonts: Symbol %%+Courier %%+Courier-Bold %%EndComments %%BeginProcSet: Altsys_header 4 0 /AltsysDict 233 dict def AltsysDict begin /bdf{bind def}bind def /xdf{exch def}bdf /defed{where{pop true}{false}ifelse}bdf /ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf /d{setdash}bdf /h{closepath}bdf /H{}bdf /J{setlinecap}bdf /j{setlinejoin}bdf /M{setmiterlimit}bdf /n{newpath}bdf /N{newpath}bdf /q{gsave}bdf /Q{grestore}bdf /w{setlinewidth}bdf /sepdef{ dup where not { AltsysSepDict } if 3 1 roll exch put }bdf /st{settransfer}bdf /colorimage defed /_rci xdf /md defed{ md type /dicttype eq { /colorimage where { md eq { /_rci false def }if }if /settransfer where { md eq { /st systemdict /settransfer get def }if }if }if }if /setstrokeadjust defed { true setstrokeadjust /C{curveto}bdf /L{lineto}bdf /m{moveto}bdf } { /dr{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform}bdf /C{dr curveto}bdf /L{dr lineto}bdf /m{dr moveto}bdf /setstrokeadjust{pop}bdf }ifelse /rectstroke defed /xt xdf xt {/yt save def} if /privrectpath { 4 -2 roll m dtransform round exch round exch idtransform 2 copy 0 lt exch 0 lt xor {dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto} {exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto} ifelse closepath }bdf /rectclip{newpath privrectpath clip newpath}def /rectfill{gsave newpath privrectpath fill grestore}def /rectstroke{gsave newpath privrectpath stroke grestore}def xt {yt restore} if /packedarray{array astore readonly}ndf /` {false setoverprint /-save0- save def pop pop pop pop pop concat userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath false setstrokeadjust } bdf /currentpacking defed{true setpacking}if /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /xformfont { currentfont exch makefont setfont } bdf /fhnumcolors 1 statusdict begin /processcolors defed { pop processcolors } { /deviceinfo defed { deviceinfo /Colors known { pop deviceinfo /Colors get } if } if } ifelse end def /printerRes gsave matrix defaultmatrix setmatrix 72 72 dtransform abs exch abs max grestore def /graycalcs [ {Angle Frequency} {GrayAngle GrayFrequency} {0 Width Height matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} {0 GrayWidth GrayHeight matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} ] def /calcgraysteps { /currenthalftone defed {currenthalftone /dicttype eq}{false}ifelse { currenthalftone begin HalftoneType 4 le {graycalcs HalftoneType 1 sub get exec} { HalftoneType 5 eq { Default begin {graycalcs HalftoneType 1 sub get exec} end } {0 60} ifelse } ifelse end } { currentscreen pop exch } ifelse printerRes 300 max exch div exch 2 copy sin mul round dup mul 3 1 roll cos mul round dup mul add 1 add dup maxsteps gt {pop maxsteps} if } bdf /nextrelease defed { /languagelevel defed not { /framebuffer defed { 0 40 string framebuffer 9 1 roll 8 {pop} repeat dup 516 eq exch 520 eq or { /fhnumcolors 3 def /currentscreen {60 0 {pop pop 1}}bdf /calcgraysteps {maxsteps} bdf }if }if }if }if /goodsep { spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or }bdf /bottom -0 def /delta -0 def /frac -0 def /height -0 def /left -0 def /numsteps -0 def /numsteps1 -0 def /radius -0 def /right -0 def /top -0 def /width -0 def /xt -0 def /yt -0 def /df currentflat def /tempstr 1 string def /clipflatness currentflat def /inverted? 0 currenttransfer exec .5 ge def /tc1 [0 0 0 1] def /tc2 [0 0 0 1] def /storerect{/top xdf /right xdf /bottom xdf /left xdf /width right left sub def /height top bottom sub def}bdf /concatprocs{ systemdict /packedarray known {dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse { /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx } { /proc2 exch cvlit def/proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }ifelse }bdf /i{dup 0 eq {pop df dup} {dup} ifelse /clipflatness xdf setflat }bdf version cvr 38.0 le {/setrgbcolor{ currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll setrgbcolor}bdf}if /vms {/vmsv save def} bdf /vmr {vmsv restore} bdf /vmrs{vmsv restore /vmsv save def}bdf /eomode{ {/filler /eofill load def /clipper /eoclip load def} {/filler /fill load def /clipper /clip load def} ifelse }bdf /normtaper{}bdf /logtaper{9 mul 1 add log}bdf /lfxform { /yt xdf /xt xdf xt yt translate rotate storerect left xt sub bottom yt sub translate right left sub 0.00001 max top bottom sub 0.00001 max scale }bdf /CD{/NF exch def{exch dup/FID ne 1 index/UniqueID ne and{exch NF 3 1 roll put} {pop pop}ifelse}forall NF}bdf /MN{1 index length/Len exch def dup length Len add string dup Len 4 -1 roll putinterval dup 0 4 -1 roll putinterval}bdf /RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch {1 index MN cvn/NewN exch def cvn findfont dup maxlength dict CD dup/FontName NewN put dup /Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf /RF{dup FontDirectory exch known{pop 3 -1 roll pop}{RC}ifelse}bdf /FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known {exch pop findfont 3 -1 roll pop} {pop dup findfont dup maxlength dict CD dup dup /Encoding exch /Encoding get 256 array copy 7 -1 roll {3 -1 roll dup 4 -2 roll put}forall put definefont} ifelse}bdf /fps{ currentflat exch dup 0 le{pop 1}if { dup setflat 3 index stopped {1.3 mul dup 3 index gt{pop setflat pop pop stop}if} {exit} ifelse }loop pop setflat pop pop }bdf /fp{100 currentflat fps}bdf /clipper{clip}bdf /W{/clipper load 100 clipflatness fps}bdf end%. AltsysDict %%EndProcSet %%EndProlog %%BeginSetup AltsysDict begin %%IncludeFont: Symbol 0 dict dup begin end /f0 /Symbol FF def %%IncludeFont: Courier 0 dict dup begin end /f1 /Courier FF def %%IncludeFont: Courier-Bold 0 dict dup begin end /f2 /Courier-Bold FF def end %. AltsysDict %%EndSetup AltsysDict begin /onlyk{false}ndf /ccmyk{dup 5 -1 roll sub 0 max exch}ndf /cmyk2gray{ 4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul add add add 1 min neg 1 add }bdf /setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf /setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf /findcmykcustomcolor{5 packedarray}ndf /setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf /setseparationgray{setgray}ndf /setoverprint{pop}ndf /currentoverprint false ndf /cmykbufs2gray{ 0 1 2 index length 1 sub { 4 index 1 index get0.3 mul 4 index 2 index get0.59 mul 4 index 3 index get0.11 mul 4 index 4 index get add add add cvi 255 min 255 exch sub 2 index 3 1 roll put }for 4 1 roll pop pop pop }bdf /colorimage{ pop pop [ 5 -1 roll/exec cvx 6 -1 roll/exec cvx 7 -1 roll/exec cvx 8 -1 roll/exec cvx /cmykbufs2gray cvx ]cvx image } %. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only) version cvr 47.1 le statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse and{userdict begin bdf end}{ndf}ifelse fhnumcolors 1 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf ic im iy ik cmyk2gray /xt xdf currenttransfer {dup 1.0 exch sub xt mul add}concatprocs st image } ifelse }ndf fhnumcolors 1 ne {yt restore} if fhnumcolors 3 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf 1.0 dup ic ik add min sub 1.0 dup im ik add min sub 1.0 dup iy ik add min sub /ic xdf /iy xdf /im xdf currentcolortransfer 4 1 roll {dup 1.0 exch sub ic mul add}concatprocs 4 1 roll {dup 1.0 exch sub iy mul add}concatprocs 4 1 roll {dup 1.0 exch sub im mul add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage } ifelse }ndf fhnumcolors 3 ne {yt restore} if fhnumcolors 4 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf currentcolortransfer {1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll {1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll {1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll {1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy} true 4 colorimage } ifelse }ndf fhnumcolors 4 ne {yt restore} if /separationimage{image}ndf /newcmykcustomcolor{6 packedarray}ndf /inkoverprint false ndf /setinkoverprint{pop}ndf /setspotcolor { spots exch get dup 4 get (_vc_Registration) eq {pop 1 exch sub setseparationgray} {0 5 getinterval exch setcustomcolor} ifelse }ndf /currentcolortransfer{currenttransfer dup dup dup}ndf /setcolortransfer{st pop pop pop}ndf /fas{}ndf /sas{}ndf /fhsetspreadsize{pop}ndf /filler{fill}bdf /F{gsave {filler}fp grestore}bdf /f{closepath F}bdf /S{gsave {stroke}fp grestore}bdf /s{closepath S}bdf /lfs{ gsave W n lfxform pop pop pop /xt xdf /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} [spots xt get aload pop pop] customcolorimage grestore }ndf /lfp{ gsave W n lfxform 9 {pop} repeat _rci { /lfbuf4 xdf /lfbuf3 xdf /lfbuf2 xdf /lfbuf1 xdf pop 1 256 8 [1 0 0 -256 0 256] {lfbuf1}{lfbuf2}{lfbuf3}{lfbuf4} true 4 colorimage } { 4 {pop} repeat /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} image } ifelse grestore }ndf /bcs [0 0] def /_rfs { /tint2 xdf /tint1 xdf bcs exch 1 exch put /radius xdf /yt xdf /xt xdf tint1 tint2 sub abs calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bcs 0 tint2 tint1 sub frac mul tint1 add put bcs vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /bc4 [0 0 0 0] def /_rfp { /k2 xdf /y2 xdf /m2 xdf /c2 xdf /k1 xdf /y1 xdf /m1 xdf /c1 xdf /radius xdf /yt xdf /xt xdf c1 c2 sub abs m1 m2 sub abs y1 y2 sub abs k1 k2 sub abs max max max calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bc4 0 c2 c1 sub frac mul c1 add put bc4 1 m2 m1 sub frac mul m1 add put bc4 2 y2 y1 sub frac mul y1 add put bc4 3 k2 k1 sub frac mul k1 add put bc4 vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /rfs{_rfs}ndf /rfp{_rfp}ndf /cvc [0 0 0 1] def /vc{ AltsysDict /cvc 2 index put aload length 4 eq {setcmykcolor} {setspotcolor} ifelse }bdf /origmtx matrix currentmatrix def /ImMatrix matrix currentmatrix def 0 setseparationgray /imgr {-4000 -4000 4000 4000 } def /bleed 0 def /clpr {-4000 -4000 4000 4000 } def /xs 1 def /ys 1 def /botx 0 def /overlap 0 def /wdist 18 def 0 2 mul fhsetspreadsize 0 0 ne {/df 0 def /clipflatness 0 def} if /maxsteps 256 def /currentpacking defed{false setpacking}if /spots[ 1 0 0 0 (Process Cyan) false newcmykcustomcolor 0 1 0 0 (Process Magenta) false newcmykcustomcolor 0 0 1 0 (Process Yellow) false newcmykcustomcolor 0 0 0 1 (Process Black) false newcmykcustomcolor ]def /textopf false def /curtextmtx{}def /otw .25 def /msf{dup/curtextmtx xdf makefont setfont}bdf /makesetfont/msf load def /curtextheight{.707104 .707104 curtextmtx dtransform dup mul exch dup mul add sqrt}bdf /ta{1 index {tempstr 0 2 index put tempstr 2 index gsave exec grestore tempstr stringwidth rmoveto 5 index eq{6 index 6 index rmoveto}if 3 index 3 index rmoveto }forall 7{pop}repeat}bdf /sts{/textopf currentoverprint def vc setoverprint /ts{awidthshow}def exec textopf setoverprint}bdf /stol{/xt currentlinewidth def setlinewidth vc newpath /ts{{false charpath stroke}ta}def exec xt setlinewidth}bdf /strk{/textopf currentoverprint def vc setoverprint /ts{{false charpath stroke}ta}def exec textopf setoverprint }bdf clpr storerect left bottom width height rectclip [] 0 d 3.863708 M 1 w 0 j 0 J false setoverprint 0 i false eomode [0 0 0 1]vc vms 588 224 m 334 224 L 334 149 L 588 149 L 588 224 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 334 213.883972 m 0 0 32 0 0 ({x,y} is on the line v[i+1],v[i+2]) ts } false [0 0 0 1]sts { f1 [12 0 0 12 0 0] makesetfont 334 201.883972 m 0 0 32 0 0 (<=>) ts } false [0 0 0 1]sts { f1 [12 0 0 12 0 0] makesetfont 334 189.883972 m 0 0 32 0 0 ({x,y}-v[i+2], {x,y}-v[i+1] are) ts } false [0 0 0 1]sts { f1 [12 0 0 12 0 0] makesetfont 334 177.883972 m 0 0 32 0 0 (linearly dependent) ts } false [0 0 0 1]sts { f1 [12 0 0 12 0 0] makesetfont 334 165.883972 m 0 0 32 0 0 (<=>) ts } false [0 0 0 1]sts %%IncludeFont: Courier-Bold { f2 [12 0 0 12 0 0] makesetfont 334 153.883972 m 0 0 32 0 0 (Det[{x,y}-v[i+1],{x,y}-v[i+2] == 0.) ts } false [0 0 0 1]sts Q 315 220.5 m 69.5 220.5 L 69.5 163 L 315 163 L 315 220.5 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 69.5 210.383972 m 0 0 32 0 0 (Line p[t],{x,y} is perpendicular) ts } false [0 0 0 1]sts { f1 [12 0 0 12 0 0] makesetfont 69.5 198.383972 m 0 0 32 0 0 (to line v[i+1],v[i+2]) ts } false [0 0 0 1]sts { f1 [12 0 0 12 0 0] makesetfont 69.5 186.383972 m 0 0 32 0 0 (<=>) ts } false [0 0 0 1]sts %%IncludeFont: Courier-Bold { f2 [12 0 0 12 0 0] makesetfont 69.5 174.383972 m 0 0 32 0 0 (\({x,y}-p[t]\).\(v[i+2]-v[i+1]\) == 0.) ts } false [0 0 0 1]sts Q 138.6132 420.5633 m 108.6132 420.5633 L 108.6132 407.5633 L 138.6132 407.5633 L 138.6132 420.5633 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 108.613205 410.447266 m 0 0 32 0 0 (p[t]) ts } false [0 0 0 1]sts Q 290 386.5633 m 248.1132 386.5633 L 248.1132 374 L 290 374 L 290 386.5633 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 248.113205 376.447266 m 0.262634 0 32 -0.262634 0 (v[i+2]) ts } false [0 0 0 1]sts Q 169.6132 246.5633 m 123.6132 246.5633 L 123.6132 235.5633 L 169.6132 235.5633 L 169.6132 246.5633 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 123.613205 236.447266 m 0 0 32 0 0 (v[i+1]) ts } false [0 0 0 1]sts Q 90.8546 330.8546 m 90.8546 377.3274 128.5272 415 175 415 C 221.4728 415 259.1454 377.3274 259.1454 330.8546 C 259.1454 284.3817 221.4728 246.7091 175 246.7091 C 128.5272 246.7091 90.8546 284.3817 90.8546 330.8546 C 2 w 3.899994 M [0.4 0.436255 0.420203 0] vc false setoverprint s n 152.8902 250.1012 m 97.1423 360.9225 L 247.1407 374.6419 L S n 136.0901 404.5018 m 234.6905 332.7015 L [1 0.666651 0 0] vc true setoverprint S false setoverprint n true eomode 234.6905 332.7015 m 234.8842 337.505 L 241.1626 327.9993 L 230.182 331.0329 L 234.6905 332.7015 L true setoverprint f false setoverprint n 219.8904 350.7016 m 225.6904 346.3016 L 1 w 3.863708 M S n 242.2905 368.7017 m 152.9344 250.7676 L 2 w 3.899994 M [0.83328 0.83328 0.83328 0] vc S n 242.2905 368.7017 m 237.4911 368.9793 L 247.1051 375.0907 L 243.8802 364.1647 L 242.2905 368.7017 L f n 219.8904 350.7016 m 215.8904 345.9016 L 1 w 3.863708 M [1 0.666651 0 0] vc S n false eomode 133.7901 404.9018 m 133.7901 405.8407 134.5512 406.6018 135.4901 406.6018 C 136.429 406.6018 137.1901 405.8407 137.1901 404.9018 C 137.1901 403.9629 136.429 403.2018 135.4901 403.2018 C 134.5512 403.2018 133.7901 403.9629 133.7901 404.9018 C [1 1 1 0] vc f 0.8 w S n 95.1899 360.3016 m 95.1899 361.2405 95.951 362.0016 96.8899 362.0016 C 97.8288 362.0016 98.5899 361.2405 98.5899 360.3016 C 98.5899 359.3627 97.8288 358.6016 96.8899 358.6016 C 95.951 358.6016 95.1899 359.3627 95.1899 360.3016 C [0.4 0.436255 0.420203 0] vc f S n 245.3905 374.1017 m 245.3905 375.0406 246.1516 375.8017 247.0905 375.8017 C 248.0294 375.8017 248.7905 375.0406 248.7905 374.1017 C 248.7905 373.1628 248.0294 372.4017 247.0905 372.4017 C 246.1516 372.4017 245.3905 373.1628 245.3905 374.1017 C [0.83328 0.83328 0.83328 0] vc f S n 151.1901 250.1012 m 151.1901 251.0401 151.9512 251.8012 152.8901 251.8012 C 153.829 251.8012 154.5901 251.0401 154.5901 250.1012 C 154.5901 249.1623 153.829 248.4012 152.8901 248.4012 C 151.9512 248.4012 151.1901 249.1623 151.1901 250.1012 C f S n 220.0632 341.5633 m 220.0632 342.9716 221.2049 344.1133 222.6132 344.1133 C 224.0215 344.1133 225.1632 342.9716 225.1632 341.5633 C 225.1632 340.155 224.0215 339.0133 222.6132 339.0133 C 221.2049 339.0133 220.0632 340.155 220.0632 341.5633 C f 1.2 w S n 270.2264 349.8766 m 228.2264 349.8766 L 228.2264 337.3766 L 270.2264 337.3766 L 270.2264 349.8766 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 228.22641 339.760559 m 0 0 32 0 0 ({x,y}) ts } false [0 0 0 1]sts Q 560 385.2633 m 516.6124 385.2633 L 516.6124 372 L 560 372 L 560 385.2633 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 516.612411 375.147263 m 0 0 32 0 0 (v[i+2]) ts } false [0 0 0 1]sts Q 436 245.2633 m 391.1124 245.2633 L 391.1124 231 L 436 231 L 436 245.2633 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 391.112411 235.147263 m 0 0 32 0 0 (v[i+1]) ts } false [0 0 0 1]sts Q vmrs 354.8546 330.8546 m 354.8546 377.3274 392.5272 415 439 415 C 485.4728 415 523.1454 377.3274 523.1454 330.8546 C 523.1454 284.3817 485.4728 246.7091 439 246.7091 C 392.5272 246.7091 354.8546 284.3817 354.8546 330.8546 C 2 w 3.899994 M [0.4 0.436255 0.420203 0] vc s n 416.8902 250.1012 m 361.1423 360.9225 L 511.1407 374.6419 L S n 479.1124 331.5 m 417.8902 251.6013 L [0.83328 0.83328 0.83328 0] vc S n true eomode 479.1124 331.5 m 474.313 331.7776 L 483.927 337.889 L 480.7021 326.9631 L 479.1124 331.5 L f n 510.3905 372.9017 m 492.6124 349 L S n 492.6124 349 m 497.4118 348.7224 L 487.7978 342.611 L 491.0227 353.5369 L 492.6124 349 L f n false eomode 359.1899 360.3016 m 359.1899 361.2405 359.951 362.0016 360.8899 362.0016 C 361.8288 362.0016 362.5899 361.2405 362.5899 360.3016 C 362.5899 359.3627 361.8288 358.6016 360.8899 358.6016 C 359.951 358.6016 359.1899 359.3627 359.1899 360.3016 C [0.4 0.436255 0.420203 0] vc f 0.8 w 3.863708 M S n 509.3905 374.1017 m 509.3905 375.0406 510.1516 375.8017 511.0905 375.8017 C 512.0294 375.8017 512.7905 375.0406 512.7905 374.1017 C 512.7905 373.1628 512.0294 372.4017 511.0905 372.4017 C 510.1516 372.4017 509.3905 373.1628 509.3905 374.1017 C [0.83328 0.83328 0.83328 0] vc f S n 415.1901 250.1012 m 415.1901 251.0401 415.9512 251.8012 416.8901 251.8012 C 417.829 251.8012 418.5901 251.0401 418.5901 250.1012 C 418.5901 249.1623 417.829 248.4012 416.8901 248.4012 C 415.9512 248.4012 415.1901 249.1623 415.1901 250.1012 C f S n 483.5624 340 m 483.5624 341.4083 484.7041 342.55 486.1124 342.55 C 487.5208 342.55 488.6624 341.4083 488.6624 340 C 488.6624 338.5917 487.5208 337.45 486.1124 337.45 C 484.7041 337.45 483.5624 338.5917 483.5624 340 C f 1.2 w S n 530 348.7633 m 492.6124 348.7633 L 492.6124 335 L 530 335 L 530 348.7633 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 492.612411 338.647263 m 0 0 32 0 0 ({x,y}) ts } false [0 0 0 1]sts Q vmr end %%Trailer %End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 3 :[font = text; inactive; preserveAspect] So, with some simplification , the feet of the perpendiculars are given by :[font = input; Cclosed; preserveAspect; startGroup] f[i_,t_] = Factor[{x,y}/.Solve[{perp,onside}, {x,y}][[1]], Trig -> True] :[font = output; output; inactive; preserveAspect; endGroup] {(Cos[t] + Cos[ang[Mod[1 + i, 3]]] - Cos[t - ang[Mod[1 + i, 3]] - ang[Mod[2 + i, 3]]] + Cos[ang[Mod[2 + i, 3]]]) /2, (Sin[t] + Sin[ang[Mod[1 + i, 3]]] + Sin[t - ang[Mod[1 + i, 3]] - ang[Mod[2 + i, 3]]] + Sin[ang[Mod[2 + i, 3]]]) /2} ;[o] {(Cos[t] + Cos[ang[Mod[1 + i, 3]]] - Cos[t - ang[Mod[1 + i, 3]] - ang[Mod[2 + i, 3]]] + Cos[ang[Mod[2 + i, 3]]]) / 2, (Sin[t] + Sin[ang[Mod[1 + i, 3]]] + Sin[t - ang[Mod[1 + i, 3]] - ang[Mod[2 + i, 3]]] + Sin[ang[Mod[2 + i, 3]]]) / 2} :[font = text; inactive; preserveAspect] (Using "=" rather than ":=" in gets the right hand side simplified once and for all instead of every time that the function is subseqently used (it is important if one does this that the symbols i and t are unassigned). The option Trig is set to True because so thatt Factor can use the special techniques available for trigonometric expressions.) ;[s] 2:0,0;346,1;348,-1; 2:1,9,7,Times,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] The determinant test for colinearity that we just used is very useful ± here's another use. :[font = text; inactive; dontPreserveAspect] The feet of the perpendiculars are colinear if and only if Det[{f[1,t]-f[0,t],f[2,t]-f[0,t]}] = 0. Let's compute: ;[s] 3:0,0;66,1;105,2;120,-1; 3:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; Cclosed; dontPreserveAspect; startGroup] Factor[ Det[{f[1,t]-f[0,t],f[2,t]-f[0,t]}], Trig->True ] :[font = output; output; inactive; preserveAspect; endGroup] 0 ;[o] 0 :[font = text; inactive; dontPreserveAspect] Fine, the feet of the perpendiculars are colinear. ;[s] 3:0,0;37,1;40,2;50,-1; 3:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] We press on with investigating the family of Simpson lines produced by varying p[t]. ;[s] 4:0,0;78,1;79,2;83,3;84,-1; 4:1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] First we need the equation of the Simpson line through the feet f[i,t]; again we use the determinant test. ;[s] 4:0,0;64,1;65,2;71,3;107,-1; 4:1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; dontPreserveAspect] The point {x,y} is on the line if and only if the determinant Det[{f[1,t]-{x,y}, f[2,t]-{x,y}}] is zero; calculate it: ;[s] 5:0,0;10,1;15,2;65,3;100,4;122,-1; 5:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; Cclosed; dontPreserveAspect; startGroup] Factor[ Det[{f[1,t]-{x,y}, f[2,t]-{x,y}}], Trig->True ] :[font = output; output; inactive; preserveAspect; endGroup] Sin[b/2 - c/2]*Sin[a/2 - t/2]*(2*y*Cos[a/2 + b/2 + c/2 - t/2] + Sin[a/2 + b/2 + c/2 - (3*t)/2] + Sin[a/2 + b/2 - c/2 - t/2] + Sin[a/2 - b/2 + c/2 - t/2] - 2*x*Sin[a/2 + b/2 + c/2 - t/2] - Sin[a/2 - b/2 - c/2 + t/2]) ;[o] b c a t a b c t a b c 3 t Sin[- - -] Sin[- - -] (2 y Cos[- + - + - - -] + Sin[- + - + - - ---] + 2 2 2 2 2 2 2 2 2 2 2 2 a b c t a b c t a b c t Sin[- + - - - - -] + Sin[- - - + - - -] - 2 x Sin[- + - + - - -] - 2 2 2 2 2 2 2 2 2 2 2 2 a b c t Sin[- - - - - + -]) 2 2 2 2 :[font = text; inactive; preserveAspect] The first two factors are zero only in exceptional circumstances. So, if we pick the third one, :[font = input; Cclosed; dontPreserveAspect; startGroup] sl[t_] = %[[3]] :[font = output; output; inactive; dontPreserveAspect; endGroup] 2*y*Cos[a/2 + b/2 + c/2 - t/2] + Sin[a/2 + b/2 + c/2 - (3*t)/2] + Sin[a/2 + b/2 - c/2 - t/2] + Sin[a/2 - b/2 + c/2 - t/2] - 2*x*Sin[a/2 + b/2 + c/2 - t/2] - Sin[a/2 - b/2 - c/2 + t/2] ;[o] a b c t a b c 3 t a b c t 2 y Cos[- + - + - - -] + Sin[- + - + - - ---] + Sin[- + - - - - -] + 2 2 2 2 2 2 2 2 2 2 2 2 a b c t a b c t a b c t Sin[- - - + - - -] - 2 x Sin[- + - + - - -] - Sin[- - - - - + -] 2 2 2 2 2 2 2 2 2 2 2 2 :[font = text; inactive; preserveAspect] then the equation of the Simpson line for p[t] is sl[t] == 0. ;[s] 4:0,0;43,1;48,2;52,3;63,-1; 4:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0; :[font = text; inactive; preserveAspect] Now for the pictures. The easiest way to get these is to call up a package designed for the job (you can find out about this package and many others in the technical report "Guide to Standard Mathematica Packages" that comes with Mathematica) ;[s] 5:0,0;193,1;204,2;231,3;242,4;243,-1; 5:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; preserveAspect] Needs["Graphics`ImplicitPlot`"]; :[font = text; inactive; preserveAspect] First, I generate a list of equations sl[t] == 0 for a range of values if t (it will speed calculation if I first get a numerical value for Pi) ;[s] 7:0,0;39,1;49,2;76,3;78,4;142,5;144,6;146,-1; 7:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; preserveAspect] pi = N[Pi]; Simpsonseqns[a_,b_,c_] = Table[sl[t]==0,{t,0,2pi,pi/12}]; :[font = text; inactive; preserveAspect] Now I plot their graphs for particular values of a,b,c (I have chosen .1, .7, -1.6). The option Epilog is used to draw the original circle and the vertices of the triangle on top of the rest of the picture. ;[s] 3:0,0;71,1;85,2;207,-1; 3:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; Cclosed; preserveAspect; startGroup] ImplicitPlot[ Simpsonseqns[.1, .7, -1.6], {x,-1.1, 2.5},{y,-1.5,1.5}, Axes -> False, PlotStyle -> RGBColor[0.699, 0.129, 1.000], Epilog -> { GrayLevel[0.6],Circle[{0,0},1], PointSize[.03], Point/@ p/@{.1,.7,-1.6} } ]; :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 67; pictureTop = 5; pictureWidth = 246; pictureHeight = 205; endGroup] %! %%Creator: Mathematica %%AspectRatio: .83333 MathPictureStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.314815 0.26455 0.416667 0.26455 [ [ 0 0 0 0 ] [ 1 .83333 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p P 0 0 m 1 0 L 1 .83333 L 0 .83333 L closepath clip newpath p p p .699 .129 1 r .001 w .02381 .65861 m .04856 .64815 L .06349 .64184 L .10317 .62506 L .12678 .61508 L .14286 .60828 L .18254 .5915 L .20499 .58201 L .22222 .57473 L .2619 .55795 L .28321 .54894 L .30159 .54117 L .34127 .52439 L .36142 .51587 L .38095 .50762 L .42063 .49084 L .43964 .4828 L .46032 .47406 L .5 .45728 L .51785 .44974 L .53968 .44051 L .57937 .42373 L .59607 .41667 L .61905 .40695 L .65873 .39017 L .67428 .3836 L .69841 .3734 L .7381 .35662 L .7525 .35053 L .77778 .33984 L .81746 .32306 L .83071 .31746 L .85714 .30629 L .89683 .28951 L .90893 .28439 L .93651 .27273 L .97619 .25595 L s P P p p .699 .129 1 r .001 w .02381 .79738 m .05269 .78042 L .06349 .77408 L .10317 .75078 L .10902 .74735 L .14286 .72749 L .16534 .71429 L .18254 .70419 L .22166 .68122 L .22222 .68089 L .2619 .65759 L .27799 .64815 L .30159 .63429 L .33431 .61508 L .34127 .61099 L .38095 .58769 L .39063 .58201 L .42063 .56439 L .44695 .54894 L .46032 .5411 L .5 .5178 L .50328 .51587 L .53968 .4945 L .5596 .4828 L .57937 .4712 L .61592 .44974 L .61905 .4479 L .65873 .4246 L .67225 .41667 L .69841 .4013 L .72857 .3836 L .7381 .37801 L .77778 .35471 L .78489 .35053 L .81746 .33141 L .84122 .31746 L .85714 .30811 L .89683 .28481 L .89754 .28439 L .93651 .26151 L .95386 .25132 L .97619 .23821 L s P P p p .699 .129 1 r .001 w .97619 .20136 m .95451 .21825 L .93651 .23228 L .91206 .25132 L .89683 .26319 L .86961 .28439 L .85714 .2941 L .82716 .31746 L .81746 .32501 L .7847 .35053 L .77778 .35592 L .74225 .3836 L .7381 .38684 L .6998 .41667 L .69841 .41775 L .65873 .44866 L .65735 .44974 L .61905 .47957 L .6149 .4828 L .57937 .51049 L .57245 .51587 L .53968 .5414 L .53 .54894 L .5 .57231 L .48755 .58201 L .46032 .60322 L .4451 .61508 L .42063 .63414 L .40265 .64815 L .38095 .66505 L .3602 .68122 L .34127 .69596 L .31775 .71429 L .30159 .72687 L .2753 .74735 L .2619 .75779 L .23284 .78042 L .22222 .7887 L .19039 .81349 L s P P p p .699 .129 1 r .001 w .97619 .13249 m .95685 .15212 L .93651 .17276 L .92426 .18519 L .89683 .21303 L .89167 .21825 L .85908 .25132 L .85714 .25329 L .82649 .28439 L .81746 .29356 L .7939 .31746 L .77778 .33382 L .76132 .35053 L .7381 .37409 L .72873 .3836 L .69841 .41436 L .69614 .41667 L .66355 .44974 L .65873 .45462 L .63096 .4828 L .61905 .49489 L .59837 .51587 L .57937 .53516 L .56578 .54894 L .53968 .57542 L .53319 .58201 L .5006 .61508 L .5 .61569 L .46801 .64815 L .46032 .65595 L .43542 .68122 L .42063 .69622 L .40283 .71429 L .38095 .73649 L .37024 .74735 L .34127 .77675 L .33765 .78042 L .30506 .81349 L s P P p p .699 .129 1 r .001 w .37099 .81349 m .38095 .80031 L .39598 .78042 L .42063 .74781 L .42098 .74735 L .44597 .71429 L .46032 .6953 L .47096 .68122 L .49596 .64815 L .5 .6428 L .52095 .61508 L .53968 .59029 L .54594 .58201 L .57093 .54894 L .57937 .53779 L .59593 .51587 L .61905 .48528 L .62092 .4828 L .64591 .44974 L .65873 .43278 L .67091 .41667 L .6959 .3836 L .69841 .38027 L .72089 .35053 L .7381 .32777 L .74589 .31746 L .77088 .28439 L .77778 .27526 L .79587 .25132 L .81746 .22276 L .82087 .21825 L .84586 .18519 L .85714 .17026 L .87085 .15212 L .89585 .11905 L .89683 .11775 L .92084 .08598 L .93651 .06525 L .94583 .05291 L .97082 .01984 L s P P p p .699 .129 1 r .001 w .40605 .81349 m .42063 .7878 L .42482 .78042 L .4436 .74735 L .46032 .7179 L .46237 .71429 L .48114 .68122 L .49991 .64815 L .5 .64799 L .51868 .61508 L .53746 .58201 L .53968 .57809 L .55623 .54894 L .575 .51587 L .57937 .50818 L .59377 .4828 L .61254 .44974 L .61905 .43827 L .63131 .41667 L .65009 .3836 L .65873 .36837 L .66886 .35053 L .68763 .31746 L .69841 .29846 L .7064 .28439 L .72517 .25132 L .7381 .22856 L .74394 .21825 L .76272 .18519 L .77778 .15865 L .78149 .15212 L .80026 .11905 L .81746 .08875 L .81903 .08598 L .8378 .05291 L .85657 .01984 L s P P p p .699 .129 1 r .001 w .4227 .81349 m .43612 .78042 L .44953 .74735 L .46032 .72077 L .46295 .71429 L .47636 .68122 L .48978 .64815 L .5 .62295 L .50319 .61508 L .51661 .58201 L .53002 .54894 L .53968 .52514 L .54344 .51587 L .55686 .4828 L .57027 .44974 L .57937 .42732 L .58369 .41667 L .5971 .3836 L .61052 .35053 L .61905 .3295 L .62393 .31746 L .63735 .28439 L .65076 .25132 L .65873 .23169 L .66418 .21825 L .6776 .18519 L .69101 .15212 L .69841 .13387 L .70443 .11905 L .71784 .08598 L .73126 .05291 L .7381 .03606 L .74467 .01984 L s P P p p .699 .129 1 r .001 w .43072 .81349 m .43932 .78042 L .44792 .74735 L .45652 .71429 L .46032 .6997 L .46513 .68122 L .47373 .64815 L .48233 .61508 L .49093 .58201 L .49954 .54894 L .5 .54716 L .50814 .51587 L .51674 .4828 L .52534 .44974 L .53395 .41667 L .53968 .39461 L .54255 .3836 L .55115 .35053 L .55975 .31746 L .56836 .28439 L .57696 .25132 L .57937 .24207 L .58556 .21825 L .59416 .18519 L .60277 .15212 L .61137 .11905 L .61905 .08953 L .61997 .08598 L .62857 .05291 L .63718 .01984 L s P P p p .699 .129 1 r .001 w .43833 .81349 m .44244 .78042 L .44655 .74735 L .45066 .71429 L .45477 .68122 L .45887 .64815 L .46032 .63653 L .46298 .61508 L .46709 .58201 L .4712 .54894 L .47531 .51587 L .47941 .4828 L .48352 .44974 L .48763 .41667 L .49174 .3836 L .49585 .35053 L .49996 .31746 L .5 .3171 L .50406 .28439 L .50817 .25132 L .51228 .21825 L .51639 .18519 L .5205 .15212 L .5246 .11905 L .52871 .08598 L .53282 .05291 L .53693 .01984 L s P P p p .699 .129 1 r .001 w .45266 .81349 m .45242 .78042 L .45218 .74735 L .45194 .71429 L .4517 .68122 L .45146 .64815 L .45122 .61508 L .45097 .58201 L .45073 .54894 L .45049 .51587 L .45025 .4828 L .45001 .44974 L .44977 .41667 L .44953 .3836 L .44928 .35053 L .44904 .31746 L .4488 .28439 L .44856 .25132 L .44832 .21825 L .44808 .18519 L .44784 .15212 L .44759 .11905 L .44735 .08598 L .44711 .05291 L .44687 .01984 L s P P p p .699 .129 1 r .001 w .47988 .81349 m .47528 .78042 L .47068 .74735 L .46608 .71429 L .46148 .68122 L .46032 .67286 L .45688 .64815 L .45228 .61508 L .44768 .58201 L .44308 .54894 L .43848 .51587 L .43388 .4828 L .42928 .44974 L .42468 .41667 L .42063 .38755 L .42009 .3836 L .41549 .35053 L .41089 .31746 L .40629 .28439 L .40169 .25132 L .39709 .21825 L .39249 .18519 L .38789 .15212 L .38329 .11905 L .38095 .10224 L .37869 .08598 L .37409 .05291 L .36949 .01984 L s P P p p .699 .129 1 r .001 w .52529 .81349 m .51617 .78042 L .50705 .74735 L .5 .7218 L .49793 .71429 L .48881 .68122 L .47969 .64815 L .47057 .61508 L .46145 .58201 L .46032 .57791 L .45233 .54894 L .44321 .51587 L .43409 .4828 L .42497 .44974 L .42063 .43402 L .41585 .41667 L .40673 .3836 L .39761 .35053 L .38849 .31746 L .38095 .29014 L .37937 .28439 L .37025 .25132 L .36113 .21825 L .35201 .18519 L .34289 .15212 L .34127 .14625 L .33377 .11905 L .32465 .08598 L .31553 .05291 L .30641 .01984 L s P P p p .699 .129 1 r .001 w .59353 .81349 m .57955 .78042 L .57937 .78 L .56556 .74735 L .55158 .71429 L .53968 .68614 L .5376 .68122 L .52362 .64815 L .50964 .61508 L .5 .59228 L .49566 .58201 L .48168 .54894 L .4677 .51587 L .46032 .49842 L .45371 .4828 L .43973 .44974 L .42575 .41667 L .42063 .40457 L .41177 .3836 L .39779 .35053 L .38381 .31746 L .38095 .31071 L .36983 .28439 L .35585 .25132 L .34186 .21825 L .34127 .21685 L .32788 .18519 L .3139 .15212 L .30159 .12299 L .29992 .11905 L .28594 .08598 L .27196 .05291 L .2619 .02913 L .25798 .01984 L s P P p p .699 .129 1 r .001 w .6889 .81349 m .66948 .78042 L .65873 .76211 L .65007 .74735 L .63065 .71429 L .61905 .69452 L .61124 .68122 L .59182 .64815 L .57937 .62693 L .57241 .61508 L .55299 .58201 L .53968 .55934 L .53358 .54894 L .51416 .51587 L .5 .49176 L .49474 .4828 L .47533 .44974 L .46032 .42417 L .45591 .41667 L .4365 .3836 L .42063 .35658 L .41708 .35053 L .39767 .31746 L .38095 .28899 L .37825 .28439 L .35884 .25132 L .34127 .2214 L .33942 .21825 L .32 .18519 L .30159 .15382 L .30059 .15212 L .28117 .11905 L .2619 .08623 L .26176 .08598 L .24234 .05291 L .22293 .01984 L s P P p p .699 .129 1 r .001 w .81616 .81349 m .7904 .78042 L .77778 .76422 L .76464 .74735 L .73888 .71429 L .7381 .71328 L .71312 .68122 L .69841 .66234 L .68736 .64815 L .66159 .61508 L .65873 .6114 L .63583 .58201 L .61905 .56046 L .61007 .54894 L .58431 .51587 L .57937 .50952 L .55855 .4828 L .53968 .45858 L .53279 .44974 L .50703 .41667 L .5 .40764 L .48127 .3836 L .46032 .3567 L .45551 .35053 L .42975 .31746 L .42063 .30576 L .40399 .28439 L .38095 .25482 L .37823 .25132 L .35247 .21825 L .34127 .20388 L .32671 .18519 L .30159 .15293 L .30095 .15212 L .27519 .11905 L .2619 .10199 L .24943 .08598 L .22367 .05291 L .22222 .05105 L .19791 .01984 L s P P p p .699 .129 1 r .001 w .97619 .8077 m .94852 .78042 L .93651 .76859 L .91496 .74735 L .89683 .72948 L .88141 .71429 L .85714 .69037 L .84785 .68122 L .81746 .65127 L .8143 .64815 L .78074 .61508 L .77778 .61216 L .74718 .58201 L .7381 .57305 L .71363 .54894 L .69841 .53395 L .68007 .51587 L .65873 .49484 L .64652 .4828 L .61905 .45573 L .61296 .44974 L .57941 .41667 L .57937 .41662 L .54585 .3836 L .53968 .37752 L .5123 .35053 L .5 .33841 L .47874 .31746 L .46032 .2993 L .44519 .28439 L .42063 .26019 L .41163 .25132 L .38095 .22109 L .37808 .21825 L .34452 .18519 L .34127 .18198 L .31097 .15212 L .30159 .14287 L .27741 .11905 L .2619 .10377 L .24386 .08598 L .22222 .06466 L .2103 .05291 L .18254 .02555 L .17675 .01984 L s P P p p .699 .129 1 r .001 w .97619 .64515 m .93651 .61515 L .93641 .61508 L .89683 .58516 L .89266 .58201 L .85714 .55517 L .8489 .54894 L .81746 .52518 L .80515 .51587 L .77778 .49519 L .76139 .4828 L .7381 .46519 L .71764 .44974 L .69841 .4352 L .67389 .41667 L .65873 .40521 L .63013 .3836 L .61905 .37522 L .58638 .35053 L .57937 .34523 L .54263 .31746 L .53968 .31524 L .5 .28524 L .49887 .28439 L .46032 .25525 L .45512 .25132 L .42063 .22526 L .41136 .21825 L .38095 .19527 L .36761 .18519 L .34127 .16528 L .32386 .15212 L .30159 .13529 L .2801 .11905 L .2619 .10529 L .23635 .08598 L .22222 .0753 L .19259 .05291 L .18254 .04531 L .14884 .01984 L s P P p p .699 .129 1 r .001 w .97619 .52002 m .96889 .51587 L .93651 .49749 L .91063 .4828 L .89683 .47497 L .85714 .45244 L .85238 .44974 L .81746 .42991 L .79412 .41667 L .77778 .40739 L .7381 .38486 L .73587 .3836 L .69841 .36234 L .67761 .35053 L .65873 .33981 L .61936 .31746 L .61905 .31728 L .57937 .29476 L .5611 .28439 L .53968 .27223 L .50285 .25132 L .5 .24971 L .46032 .22718 L .44459 .21825 L .42063 .20465 L .38634 .18519 L .38095 .18213 L .34127 .1596 L .32808 .15212 L .30159 .13708 L .26983 .11905 L .2619 .11455 L .22222 .09202 L .21157 .08598 L .18254 .0695 L .15332 .05291 L .14286 .04697 L .10317 .02445 L .09506 .01984 L s P P p p .699 .129 1 r .001 w .02381 .03967 m .05646 .05291 L .06349 .05576 L .10317 .07186 L .13797 .08598 L .14286 .08796 L .18254 .10406 L .21948 .11905 L .22222 .12016 L .2619 .13626 L .301 .15212 L .30159 .15236 L .34127 .16845 L .38095 .18455 L .38251 .18519 L .42063 .20065 L .46032 .21675 L .46402 .21825 L .5 .23285 L .53968 .24895 L .54554 .25132 L .57937 .26505 L .61905 .28114 L .62705 .28439 L .65873 .29724 L .69841 .31334 L .70856 .31746 L .7381 .32944 L .77778 .34554 L .79008 .35053 L .81746 .36164 L .85714 .37774 L .87159 .3836 L .89683 .39384 L .93651 .40993 L .9531 .41667 L .97619 .42603 L s P P p p .699 .129 1 r .001 w .02381 .11094 m .05498 .11905 L .06349 .12126 L .10317 .13159 L .14286 .14191 L .1821 .15212 L .18254 .15223 L .22222 .16256 L .2619 .17288 L .30159 .1832 L .30921 .18519 L .34127 .19352 L .38095 .20385 L .42063 .21417 L .43633 .21825 L .46032 .22449 L .5 .23482 L .53968 .24514 L .56345 .25132 L .57937 .25546 L .61905 .26578 L .65873 .27611 L .69057 .28439 L .69841 .28643 L .7381 .29675 L .77778 .30708 L .81746 .3174 L .81769 .31746 L .85714 .32772 L .89683 .33805 L .93651 .34837 L .94481 .35053 L .97619 .35869 L s P P p p .699 .129 1 r .001 w .02381 .19551 m .06349 .20044 L .10317 .20537 L .14286 .2103 L .18254 .21523 L .20692 .21825 L .22222 .22016 L .2619 .22508 L .30159 .23001 L .34127 .23494 L .38095 .23987 L .42063 .2448 L .46032 .24973 L .47311 .25132 L .5 .25466 L .53968 .25959 L .57937 .26452 L .61905 .26945 L .65873 .27438 L .69841 .27931 L .7381 .28424 L .73929 .28439 L .77778 .28917 L .81746 .2941 L .85714 .29903 L .89683 .30396 L .93651 .30889 L .97619 .31382 L s P P p p .699 .129 1 r .001 w .02381 .29381 m .06349 .29352 L .10317 .29323 L .14286 .29294 L .18254 .29265 L .22222 .29237 L .2619 .29208 L .30159 .29179 L .34127 .2915 L .38095 .29121 L .42063 .29092 L .46032 .29063 L .5 .29034 L .53968 .29005 L .57937 .28976 L .61905 .28947 L .65873 .28918 L .69841 .28889 L .7381 .2886 L .77778 .28831 L .81746 .28802 L .85714 .28773 L .89683 .28744 L .93651 .28715 L .97619 .28686 L s P P p p .699 .129 1 r .001 w .02381 .40498 m .06349 .39946 L .10317 .39394 L .14286 .38842 L .17753 .3836 L .18254 .3829 L .22222 .37738 L .2619 .37186 L .30159 .36634 L .34127 .36082 L .38095 .3553 L .41528 .35053 L .42063 .34978 L .46032 .34427 L .5 .33875 L .53968 .33323 L .57937 .32771 L .61905 .32219 L .65304 .31746 L .65873 .31667 L .69841 .31115 L .7381 .30563 L .77778 .30011 L .81746 .29459 L .85714 .28907 L .89079 .28439 L .89683 .28355 L .93651 .27803 L .97619 .27251 L s P P p p .699 .129 1 r .001 w .02381 .52726 m .06349 .51632 L .0651 .51587 L .10317 .50537 L .14286 .49443 L .18254 .48348 L .185 .4828 L .22222 .47254 L .2619 .4616 L .30159 .45065 L .30491 .44974 L .34127 .43971 L .38095 .42876 L .42063 .41782 L .42481 .41667 L .46032 .40688 L .5 .39593 L .53968 .38499 L .54472 .3836 L .57937 .37404 L .61905 .3631 L .65873 .35216 L .66463 .35053 L .69841 .34121 L .7381 .33027 L .77778 .31932 L .78453 .31746 L .81746 .30838 L .85714 .29743 L .89683 .28649 L .90444 .28439 L .93651 .27555 L .97619 .2646 L s P P p p .699 .129 1 r .001 w .02381 .65861 m .04856 .64815 L .06349 .64184 L .10317 .62506 L .12678 .61508 L .14286 .60828 L .18254 .5915 L .20499 .58201 L .22222 .57473 L .2619 .55795 L .28321 .54894 L .30159 .54117 L .34127 .52439 L .36142 .51587 L .38095 .50762 L .42063 .49084 L .43964 .4828 L .46032 .47406 L .5 .45728 L .51785 .44974 L .53968 .44051 L .57937 .42373 L .59607 .41667 L .61905 .40695 L .65873 .39017 L .67428 .3836 L .69841 .3734 L .7381 .35662 L .7525 .35053 L .77778 .33984 L .81746 .32306 L .83071 .31746 L .85714 .30629 L .89683 .28951 L .90893 .28439 L .93651 .27273 L .97619 .25595 L s P P P .6 g .004 w newpath .31481 .41667 .26455 0 365.72958 arc s p .03 w .57804 .44308 Mdot .51715 .58709 Mdot .30709 .15223 Mdot P % End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 4: the vertices of the triangle are the gray dots :[font = text; inactive; preserveAspect] How does this remarkable shape comes about? It was seeing this pattern that kept me working on this problem. Incidentally, the cusps (the sharp points) do form an equilateral triangle. ;[s] 5:0,0;127,1;132,2;152,3;154,4;185,-1; 5:1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] It looks as if the Simpson lines always touch a certain curve. This kind of thing often happens when a family of x-y curves is given in terms of a parameter t by an equation like ;[s] 7:0,0;113,1;116,2;148,3;157,4;158,5;159,6;179,-1; 7:1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] g[x,y,t] = 0 ;[s] 3:0,0;1,1;37,2;38,-1; 3:1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] (the curve is called the envelope of the family). Fortunately there is a surpisingly simple rule for finding the parametric equations for the x and y components of the envelope. It is, ;[s] 7:0,0;25,1;33,2;142,3;143,4;148,5;149,6;186,-1; 7:1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] solve the pair of equations g[x,y,t] = 0 , d[g[x,y,t]]/dt = 0 for x and y. ;[s] 2:0,0;36,1;83,-1; 2:1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0; :[font = text; inactive; preserveAspect] (x and y will be given in terms of t). :[font = text; inactive; dontPreserveAspect] Apply this rule to our family of Simpson lines and simplify the result. :[font = input; Cclosed; dontPreserveAspect; startGroup] env[a_,b_,c_,t_] = Factor[ ({x,y}/.Solve[{sl[t]==0, sl'[t]==0},{x,y},{x,y}])[[1]], (*1*) Trig -> True ]//Expand :[font = output; output; inactive; preserveAspect; endGroup] {Cos[a]/2 + Cos[b]/2 + Cos[c]/2 + Cos[a + b + c - 2*t]/2 + Cos[t], Sin[a]/2 + Sin[b]/2 + Sin[c]/2 + Sin[a + b + c - 2*t]/2 + Sin[t]} ;[o] Cos[a] Cos[b] Cos[c] Cos[a + b + c - 2 t] {------ + ------ + ------ + -------------------- + Cos[t], 2 2 2 2 Sin[a] Sin[b] Sin[c] Sin[a + b + c - 2 t] ------ + ------ + ------ + -------------------- + Sin[t]} 2 2 2 2 :[font = text; inactive; preserveAspect] Well that really is nice! And if I manually rewrite it in the form :[font = input; output; preserveAspect] ( {Cos[a],Sin[a]} + {Cos[b],Sin[b]} + {Cos[c],Sin[c]} )/2 + { Cos[t],Sin[t]} + {Cos[a + b + c - 2*t], Sin[a + b + c - 2*t]}/2 ;[o] {Cos[a], Sin[a]} + {Cos[b], Sin[b]} + {Cos[c], Sin[c]} ------------------------------------------------------ + 2 {Cos[a + b + c - 2 t], Sin[a + b + c - 2 t]} {Cos[t], Sin[t]} + -------------------------------------------- 2 :[font = text; inactive; preserveAspect] then it is clear that the point env[a,b,c,t] is reached from :[font = input; preserveAspect] fixedcenter[a_,b_,c_] = (p[a] + p[b] + p[c])/2; (*2*) :[font = text; inactive; preserveAspect] by going unit distance in direction t to ;[s] 3:0,0;37,1;39,2;42,-1; 3:1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; preserveAspect] movingcenter[a_,b_,c_,t_] = fixedcenter[a,b,c] + p[t]; :[font = text; inactive; preserveAspect] and then going distance 1/2 in direction a+b+c-2 t. ;[s] 6:0,0;24,1;27,2;42,3;50,4;52,5;53,-1; 6:1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0; :[font = text; inactive; preserveAspect] In effect we have a rod of length 1 rotating positively about the fixedcenter, linked (at the movingcenter) to one of length 1/2 which rotates in the opposite direction at three times the rate (relative to the first rod) ±this is illustrated below. The rods are in line when t = (a+b+c)/3 (and also when t = (a+b+c)/3 + 2p/3 and t = (a+b+c)/3 + 4p/3 ). ;[s] 29:0,0;34,1;35,2;66,3;78,4;79,5;94,6;108,7;125,8;128,9;169,10;172,11;193,12;194,13;219,14;220,15;276,16;290,17;307,18;322,19;324,20;325,21;326,22;328,23;334,24;353,25;354,26;356,27;358,28;359,-1; 29:1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,8,6,Courier,0,10,0,0,0;1,8,6,Courier,0,10,0,0,0;1,0,0,Symbol,0,10,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,0,0,Symbol,0,10,0,0,0;1,8,6,Courier,0,10,0,0,0;1,8,6,Courier,0,10,0,0,0;1,8,6,Courier,0,10,0,0,0; :[font = postscript; PostScript; formatAsPostScript; evaluateAsNotebooksKernel; output; inactive; preserveAspect; leftWrapOffset = 30; pictureLeft = 48; pictureTop = 1; pictureWidth = 309; pictureHeight = 132] %! %%Creator: Mathematica %%AspectRatio: 0.427184 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0 1 0 1 [ [ 10 349 0 0 ] [ 319 481 0 0 ] ] MathScale % Start of Graphics %!PS-Adobe-2.0 EPSF-1.2 %%Title: UNTITLED %%Creator: Altsys Virtuoso 1.0 %%CreationDate: Tue Oct 12 16:17:07 GMT 1993 %%BoundingBox: 10 349 319 481 %%FHPathName: UNTITLED %%DocumentProcSets: Altsys_header 4 0 %%DocumentSuppliedProcSets: Altsys_header 4 0 %%ColorUsage: Color %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFonts: Symbol %%+Courier %%DocumentNeededFonts: Symbol %%+Courier %%EndComments %%BeginProcSet: Altsys_header 4 0 /AltsysDict 233 dict def AltsysDict begin /bdf{bind def}bind def /xdf{exch def}bdf /defed{where{pop true}{false}ifelse}bdf /ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf /d{setdash}bdf /h{closepath}bdf /H{}bdf /J{setlinecap}bdf /j{setlinejoin}bdf /M{setmiterlimit}bdf /n{newpath}bdf /N{newpath}bdf /q{gsave}bdf /Q{grestore}bdf /w{setlinewidth}bdf /sepdef{ dup where not { AltsysSepDict } if 3 1 roll exch put }bdf /st{settransfer}bdf /colorimage defed /_rci xdf /md defed{ md type /dicttype eq { /colorimage where { md eq { /_rci false def }if }if /settransfer where { md eq { /st systemdict /settransfer get def }if }if }if }if /setstrokeadjust defed { true setstrokeadjust /C{curveto}bdf /L{lineto}bdf /m{moveto}bdf } { /dr{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform}bdf /C{dr curveto}bdf /L{dr lineto}bdf /m{dr moveto}bdf /setstrokeadjust{pop}bdf }ifelse /rectstroke defed /xt xdf xt {/yt save def} if /privrectpath { 4 -2 roll m dtransform round exch round exch idtransform 2 copy 0 lt exch 0 lt xor {dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto} {exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto} ifelse closepath }bdf /rectclip{newpath privrectpath clip newpath}def /rectfill{gsave newpath privrectpath fill grestore}def /rectstroke{gsave newpath privrectpath stroke grestore}def xt {yt restore} if /packedarray{array astore readonly}ndf /` {false setoverprint /-save0- save def pop pop pop pop pop concat userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath false setstrokeadjust } bdf /currentpacking defed{true setpacking}if /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /xformfont { currentfont exch makefont setfont } bdf /fhnumcolors 1 statusdict begin /processcolors defed { pop processcolors } { /deviceinfo defed { deviceinfo /Colors known { pop deviceinfo /Colors get } if } if } ifelse end def /printerRes gsave matrix defaultmatrix setmatrix 72 72 dtransform abs exch abs max grestore def /graycalcs [ {Angle Frequency} {GrayAngle GrayFrequency} {0 Width Height matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} {0 GrayWidth GrayHeight matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} ] def /calcgraysteps { /currenthalftone defed {currenthalftone /dicttype eq}{false}ifelse { currenthalftone begin HalftoneType 4 le {graycalcs HalftoneType 1 sub get exec} { HalftoneType 5 eq { Default begin {graycalcs HalftoneType 1 sub get exec} end } {0 60} ifelse } ifelse end } { currentscreen pop exch } ifelse printerRes 300 max exch div exch 2 copy sin mul round dup mul 3 1 roll cos mul round dup mul add 1 add dup maxsteps gt {pop maxsteps} if } bdf /nextrelease defed { /languagelevel defed not { /framebuffer defed { 0 40 string framebuffer 9 1 roll 8 {pop} repeat dup 516 eq exch 520 eq or { /fhnumcolors 3 def /currentscreen {60 0 {pop pop 1}}bdf /calcgraysteps {maxsteps} bdf }if }if }if }if /goodsep { spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or }bdf /bottom -0 def /delta -0 def /frac -0 def /height -0 def /left -0 def /numsteps -0 def /numsteps1 -0 def /radius -0 def /right -0 def /top -0 def /width -0 def /xt -0 def /yt -0 def /df currentflat def /tempstr 1 string def /clipflatness currentflat def /inverted? 0 currenttransfer exec .5 ge def /tc1 [0 0 0 1] def /tc2 [0 0 0 1] def /storerect{/top xdf /right xdf /bottom xdf /left xdf /width right left sub def /height top bottom sub def}bdf /concatprocs{ systemdict /packedarray known {dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse { /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx } { /proc2 exch cvlit def/proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }ifelse }bdf /i{dup 0 eq {pop df dup} {dup} ifelse /clipflatness xdf setflat }bdf version cvr 38.0 le {/setrgbcolor{ currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll setrgbcolor}bdf}if /vms {/vmsv save def} bdf /vmr {vmsv restore} bdf /vmrs{vmsv restore /vmsv save def}bdf /eomode{ {/filler /eofill load def /clipper /eoclip load def} {/filler /fill load def /clipper /clip load def} ifelse }bdf /normtaper{}bdf /logtaper{9 mul 1 add log}bdf /lfxform { /yt xdf /xt xdf xt yt translate rotate storerect left xt sub bottom yt sub translate right left sub 0.00001 max top bottom sub 0.00001 max scale }bdf /CD{/NF exch def{exch dup/FID ne 1 index/UniqueID ne and{exch NF 3 1 roll put} {pop pop}ifelse}forall NF}bdf /MN{1 index length/Len exch def dup length Len add string dup Len 4 -1 roll putinterval dup 0 4 -1 roll putinterval}bdf /RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch {1 index MN cvn/NewN exch def cvn findfont dup maxlength dict CD dup/FontName NewN put dup /Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf /RF{dup FontDirectory exch known{pop 3 -1 roll pop}{RC}ifelse}bdf /FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known {exch pop findfont 3 -1 roll pop} {pop dup findfont dup maxlength dict CD dup dup /Encoding exch /Encoding get 256 array copy 7 -1 roll {3 -1 roll dup 4 -2 roll put}forall put definefont} ifelse}bdf /fps{ currentflat exch dup 0 le{pop 1}if { dup setflat 3 index stopped {1.3 mul dup 3 index gt{pop setflat pop pop stop}if} {exit} ifelse }loop pop setflat pop pop }bdf /fp{100 currentflat fps}bdf /clipper{clip}bdf /W{/clipper load 100 clipflatness fps}bdf end%. AltsysDict %%EndProcSet %%EndProlog %%BeginSetup AltsysDict begin %%IncludeFont: Symbol 0 dict dup begin end /f0 /Symbol FF def %%IncludeFont: Courier 0 dict dup begin end /f1 /Courier FF def end %. AltsysDict %%EndSetup AltsysDict begin /onlyk{false}ndf /ccmyk{dup 5 -1 roll sub 0 max exch}ndf /cmyk2gray{ 4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul add add add 1 min neg 1 add }bdf /setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf /setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf /findcmykcustomcolor{5 packedarray}ndf /setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf /setseparationgray{setgray}ndf /setoverprint{pop}ndf /currentoverprint false ndf /cmykbufs2gray{ 0 1 2 index length 1 sub { 4 index 1 index get0.3 mul 4 index 2 index get0.59 mul 4 index 3 index get0.11 mul 4 index 4 index get add add add cvi 255 min 255 exch sub 2 index 3 1 roll put }for 4 1 roll pop pop pop }bdf /colorimage{ pop pop [ 5 -1 roll/exec cvx 6 -1 roll/exec cvx 7 -1 roll/exec cvx 8 -1 roll/exec cvx /cmykbufs2gray cvx ]cvx image } %. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only) version cvr 47.1 le statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse and{userdict begin bdf end}{ndf}ifelse fhnumcolors 1 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf ic im iy ik cmyk2gray /xt xdf currenttransfer {dup 1.0 exch sub xt mul add}concatprocs st image } ifelse }ndf fhnumcolors 1 ne {yt restore} if fhnumcolors 3 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf 1.0 dup ic ik add min sub 1.0 dup im ik add min sub 1.0 dup iy ik add min sub /ic xdf /iy xdf /im xdf currentcolortransfer 4 1 roll {dup 1.0 exch sub ic mul add}concatprocs 4 1 roll {dup 1.0 exch sub iy mul add}concatprocs 4 1 roll {dup 1.0 exch sub im mul add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage } ifelse }ndf fhnumcolors 3 ne {yt restore} if fhnumcolors 4 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf currentcolortransfer {1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll {1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll {1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll {1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy} true 4 colorimage } ifelse }ndf fhnumcolors 4 ne {yt restore} if /separationimage{image}ndf /newcmykcustomcolor{6 packedarray}ndf /inkoverprint false ndf /setinkoverprint{pop}ndf /setspotcolor { spots exch get dup 4 get (_vc_Registration) eq {pop 1 exch sub setseparationgray} {0 5 getinterval exch setcustomcolor} ifelse }ndf /currentcolortransfer{currenttransfer dup dup dup}ndf /setcolortransfer{st pop pop pop}ndf /fas{}ndf /sas{}ndf /fhsetspreadsize{pop}ndf /filler{fill}bdf /F{gsave {filler}fp grestore}bdf /f{closepath F}bdf /S{gsave {stroke}fp grestore}bdf /s{closepath S}bdf /lfs{ gsave W n lfxform pop pop pop /xt xdf /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} [spots xt get aload pop pop] customcolorimage grestore }ndf /lfp{ gsave W n lfxform 9 {pop} repeat _rci { /lfbuf4 xdf /lfbuf3 xdf /lfbuf2 xdf /lfbuf1 xdf pop 1 256 8 [1 0 0 -256 0 256] {lfbuf1}{lfbuf2}{lfbuf3}{lfbuf4} true 4 colorimage } { 4 {pop} repeat /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} image } ifelse grestore }ndf /bcs [0 0] def /_rfs { /tint2 xdf /tint1 xdf bcs exch 1 exch put /radius xdf /yt xdf /xt xdf tint1 tint2 sub abs calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bcs 0 tint2 tint1 sub frac mul tint1 add put bcs vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /bc4 [0 0 0 0] def /_rfp { /k2 xdf /y2 xdf /m2 xdf /c2 xdf /k1 xdf /y1 xdf /m1 xdf /c1 xdf /radius xdf /yt xdf /xt xdf c1 c2 sub abs m1 m2 sub abs y1 y2 sub abs k1 k2 sub abs max max max calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bc4 0 c2 c1 sub frac mul c1 add put bc4 1 m2 m1 sub frac mul m1 add put bc4 2 y2 y1 sub frac mul y1 add put bc4 3 k2 k1 sub frac mul k1 add put bc4 vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /rfs{_rfs}ndf /rfp{_rfp}ndf /cvc [0 0 0 1] def /vc{ AltsysDict /cvc 2 index put aload length 4 eq {setcmykcolor} {setspotcolor} ifelse }bdf /origmtx matrix currentmatrix def /ImMatrix matrix currentmatrix def 0 setseparationgray /imgr {-4000 -4000 4000 4000 } def /bleed 0 def /clpr {-4000 -4000 4000 4000 } def /xs 1 def /ys 1 def /botx 0 def /overlap 0 def /wdist 18 def 0 2 mul fhsetspreadsize 0 0 ne {/df 0 def /clipflatness 0 def} if /maxsteps 256 def /currentpacking defed{false setpacking}if /spots[ 1 0 0 0 (Process Cyan) false newcmykcustomcolor 0 1 0 0 (Process Magenta) false newcmykcustomcolor 0 0 1 0 (Process Yellow) false newcmykcustomcolor 0 0 0 1 (Process Black) false newcmykcustomcolor ]def /textopf false def /curtextmtx{}def /otw .25 def /msf{dup/curtextmtx xdf makefont setfont}bdf /makesetfont/msf load def /curtextheight{.707104 .707104 curtextmtx dtransform dup mul exch dup mul add sqrt}bdf /ta{1 index {tempstr 0 2 index put tempstr 2 index gsave exec grestore tempstr stringwidth rmoveto 5 index eq{6 index 6 index rmoveto}if 3 index 3 index rmoveto }forall 7{pop}repeat}bdf /sts{/textopf currentoverprint def vc setoverprint /ts{awidthshow}def exec textopf setoverprint}bdf /stol{/xt currentlinewidth def setlinewidth vc newpath /ts{{false charpath stroke}ta}def exec xt setlinewidth}bdf /strk{/textopf currentoverprint def vc setoverprint /ts{{false charpath stroke}ta}def exec textopf setoverprint }bdf clpr storerect left bottom width height rectclip [] 0 d 3.863708 M 1 w 0 j 0 J false setoverprint 0 i false eomode [0 0 0 1]vc vms 91.9197 355.4657 m 202.2627 432.7928 L 1.5 w 3.899994 M [0.4 0.266667 0 0] vc S n 125.1661 438.1798 m 142 480 L S n 91.9197 354.4657 m 91.9197 354.4657 121.5 429.5 123 432 C 1 w [1 0.733318 0 0] vc S n true eomode 123 432 m 119.9987 431.859 L 125.5752 436.2858 L 124.2845 429.2838 L 123 432 L f n 125.7484 439.2317 m 159.5 426 L S n 159.5 426 m 158.84 428.9312 L 164.1679 424.2082 L 157.0481 424.2633 L 159.5 426 L f n 3.863708 M [0 0 0 1] vc S n 89.4197 354.3224 m 221.25 354.25 L 1.5 w 3.899994 M [0.499992 0.499992 0.499992 0] vc S n 221.25 354.25 m 219.0834 357.5 L 227.75 354.25 L 219.0834 351 L 221.25 354.25 L f n 133.25 455.5 m 140.2793 453.1627 144.1273 444.085 142.75 438.5 C [1 0.733318 0 0] vc S n 142.75 438.5 m 146.4276 439.816 L 141.1775 432.1931 L 140.1207 441.3885 L 142.75 438.5 L f n false eomode 123.75 439.5 m 123.75 440.7426 124.7574 441.75 126 441.75 C 127.2426 441.75 128.25 440.7426 128.25 439.5 C 128.25 438.2574 127.2426 437.25 126 437.25 C 124.7574 437.25 123.75 438.2574 123.75 439.5 C f S n 165.5 422.25 m 165.5 423.4926 166.5074 424.5 167.75 424.5 C 168.9926 424.5 170 423.4926 170 422.25 C 170 421.0074 168.9926 420 167.75 420 C 166.5074 420 165.5 421.0074 165.5 422.25 C f S n 89.5 354.75 m 89.5 355.9926 90.5074 357 91.75 357 C 92.9926 357 94 355.9926 94 354.75 C 94 353.5074 92.9926 352.5 91.75 352.5 C 90.5074 352.5 89.5 353.5074 89.5 354.75 C [0 1 1 0] vc f S n 121.3092 354.4928 m 121.6696 364.0811 121.1942 363.0573 119.5 366.5 C 115.6581 374.307 114.3913 374.672 109 377 C [0 0 0 0.559991] vc S n true eomode 109 377 m 109.7245 373.1618 L 103.0167 379.5397 L 112.2643 379.1451 L 109 377 L f n 217.5 460.5 m 143.5 460.5 L 143.5 448 L 217.5 448 L 217.5 460.5 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 143.5 452.069977 m 0 0 32 0 0 (\(a+b+c\) - 3t) ts } true [0 0 0 1]sts Q 146.5 354 m 146.5 367.5 144 371.5 137.5 379 C false setoverprint S n 137.5 379 m 136.4686 375.2326 L 133.2357 383.9056 L 141.3742 379.497 L 137.5 379 L f n 130 374.5 m 121.5 374.5 L 121.5 364 L 130 364 L 130 374.5 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 121.5 366.069977 m 0 0 32 0 0 (t) ts } true [0 0 0 1]sts Q 202 378.5 m 144 378.5 L 144 364.5 L 202 364.5 L 202 378.5 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 144 370.069977 m 0 0 32 0 0 (\(a+b+c\)\/3) ts } true [0 0 0 1]sts Q 111.5 410.75 m 103.5 410.75 L 103.5 398.25 L 111.5 398.25 L 111.5 410.75 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 103.5 402.319977 m 0 0 32 0 0 (1) ts } false [1 0.733318 0 0]sts Q 151 428.5 m 131 428.5 L 131 415.5 L 151 415.5 L 151 428.5 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 131 420.069977 m 0 0 32 0 0 (1\/2) ts } false [1 0.733318 0 0]sts Q 318.25 429.75 m 236.75 429.75 L 236.75 391.25 L 318.25 391.25 L 318.25 429.75 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 236.75 421.319977 m 0 0 32 0 0 (rods are in) ts } true [0 0 0 1]sts { f1 [10 0 0 10 0 0] makesetfont 236.75 411.319977 m 0 0 32 0 0 (line) ts } true [0 0 0 1]sts { f1 [10 0 0 10 0 0] makesetfont 0 -3.5 rmoveto 0 0 32 0 0 ( ) ts 0 3.5 rmoveto } true [0 0 0 1]sts { f1 [10 0 0 10 0 0] makesetfont 0 0 32 0 0 (when) ts } true [0 0 0 1]sts { f1 [10 0 0 10 0 0] makesetfont 236.75 401.319977 m 0 -3.5 rmoveto 0 0 32 0 0 (t = \(a+b+c\)\/3) ts 0 3.5 rmoveto } true [0 0 0 1]sts Q false eomode 200.7627 432.5428 m 200.7627 433.7854 201.7701 434.7928 203.0127 434.7928 C 204.2554 434.7928 205.2627 433.7854 205.2627 432.5428 C 205.2627 431.3001 204.2554 430.2928 203.0127 430.2928 C 201.7701 430.2928 200.7627 431.3001 200.7627 432.5428 C [0.4 0.266667 0 0] vc false setoverprint f S n 119 446 m 38 446 L 38 434 L 119 434 L 119 446 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 38 437.569977 m 0 0 32 0 0 (moving center) ts } true [0 0 0 1]sts Q vmrs 87 360 m 11 360 L 11 349 L 87 349 L 87 360 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 11 351.569977 m 0 0 32 0 0 (fixed center) ts } true [0 0 0 1]sts Q 163.25 407 m 163.25 408.2426 164.2574 409.25 165.5 409.25 C 166.7426 409.25 167.75 408.2426 167.75 407 C 167.75 405.7574 166.7426 404.75 165.5 404.75 C 164.2574 404.75 163.25 405.7574 163.25 407 C [0.4 0.266667 0 0] vc false setoverprint f 1.5 w 3.899994 M S n 122.5 377 m 119.5 381.25 116.25 384.5 112 385.75 C [1 0.733318 0 0] vc S n true eomode 112 385.75 m 113.1869 382.0287 L 105.7518 387.5416 L 114.9785 388.2769 L 112 385.75 L f n 125.5 394 m 116.5 394 L 116.5 380 L 125.5 380 L 125.5 394 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 116.5 385.569977 m 0 0 32 0 0 (s) ts } true [0 0 0 1]sts Q vmr end %%Trailer %End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 5 :[font = text; inactive; preserveAspect] The descripton is much simpler if we measure angles from the direction (a+b+c)/3. :[font = postscript; PostScript; formatAsPostScript; evaluateAsNotebooksKernel; output; inactive; preserveAspect; leftWrapOffset = 30; pictureLeft = 62; pictureWidth = 301; pictureHeight = 147] %! %%Creator: Mathematica %%AspectRatio: 0.488372 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0 1 0 1 [ [ 316 355 0 0 ] [ 617 502 0 0 ] ] MathScale % Start of Graphics %!PS-Adobe-2.0 EPSF-1.2 %%Title: UNTITLED %%Creator: Altsys Virtuoso 1.0 %%CreationDate: Tue Oct 12 16:22:33 GMT 1993 %%BoundingBox: 316 355 617 502 %%FHPathName: UNTITLED %%DocumentProcSets: Altsys_header 4 0 %%DocumentSuppliedProcSets: Altsys_header 4 0 %%ColorUsage: Color %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFonts: Symbol %%+Courier %%DocumentNeededFonts: Symbol %%+Courier %%EndComments %%BeginProcSet: Altsys_header 4 0 /AltsysDict 233 dict def AltsysDict begin /bdf{bind def}bind def /xdf{exch def}bdf /defed{where{pop true}{false}ifelse}bdf /ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf /d{setdash}bdf /h{closepath}bdf /H{}bdf /J{setlinecap}bdf /j{setlinejoin}bdf /M{setmiterlimit}bdf /n{newpath}bdf /N{newpath}bdf /q{gsave}bdf /Q{grestore}bdf /w{setlinewidth}bdf /sepdef{ dup where not { AltsysSepDict } if 3 1 roll exch put }bdf /st{settransfer}bdf /colorimage defed /_rci xdf /md defed{ md type /dicttype eq { /colorimage where { md eq { /_rci false def }if }if /settransfer where { md eq { /st systemdict /settransfer get def }if }if }if }if /setstrokeadjust defed { true setstrokeadjust /C{curveto}bdf /L{lineto}bdf /m{moveto}bdf } { /dr{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform}bdf /C{dr curveto}bdf /L{dr lineto}bdf /m{dr moveto}bdf /setstrokeadjust{pop}bdf }ifelse /rectstroke defed /xt xdf xt {/yt save def} if /privrectpath { 4 -2 roll m dtransform round exch round exch idtransform 2 copy 0 lt exch 0 lt xor {dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto} {exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto} ifelse closepath }bdf /rectclip{newpath privrectpath clip newpath}def /rectfill{gsave newpath privrectpath fill grestore}def /rectstroke{gsave newpath privrectpath stroke grestore}def xt {yt restore} if /packedarray{array astore readonly}ndf /` {false setoverprint /-save0- save def pop pop pop pop pop concat userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath false setstrokeadjust } bdf /currentpacking defed{true setpacking}if /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /xformfont { currentfont exch makefont setfont } bdf /fhnumcolors 1 statusdict begin /processcolors defed { pop processcolors } { /deviceinfo defed { deviceinfo /Colors known { pop deviceinfo /Colors get } if } if } ifelse end def /printerRes gsave matrix defaultmatrix setmatrix 72 72 dtransform abs exch abs max grestore def /graycalcs [ {Angle Frequency} {GrayAngle GrayFrequency} {0 Width Height matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} {0 GrayWidth GrayHeight matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} ] def /calcgraysteps { /currenthalftone defed {currenthalftone /dicttype eq}{false}ifelse { currenthalftone begin HalftoneType 4 le {graycalcs HalftoneType 1 sub get exec} { HalftoneType 5 eq { Default begin {graycalcs HalftoneType 1 sub get exec} end } {0 60} ifelse } ifelse end } { currentscreen pop exch } ifelse printerRes 300 max exch div exch 2 copy sin mul round dup mul 3 1 roll cos mul round dup mul add 1 add dup maxsteps gt {pop maxsteps} if } bdf /nextrelease defed { /languagelevel defed not { /framebuffer defed { 0 40 string framebuffer 9 1 roll 8 {pop} repeat dup 516 eq exch 520 eq or { /fhnumcolors 3 def /currentscreen {60 0 {pop pop 1}}bdf /calcgraysteps {maxsteps} bdf }if }if }if }if /goodsep { spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or }bdf /bottom -0 def /delta -0 def /frac -0 def /height -0 def /left -0 def /numsteps -0 def /numsteps1 -0 def /radius -0 def /right -0 def /top -0 def /width -0 def /xt -0 def /yt -0 def /df currentflat def /tempstr 1 string def /clipflatness currentflat def /inverted? 0 currenttransfer exec .5 ge def /tc1 [0 0 0 1] def /tc2 [0 0 0 1] def /storerect{/top xdf /right xdf /bottom xdf /left xdf /width right left sub def /height top bottom sub def}bdf /concatprocs{ systemdict /packedarray known {dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse { /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx } { /proc2 exch cvlit def/proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }ifelse }bdf /i{dup 0 eq {pop df dup} {dup} ifelse /clipflatness xdf setflat }bdf version cvr 38.0 le {/setrgbcolor{ currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll setrgbcolor}bdf}if /vms {/vmsv save def} bdf /vmr {vmsv restore} bdf /vmrs{vmsv restore /vmsv save def}bdf /eomode{ {/filler /eofill load def /clipper /eoclip load def} {/filler /fill load def /clipper /clip load def} ifelse }bdf /normtaper{}bdf /logtaper{9 mul 1 add log}bdf /lfxform { /yt xdf /xt xdf xt yt translate rotate storerect left xt sub bottom yt sub translate right left sub 0.00001 max top bottom sub 0.00001 max scale }bdf /CD{/NF exch def{exch dup/FID ne 1 index/UniqueID ne and{exch NF 3 1 roll put} {pop pop}ifelse}forall NF}bdf /MN{1 index length/Len exch def dup length Len add string dup Len 4 -1 roll putinterval dup 0 4 -1 roll putinterval}bdf /RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch {1 index MN cvn/NewN exch def cvn findfont dup maxlength dict CD dup/FontName NewN put dup /Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf /RF{dup FontDirectory exch known{pop 3 -1 roll pop}{RC}ifelse}bdf /FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known {exch pop findfont 3 -1 roll pop} {pop dup findfont dup maxlength dict CD dup dup /Encoding exch /Encoding get 256 array copy 7 -1 roll {3 -1 roll dup 4 -2 roll put}forall put definefont} ifelse}bdf /fps{ currentflat exch dup 0 le{pop 1}if { dup setflat 3 index stopped {1.3 mul dup 3 index gt{pop setflat pop pop stop}if} {exit} ifelse }loop pop setflat pop pop }bdf /fp{100 currentflat fps}bdf /clipper{clip}bdf /W{/clipper load 100 clipflatness fps}bdf end%. AltsysDict %%EndProcSet %%EndProlog %%BeginSetup AltsysDict begin %%IncludeFont: Symbol 0 dict dup begin end /f0 /Symbol FF def %%IncludeFont: Courier 0 dict dup begin end /f1 /Courier FF def end %. AltsysDict %%EndSetup AltsysDict begin /onlyk{false}ndf /ccmyk{dup 5 -1 roll sub 0 max exch}ndf /cmyk2gray{ 4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul add add add 1 min neg 1 add }bdf /setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf /setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf /findcmykcustomcolor{5 packedarray}ndf /setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf /setseparationgray{setgray}ndf /setoverprint{pop}ndf /currentoverprint false ndf /cmykbufs2gray{ 0 1 2 index length 1 sub { 4 index 1 index get0.3 mul 4 index 2 index get0.59 mul 4 index 3 index get0.11 mul 4 index 4 index get add add add cvi 255 min 255 exch sub 2 index 3 1 roll put }for 4 1 roll pop pop pop }bdf /colorimage{ pop pop [ 5 -1 roll/exec cvx 6 -1 roll/exec cvx 7 -1 roll/exec cvx 8 -1 roll/exec cvx /cmykbufs2gray cvx ]cvx image } %. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only) version cvr 47.1 le statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse and{userdict begin bdf end}{ndf}ifelse fhnumcolors 1 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf ic im iy ik cmyk2gray /xt xdf currenttransfer {dup 1.0 exch sub xt mul add}concatprocs st image } ifelse }ndf fhnumcolors 1 ne {yt restore} if fhnumcolors 3 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf 1.0 dup ic ik add min sub 1.0 dup im ik add min sub 1.0 dup iy ik add min sub /ic xdf /iy xdf /im xdf currentcolortransfer 4 1 roll {dup 1.0 exch sub ic mul add}concatprocs 4 1 roll {dup 1.0 exch sub iy mul add}concatprocs 4 1 roll {dup 1.0 exch sub im mul add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage } ifelse }ndf fhnumcolors 3 ne {yt restore} if fhnumcolors 4 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf currentcolortransfer {1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll {1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll {1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll {1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy} true 4 colorimage } ifelse }ndf fhnumcolors 4 ne {yt restore} if /separationimage{image}ndf /newcmykcustomcolor{6 packedarray}ndf /inkoverprint false ndf /setinkoverprint{pop}ndf /setspotcolor { spots exch get dup 4 get (_vc_Registration) eq {pop 1 exch sub setseparationgray} {0 5 getinterval exch setcustomcolor} ifelse }ndf /currentcolortransfer{currenttransfer dup dup dup}ndf /setcolortransfer{st pop pop pop}ndf /fas{}ndf /sas{}ndf /fhsetspreadsize{pop}ndf /filler{fill}bdf /F{gsave {filler}fp grestore}bdf /f{closepath F}bdf /S{gsave {stroke}fp grestore}bdf /s{closepath S}bdf /lfs{ gsave W n lfxform pop pop pop /xt xdf /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} [spots xt get aload pop pop] customcolorimage grestore }ndf /lfp{ gsave W n lfxform 9 {pop} repeat _rci { /lfbuf4 xdf /lfbuf3 xdf /lfbuf2 xdf /lfbuf1 xdf pop 1 256 8 [1 0 0 -256 0 256] {lfbuf1}{lfbuf2}{lfbuf3}{lfbuf4} true 4 colorimage } { 4 {pop} repeat /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} image } ifelse grestore }ndf /bcs [0 0] def /_rfs { /tint2 xdf /tint1 xdf bcs exch 1 exch put /radius xdf /yt xdf /xt xdf tint1 tint2 sub abs calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bcs 0 tint2 tint1 sub frac mul tint1 add put bcs vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /bc4 [0 0 0 0] def /_rfp { /k2 xdf /y2 xdf /m2 xdf /c2 xdf /k1 xdf /y1 xdf /m1 xdf /c1 xdf /radius xdf /yt xdf /xt xdf c1 c2 sub abs m1 m2 sub abs y1 y2 sub abs k1 k2 sub abs max max max calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bc4 0 c2 c1 sub frac mul c1 add put bc4 1 m2 m1 sub frac mul m1 add put bc4 2 y2 y1 sub frac mul y1 add put bc4 3 k2 k1 sub frac mul k1 add put bc4 vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /rfs{_rfs}ndf /rfp{_rfp}ndf /cvc [0 0 0 1] def /vc{ AltsysDict /cvc 2 index put aload length 4 eq {setcmykcolor} {setspotcolor} ifelse }bdf /origmtx matrix currentmatrix def /ImMatrix matrix currentmatrix def 0 setseparationgray /imgr {-4000 -4000 4000 4000 } def /bleed 0 def /clpr {-4000 -4000 4000 4000 } def /xs 1 def /ys 1 def /botx 0 def /overlap 0 def /wdist 18 def 0 2 mul fhsetspreadsize 0 0 ne {/df 0 def /clipflatness 0 def} if /maxsteps 256 def /currentpacking defed{false setpacking}if /spots[ 1 0 0 0 (Process Cyan) false newcmykcustomcolor 0 1 0 0 (Process Magenta) false newcmykcustomcolor 0 0 1 0 (Process Yellow) false newcmykcustomcolor 0 0 0 1 (Process Black) false newcmykcustomcolor ]def /textopf false def /curtextmtx{}def /otw .25 def /msf{dup/curtextmtx xdf makefont setfont}bdf /makesetfont/msf load def /curtextheight{.707104 .707104 curtextmtx dtransform dup mul exch dup mul add sqrt}bdf /ta{1 index {tempstr 0 2 index put tempstr 2 index gsave exec grestore tempstr stringwidth rmoveto 5 index eq{6 index 6 index rmoveto}if 3 index 3 index rmoveto }forall 7{pop}repeat}bdf /sts{/textopf currentoverprint def vc setoverprint /ts{awidthshow}def exec textopf setoverprint}bdf /stol{/xt currentlinewidth def setlinewidth vc newpath /ts{{false charpath stroke}ta}def exec xt setlinewidth}bdf /strk{/textopf currentoverprint def vc setoverprint /ts{{false charpath stroke}ta}def exec textopf setoverprint }bdf clpr storerect left bottom width height rectclip [] 0 d 3.863708 M 1 w 0 j 0 J false setoverprint 0 i false eomode [0 0 0 1]vc vms 616.5 424.5 m 535 424.5 L 535 386 L 616.5 386 L 616.5 424.5 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 535 416.069977 m 0 0 32 0 0 (rods are in) ts } true [0 0 0 1]sts { f1 [10 0 0 10 0 0] makesetfont 535 406.069977 m 0 0 32 0 0 (line) ts } true [0 0 0 1]sts { f1 [10 0 0 10 0 0] makesetfont 0 -3.5 rmoveto 0 0 32 0 0 ( ) ts 0 3.5 rmoveto } true [0 0 0 1]sts { f1 [10 0 0 10 0 0] makesetfont 0 0 32 0 0 (when) ts } true [0 0 0 1]sts { f1 [10 0 0 10 0 0] makesetfont 535 396.069977 m 0 -3.5 rmoveto 0 0 32 0 0 (s = 0.) ts 0 3.5 rmoveto } true [0 0 0 1]sts Q 520 502 m 412 502 L 412 488 L 520 488 L 520 502 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 412 493.569977 m 0 0 32 0 0 (s = t - \(a+b+c\)\/3) ts } true [0 0 0 1]sts Q 398.9197 361.4657 m 509.2627 438.7928 L 1.5 w 3.899994 M [0.4 0.266667 0 0] vc false setoverprint S n 432.1661 444.1798 m 449 486 L S n 398.9197 361.4657 m 398.9197 361.4657 428.5 436.5 430 439 C 1 w [1 0.733318 0 0] vc S n true eomode 430 439 m 426.9987 438.859 L 432.5752 443.2858 L 431.2845 436.2838 L 430 439 L f n 432.7484 445.2317 m 466.5 432 L S n 466.5 432 m 465.84 434.9312 L 471.1679 430.2082 L 464.0481 430.2633 L 466.5 432 L f n 440.25 461.5 m 447.2793 459.1627 451.1273 450.085 449.75 444.5 C 1.5 w S n 449.75 444.5 m 453.4276 445.816 L 448.1775 438.1931 L 447.1207 447.3885 L 449.75 444.5 L f n false eomode 430.75 445.5 m 430.75 446.7426 431.7574 447.75 433 447.75 C 434.2426 447.75 435.25 446.7426 435.25 445.5 C 435.25 444.2574 434.2426 443.25 433 443.25 C 431.7574 443.25 430.75 444.2574 430.75 445.5 C f S n 472.5 428.25 m 472.5 429.4926 473.5074 430.5 474.75 430.5 C 475.9926 430.5 477 429.4926 477 428.25 C 477 427.0074 475.9926 426 474.75 426 C 473.5074 426 472.5 427.0074 472.5 428.25 C f S n 396.5 360.75 m 396.5 361.9926 397.5074 363 398.75 363 C 399.9926 363 401 361.9926 401 360.75 C 401 359.5074 399.9926 358.5 398.75 358.5 C 397.5074 358.5 396.5 359.5074 396.5 360.75 C [0 1 1 0] vc f S n 429 382.5 m 426 386.75 422.75 390 418.5 391.25 C [1 0.733318 0 0] vc S n true eomode 418.5 391.25 m 419.6869 387.5287 L 412.2518 393.0416 L 421.4785 393.7769 L 418.5 391.25 L f n 432 399.5 m 423 399.5 L 423 385.5 L 432 385.5 L 432 399.5 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 423 391.069977 m 0 0 32 0 0 (s) ts } true [0 0 0 1]sts Q 470.5 462 m 448 462 L 448 449.5 L 470.5 449.5 L 470.5 462 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 448 453.569977 m 0 0 32 0 0 (-3s) ts } true [0 0 0 1]sts Q 415 419.25 m 407 419.25 L 407 406.75 L 415 406.75 L 415 419.25 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 407 410.819977 m 0 0 32 0 0 (1) ts } false [1 0.733318 0 0]sts Q 459 435.5 m 439 435.5 L 439 422.5 L 459 422.5 L 459 435.5 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 439 427.069977 m 0 0 32 0 0 (1\/2) ts } false [1 0.733318 0 0]sts Q false eomode 507.7627 438.5428 m 507.7627 439.7854 508.7701 440.7928 510.0127 440.7928 C 511.2554 440.7928 512.2627 439.7854 512.2627 438.5428 C 512.2627 437.3001 511.2554 436.2928 510.0127 436.2928 C 508.7701 436.2928 507.7627 437.3001 507.7627 438.5428 C [0.4 0.266667 0 0] vc false setoverprint f S n 471.25 413.5 m 471.25 414.7426 472.2574 415.75 473.5 415.75 C 474.7426 415.75 475.75 414.7426 475.75 413.5 C 475.75 412.2574 474.7426 411.25 473.5 411.25 C 472.2574 411.25 471.25 412.2574 471.25 413.5 C f S n 425 451 m 344 451 L 344 439 L 425 439 L 425 451 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 344 442.569977 m 0 0 32 0 0 (moving center) ts } true [0 0 0 1]sts Q 393 366 m 317 366 L 317 355 L 393 355 L 393 366 L n q %%IncludeFont: Courier { f1 [10 0 0 10 0 0] makesetfont 317 357.569977 m 0 0 32 0 0 (fixed center) ts } true [0 0 0 1]sts Q vmrs vmr end %%Trailer %End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 6 :[font = text; inactive; preserveAspect] This can be illustrated by animating the graphics produced by MovingLinkage. Below is a sequence of the frames generated using Graphics Array. The triangle and its circumcircle are shown in gray (the black dot on this circle is the point p[t] used to construct the Simpson line); the fixed center is red; the moving center is blue and the point at the end of the linkage, that is carried round the envelope, is shown in blue. ;[s] 5:0,0;63,1;76,2;128,3;142,4;426,-1; 5:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; cellOutline; pictureLeft = 1; pictureWidth = 435; pictureHeight = 277] %! %%Creator: Mathematica %%AspectRatio: .63742 MathPictureStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.02381 0.31746 0.015177 0.31746 [ [ 0 0 0 0 ] [ 1 .63742 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p P 0 0 m 1 0 L 1 .63742 L 0 .63742 L closepath clip newpath p p % Start of sub-graphic p 0.02381 0.015177 0.321429 0.304256 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .14922 .58563 L s P .02 w .30353 .32426 Mdot .14922 .58563 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p .004 w .51435 .48565 m .36003 .74703 L .22934 .66987 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .36003 .74703 Mdot .22934 .66987 Mdot P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.35119 0.015177 0.64881 0.304256 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .0392 .47346 L s P .02 w .30353 .32426 Mdot .0392 .47346 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p .004 w .51435 .48565 m .25001 .63485 L .11785 .70946 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .25001 .63485 Mdot .11785 .70946 Mdot P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.678571 0.015177 0.97619 0.304256 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m 1e-05 .3213 L s P .02 w .30353 .32426 Mdot 1e-05 .3213 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p .004 w .51435 .48565 m .21083 .4827 L .20935 .63446 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .21083 .4827 Mdot .20935 .63446 Mdot P P MathSubEnd P % End of sub-graphic P p % Start of sub-graphic p 0.02381 0.333164 0.321429 0.622244 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .56491 .47857 L s P .02 w .30353 .32426 Mdot .56491 .47857 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p .004 w .51435 .48565 m .77572 .63997 L .90641 .71713 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .77572 .63997 Mdot .90641 .71713 Mdot P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.35119 0.333164 0.64881 0.622244 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .45273 .58859 L s P .02 w .30353 .32426 Mdot .45273 .58859 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p .004 w .51435 .48565 m .66355 .74999 L .79571 .67539 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .66355 .74999 Mdot .79571 .67539 Mdot P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.678571 0.333164 0.97619 0.622244 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .30058 .62777 L s P .02 w .30353 .32426 Mdot .30058 .62777 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p .004 w .51435 .48565 m .51139 .78917 L .51287 .63741 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .51139 .78917 Mdot .51287 .63741 Mdot P P MathSubEnd P % End of sub-graphic P P % End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 7 :[font = smalltext; inactive; preserveAspect] The steps used to produce this were MovingLinkage[.9, 1.5, -0.8, 4, DisplayFunction -> Identity] Take[%,6] Partition[%,3] GraphicsArray[%] Show[%, DisplayFunction -> $DisplayFunction] Then the the final graphics adjusted for size and the cell given a surrounding box. ;[s] 3:0,0;36,1;184,2;267,-1; 3:1,9,7,Times,0,10,0,0,0;1,6,5,Courier,1,8,0,0,0;1,9,7,Times,0,10,0,0,0; :[font = text; inactive; preserveAspect] But the best explanation of this motion even simpler: it is produced by rolling a circle of radius 1/2 round the inside of a circle of radius 3/2 . The lengths of the rods obviously fit; and as for the angles: look at in Figures 8 below. Start the small circle in contact with the large one at P0 and roll it round the larger one to the position shown (the point on the small circle that was at P0 has been taken to P) . The arcs QP and QP0 are of the same length (there is no slipping). But the radius of the small circle is 1/3 the radius of the large one; so the angle made at the center of the small circle by the arc QP is three times the angle made by the arc QP0 at the center of the large circle (in the opposite direction) ± just what we need. ;[s] 9:0,0;299,1;300,2;400,3;401,4;444,5;445,6;673,7;675,8;757,-1; 9:1,11,8,Times,0,12,0,0,0;1,11,8,Times,64,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,64,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,64,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,11,8,Times,64,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 66; pictureTop = 3; pictureWidth = 289; pictureHeight = 284] %! %%Creator: Mathematica %%AspectRatio: 0.982699 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0 1 0 1 [ [ 138 -303 0 0 ] [ 427 -19 0 0 ] ] MathScale % Start of Graphics %!PS-Adobe-2.0 EPSF-1.2 %%Title: UNTITLED %%Creator: Altsys Virtuoso 1.0 %%CreationDate: Wed Oct 13 10:40:27 GMT 1993 %%BoundingBox: 138 -303 427 -19 %%FHPathName: UNTITLED %%DocumentProcSets: Altsys_header 4 0 %%DocumentSuppliedProcSets: Altsys_header 4 0 %%ColorUsage: Color %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFonts: Symbol %%+Courier %%DocumentNeededFonts: Symbol %%+Courier %%EndComments %%BeginProcSet: Altsys_header 4 0 /AltsysDict 233 dict def AltsysDict begin /bdf{bind def}bind def /xdf{exch def}bdf /defed{where{pop true}{false}ifelse}bdf /ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf /d{setdash}bdf /h{closepath}bdf /H{}bdf /J{setlinecap}bdf /j{setlinejoin}bdf /M{setmiterlimit}bdf /n{newpath}bdf /N{newpath}bdf /q{gsave}bdf /Q{grestore}bdf /w{setlinewidth}bdf /sepdef{ dup where not { AltsysSepDict } if 3 1 roll exch put }bdf /st{settransfer}bdf /colorimage defed /_rci xdf /md defed{ md type /dicttype eq { /colorimage where { md eq { /_rci false def }if }if /settransfer where { md eq { /st systemdict /settransfer get def }if }if }if }if /setstrokeadjust defed { true setstrokeadjust /C{curveto}bdf /L{lineto}bdf /m{moveto}bdf } { /dr{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform}bdf /C{dr curveto}bdf /L{dr lineto}bdf /m{dr moveto}bdf /setstrokeadjust{pop}bdf }ifelse /rectstroke defed /xt xdf xt {/yt save def} if /privrectpath { 4 -2 roll m dtransform round exch round exch idtransform 2 copy 0 lt exch 0 lt xor {dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto} {exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto} ifelse closepath }bdf /rectclip{newpath privrectpath clip newpath}def /rectfill{gsave newpath privrectpath fill grestore}def /rectstroke{gsave newpath privrectpath stroke grestore}def xt {yt restore} if /packedarray{array astore readonly}ndf /` {false setoverprint /-save0- save def pop pop pop pop pop concat userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath false setstrokeadjust } bdf /currentpacking defed{true setpacking}if /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /xformfont { currentfont exch makefont setfont } bdf /fhnumcolors 1 statusdict begin /processcolors defed { pop processcolors } { /deviceinfo defed { deviceinfo /Colors known { pop deviceinfo /Colors get } if } if } ifelse end def /printerRes gsave matrix defaultmatrix setmatrix 72 72 dtransform abs exch abs max grestore def /graycalcs [ {Angle Frequency} {GrayAngle GrayFrequency} {0 Width Height matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} {0 GrayWidth GrayHeight matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} ] def /calcgraysteps { /currenthalftone defed {currenthalftone /dicttype eq}{false}ifelse { currenthalftone begin HalftoneType 4 le {graycalcs HalftoneType 1 sub get exec} { HalftoneType 5 eq { Default begin {graycalcs HalftoneType 1 sub get exec} end } {0 60} ifelse } ifelse end } { currentscreen pop exch } ifelse printerRes 300 max exch div exch 2 copy sin mul round dup mul 3 1 roll cos mul round dup mul add 1 add dup maxsteps gt {pop maxsteps} if } bdf /nextrelease defed { /languagelevel defed not { /framebuffer defed { 0 40 string framebuffer 9 1 roll 8 {pop} repeat dup 516 eq exch 520 eq or { /fhnumcolors 3 def /currentscreen {60 0 {pop pop 1}}bdf /calcgraysteps {maxsteps} bdf }if }if }if }if /goodsep { spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or }bdf /bottom -0 def /delta -0 def /frac -0 def /height -0 def /left -0 def /numsteps -0 def /numsteps1 -0 def /radius -0 def /right -0 def /top -0 def /width -0 def /xt -0 def /yt -0 def /df currentflat def /tempstr 1 string def /clipflatness currentflat def /inverted? 0 currenttransfer exec .5 ge def /tc1 [0 0 0 1] def /tc2 [0 0 0 1] def /storerect{/top xdf /right xdf /bottom xdf /left xdf /width right left sub def /height top bottom sub def}bdf /concatprocs{ systemdict /packedarray known {dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse { /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx } { /proc2 exch cvlit def/proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }ifelse }bdf /i{dup 0 eq {pop df dup} {dup} ifelse /clipflatness xdf setflat }bdf version cvr 38.0 le {/setrgbcolor{ currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll setrgbcolor}bdf}if /vms {/vmsv save def} bdf /vmr {vmsv restore} bdf /vmrs{vmsv restore /vmsv save def}bdf /eomode{ {/filler /eofill load def /clipper /eoclip load def} {/filler /fill load def /clipper /clip load def} ifelse }bdf /normtaper{}bdf /logtaper{9 mul 1 add log}bdf /lfxform { /yt xdf /xt xdf xt yt translate rotate storerect left xt sub bottom yt sub translate right left sub 0.00001 max top bottom sub 0.00001 max scale }bdf /CD{/NF exch def{exch dup/FID ne 1 index/UniqueID ne and{exch NF 3 1 roll put} {pop pop}ifelse}forall NF}bdf /MN{1 index length/Len exch def dup length Len add string dup Len 4 -1 roll putinterval dup 0 4 -1 roll putinterval}bdf /RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch {1 index MN cvn/NewN exch def cvn findfont dup maxlength dict CD dup/FontName NewN put dup /Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf /RF{dup FontDirectory exch known{pop 3 -1 roll pop}{RC}ifelse}bdf /FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known {exch pop findfont 3 -1 roll pop} {pop dup findfont dup maxlength dict CD dup dup /Encoding exch /Encoding get 256 array copy 7 -1 roll {3 -1 roll dup 4 -2 roll put}forall put definefont} ifelse}bdf /fps{ currentflat exch dup 0 le{pop 1}if { dup setflat 3 index stopped {1.3 mul dup 3 index gt{pop setflat pop pop stop}if} {exit} ifelse }loop pop setflat pop pop }bdf /fp{100 currentflat fps}bdf /clipper{clip}bdf /W{/clipper load 100 clipflatness fps}bdf end%. AltsysDict %%EndProcSet %%EndProlog %%BeginSetup AltsysDict begin %%IncludeFont: Symbol 0 dict dup begin end /f0 /Symbol FF def %%IncludeFont: Courier 0 dict dup begin end /f1 /Courier FF def end %. AltsysDict %%EndSetup AltsysDict begin /onlyk{false}ndf /ccmyk{dup 5 -1 roll sub 0 max exch}ndf /cmyk2gray{ 4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul add add add 1 min neg 1 add }bdf /setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf /setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf /findcmykcustomcolor{5 packedarray}ndf /setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf /setseparationgray{setgray}ndf /setoverprint{pop}ndf /currentoverprint false ndf /cmykbufs2gray{ 0 1 2 index length 1 sub { 4 index 1 index get0.3 mul 4 index 2 index get0.59 mul 4 index 3 index get0.11 mul 4 index 4 index get add add add cvi 255 min 255 exch sub 2 index 3 1 roll put }for 4 1 roll pop pop pop }bdf /colorimage{ pop pop [ 5 -1 roll/exec cvx 6 -1 roll/exec cvx 7 -1 roll/exec cvx 8 -1 roll/exec cvx /cmykbufs2gray cvx ]cvx image } %. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only) version cvr 47.1 le statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse and{userdict begin bdf end}{ndf}ifelse fhnumcolors 1 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf ic im iy ik cmyk2gray /xt xdf currenttransfer {dup 1.0 exch sub xt mul add}concatprocs st image } ifelse }ndf fhnumcolors 1 ne {yt restore} if fhnumcolors 3 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf 1.0 dup ic ik add min sub 1.0 dup im ik add min sub 1.0 dup iy ik add min sub /ic xdf /iy xdf /im xdf currentcolortransfer 4 1 roll {dup 1.0 exch sub ic mul add}concatprocs 4 1 roll {dup 1.0 exch sub iy mul add}concatprocs 4 1 roll {dup 1.0 exch sub im mul add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage } ifelse }ndf fhnumcolors 3 ne {yt restore} if fhnumcolors 4 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf currentcolortransfer {1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll {1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll {1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll {1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy} true 4 colorimage } ifelse }ndf fhnumcolors 4 ne {yt restore} if /separationimage{image}ndf /newcmykcustomcolor{6 packedarray}ndf /inkoverprint false ndf /setinkoverprint{pop}ndf /setspotcolor { spots exch get dup 4 get (_vc_Registration) eq {pop 1 exch sub setseparationgray} {0 5 getinterval exch setcustomcolor} ifelse }ndf /currentcolortransfer{currenttransfer dup dup dup}ndf /setcolortransfer{st pop pop pop}ndf /fas{}ndf /sas{}ndf /fhsetspreadsize{pop}ndf /filler{fill}bdf /F{gsave {filler}fp grestore}bdf /f{closepath F}bdf /S{gsave {stroke}fp grestore}bdf /s{closepath S}bdf /lfs{ gsave W n lfxform pop pop pop /xt xdf /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} [spots xt get aload pop pop] customcolorimage grestore }ndf /lfp{ gsave W n lfxform 9 {pop} repeat _rci { /lfbuf4 xdf /lfbuf3 xdf /lfbuf2 xdf /lfbuf1 xdf pop 1 256 8 [1 0 0 -256 0 256] {lfbuf1}{lfbuf2}{lfbuf3}{lfbuf4} true 4 colorimage } { 4 {pop} repeat /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} image } ifelse grestore }ndf /bcs [0 0] def /_rfs { /tint2 xdf /tint1 xdf bcs exch 1 exch put /radius xdf /yt xdf /xt xdf tint1 tint2 sub abs calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bcs 0 tint2 tint1 sub frac mul tint1 add put bcs vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /bc4 [0 0 0 0] def /_rfp { /k2 xdf /y2 xdf /m2 xdf /c2 xdf /k1 xdf /y1 xdf /m1 xdf /c1 xdf /radius xdf /yt xdf /xt xdf c1 c2 sub abs m1 m2 sub abs y1 y2 sub abs k1 k2 sub abs max max max calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bc4 0 c2 c1 sub frac mul c1 add put bc4 1 m2 m1 sub frac mul m1 add put bc4 2 y2 y1 sub frac mul y1 add put bc4 3 k2 k1 sub frac mul k1 add put bc4 vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /rfs{_rfs}ndf /rfp{_rfp}ndf /cvc [0 0 0 1] def /vc{ AltsysDict /cvc 2 index put aload length 4 eq {setcmykcolor} {setspotcolor} ifelse }bdf /origmtx matrix currentmatrix def /ImMatrix matrix currentmatrix def 0 setseparationgray /imgr {-4000 -4000 4000 4000 } def /bleed 0 def /clpr {-4000 -4000 4000 4000 } def /xs 1 def /ys 1 def /botx 0 def /overlap 0 def /wdist 18 def 0 2 mul fhsetspreadsize 0 0 ne {/df 0 def /clipflatness 0 def} if /maxsteps 256 def /currentpacking defed{false setpacking}if /spots[ 1 0 0 0 (Process Cyan) false newcmykcustomcolor 0 1 0 0 (Process Magenta) false newcmykcustomcolor 0 0 1 0 (Process Yellow) false newcmykcustomcolor 0 0 0 1 (Process Black) false newcmykcustomcolor ]def /textopf false def /curtextmtx{}def /otw .25 def /msf{dup/curtextmtx xdf makefont setfont}bdf /makesetfont/msf load def /curtextheight{.707104 .707104 curtextmtx dtransform dup mul exch dup mul add sqrt}bdf /ta{1 index {tempstr 0 2 index put tempstr 2 index gsave exec grestore tempstr stringwidth rmoveto 5 index eq{6 index 6 index rmoveto}if 3 index 3 index rmoveto }forall 7{pop}repeat}bdf /sts{/textopf currentoverprint def vc setoverprint /ts{awidthshow}def exec textopf setoverprint}bdf /stol{/xt currentlinewidth def setlinewidth vc newpath /ts{{false charpath stroke}ta}def exec xt setlinewidth}bdf /strk{/textopf currentoverprint def vc setoverprint /ts{{false charpath stroke}ta}def exec textopf setoverprint }bdf clpr storerect left bottom width height rectclip [] 0 d 3.863708 M 1 w 0 j 0 J false setoverprint 0 i false eomode [0 0 0 1]vc vms 346 -19 m 336 -19 L 336 -31 L 346 -31 L 346 -19 L n q %%IncludeFont: Courier { f1 [11 0 0 11 0 0] makesetfont 336 -28.273026 m 0 0 32 0 0 (Q) ts } true [0 0 0 1]sts Q 313.774 -112.6527 m 311.4897 -87.2912 330.7841 -64.9355 356.8698 -62.7191 C 382.9555 -60.5028 405.9532 -79.2652 408.2375 -104.6267 C 410.5218 -129.9883 391.2274 -152.3439 365.1417 -154.5603 C 339.056 -156.7767 316.0582 -138.0143 313.774 -112.6527 C 0.5163 w 3.899994 M [1 0.266667 0 0] vc false setoverprint s n 284.3325 -161.7481 m 421.7889 -161.7481 L 1.0326 w [1 0.733318 0 0] vc S n true eomode 421.7889 -161.7481 m 420.0897 -159.1992 L 426.8867 -161.7481 L 420.0897 -164.297 L 421.7889 -161.7481 L f n 3.863708 M [0 0 0 1] vc S n 400.238 -82.1307 m 414.0907 -101.4785 423.0882 -124.5009 425.3546 -149.6678 C 432.2758 -226.5211 373.8077 -294.2664 294.7605 -300.9837 C 215.7132 -307.701 146.0241 -250.8462 139.1029 -173.993 C 132.1817 -97.1397 190.6498 -29.3943 269.6971 -22.6771 C 293.6225 -20.6439 316.6907 -24.4347 337.4206 -32.8412 C [1 0.733318 0 0] vc S n 364.1844 -92.4463 m 357.995 -108.5923 342.7025 -120.6887 323.8706 -122.289 C 297.7848 -124.5057 274.7873 -105.7435 272.5033 -80.3818 C 270.2193 -55.0201 289.5139 -32.664 315.5996 -30.4473 C 323.261 -29.7963 330.656 -30.9549 337.3381 -33.5588 C 3.899994 M [1 0.666651 0 0] vc S n 337.4206 -32.8412 m 362.752 -43.1136 384.5919 -60.2784 400.238 -82.1307 C 2.5815 w [1 0.733318 0 0] vc S n 337.3381 -33.5588 m 353.4073 -39.8208 365.3537 -54.4416 366.9669 -72.3545 C 367.602 -79.407 366.5685 -86.2271 364.1844 -92.4463 C [1 0.666651 0 0] vc S n 284.5103 -161.0193 m 400.071 -82.2834 L 1.5489 w [0.4 0.266667 0 0] vc S n 319.3287 -76.7982 m 336.9587 -34.2161 L S n 284.5103 -161.0193 m 284.5103 -161.0193 315.4893 -84.618 317.0602 -82.0724 C 1.0326 w [1 0.733318 0 0] vc S n 317.0602 -82.0724 m 313.9981 -82.1628 L 319.7616 -77.7492 L 318.3213 -84.8642 L 317.0602 -82.0724 L f n 319.9386 -75.7272 m 355.2862 -89.2 L S n 355.2862 -89.2 m 354.6132 -86.2114 L 360.0453 -91.0268 L 352.7864 -90.9706 L 355.2862 -89.2 L f n 3.863708 M [0 0 0 1] vc S n 327.7949 -59.1625 m 335.1566 -61.5424 339.1865 -70.7855 337.7441 -76.4722 C 1.5489 w 3.899994 M [1 0.733318 0 0] vc S n 337.7441 -76.4722 m 341.5047 -75.1265 L 336.1361 -82.9214 L 335.0555 -73.5185 L 337.7441 -76.4722 L f n false eomode 317.8457 -75.454 m 317.8457 -74.1887 318.9007 -73.163 320.2021 -73.163 C 321.5035 -73.163 322.5585 -74.1887 322.5585 -75.454 C 322.5585 -76.7193 321.5035 -77.745 320.2021 -77.745 C 318.9007 -77.745 317.8457 -76.7193 317.8457 -75.454 C f S n 361.5699 -93.0183 m 361.5699 -91.753 362.6249 -90.7273 363.9263 -90.7273 C 365.2277 -90.7273 366.2827 -91.753 366.2827 -93.0183 C 366.2827 -94.2836 365.2277 -95.3093 363.9263 -95.3093 C 362.6249 -95.3093 361.5699 -94.2836 361.5699 -93.0183 C f S n 281.9761 -161.7481 m 281.9761 -160.4828 283.0311 -159.4571 284.3325 -159.4571 C 285.6339 -159.4571 286.6889 -160.4828 286.6889 -161.7481 C 286.6889 -163.0134 285.6339 -164.039 284.3325 -164.039 C 283.0311 -164.039 281.9761 -163.0134 281.9761 -161.7481 C [0 1 1 0] vc f S n 359.4753 -58.6534 m 335.9114 -58.6534 L 335.9114 -71.3811 L 359.4753 -71.3811 L 359.4753 -58.6534 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 335.911377 -67.237 m 0 0 32 0 0 (-3s) ts } true [0 0 0 1]sts Q 350.5734 -205.2769 m 237.4664 -205.2769 L 237.4664 -219.532 L 350.5734 -219.532 L 350.5734 -205.2769 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 237.466385 -213.860535 m 0 0 32 0 0 (s = t - \(a+b+c\)\/3) ts } true [0 0 0 1]sts Q 365.759 -163.0208 m 346.3842 -163.0208 L 346.3842 -175.7486 L 365.759 -175.7486 L 365.759 -163.0208 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 346.384247 -171.604446 m 0 0 32 0 0 (3\/2) ts } false [1 0.733318 0 0]sts Q vmrs 305.0164 -102.6914 m 296.6381 -102.6914 L 296.6381 -115.4191 L 305.0164 -115.4191 L 305.0164 -102.6914 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 296.638107 -111.274979 m 0 0 32 0 0 (1) ts } false [1 0.733318 0 0]sts Q 350.5734 -86.6544 m 329.6277 -86.6544 L 329.6277 -99.8913 L 350.5734 -99.8913 L 350.5734 -86.6544 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 329.627655 -95.238022 m 0 0 32 0 0 (1\/2) ts } false [1 0.733318 0 0]sts Q 398.5001 -82.538 m 398.5001 -81.2727 399.5551 -80.247 400.8565 -80.247 C 402.1579 -80.247 403.2129 -81.2727 403.2129 -82.538 C 403.2129 -83.8033 402.1579 -84.829 400.8565 -84.829 C 399.5551 -84.829 398.5001 -83.8033 398.5001 -82.538 C [0.4 0.266667 0 0] vc false setoverprint f 1.5489 w 3.899994 M S n 377.8028 -82.5815 m 369.4245 -82.5815 L 369.4245 -93.7819 L 377.8028 -93.7819 L 377.8028 -82.5815 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 369.424545 -91.165146 m 0 0 32 0 0 (P) ts } true [0 0 0 1]sts Q 413.6724 -68.8356 m 402.6759 -68.8356 L 402.6759 -83.0906 L 413.6724 -83.0906 L 413.6724 -68.8356 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 402.675919 -77.419189 m 0 0 32 -1.570877 0 (P) ts } true [0 0 0 1]sts { f1 [8.378296 0 0 8.145752 0 0] makesetfont 0 -3.563766 rmoveto 0 0 32 0 0 (0) ts 0 3.563766 rmoveto } true [0 0 0 1]sts Q 313.3947 -68.3265 m 228.5645 -68.3265 L 228.5645 -80.5451 L 313.3947 -80.5451 L 313.3947 -68.3265 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 228.564453 -76.91008 m 0 0 32 0 0 (moving center) ts } true [0 0 0 1]sts Q 279.3579 -156.4024 m 199.7641 -156.4024 L 199.7641 -167.6028 L 279.3579 -167.6028 L 279.3579 -156.4024 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 199.764069 -164.986023 m 0 0 32 0 0 (fixed center) ts } true [0 0 0 1]sts Q 316.0129 -139.6018 m 312.8711 -135.2744 309.4674 -131.9651 305.0164 -130.6924 C [1 0.733318 0 0] vc false setoverprint S n true eomode 305.0164 -130.6924 m 306.2301 -134.4977 L 298.6272 -128.8603 L 308.0621 -128.1085 L 305.0164 -130.6924 L f n 319.1548 -122.2921 m 309.7292 -122.2921 L 309.7292 -136.5471 L 319.1548 -136.5471 L 319.1548 -122.2921 L n q %%IncludeFont: Courier { f1 [10.47287 0 0 10.18219 0 0] makesetfont 309.729202 -130.875687 m 0 0 32 0 0 (s) ts } true [0 0 0 1]sts Q false eomode 356.8571 -110.8371 m 356.8571 -109.5718 357.9121 -108.5461 359.2135 -108.5461 C 360.5149 -108.5461 361.5699 -109.5718 361.5699 -110.8371 C 361.5699 -112.1024 360.5149 -113.1281 359.2135 -113.1281 C 357.9121 -113.1281 356.8571 -112.1024 356.8571 -110.8371 C [0.4 0.266667 0 0] vc false setoverprint f S n vmr end %%Trailer %End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 8 :[font = text; inactive; preserveAspect] This can be illustrated by the animating the graphics produced by RollingCircle. Below is a sequence of the frames generated using Graphics Array. As before, the triangle and its circumcircle are shown in gray (the black dot on this circle is the point p[t] used to construct the Simpson line); the fixed center is red. The fixed circle is the larger pale blue circle. As the smaller pale blue circle rolls round the inside of this it carries the initial point of contact (at right hand cusp) all round the envelope. The linkage from the previous animation is shown for reference. ;[s] 5:0,0;67,1;80,2;132,3;146,4;583,-1; 5:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 1; pictureWidth = 435; pictureHeight = 277] %! %%Creator: Mathematica %%AspectRatio: .63742 MathPictureStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.02381 0.31746 0.015177 0.31746 [ [ 0 0 0 0 ] [ 1 .63742 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p P 0 0 m 1 0 L 1 .63742 L 0 .63742 L closepath clip newpath p p % Start of sub-graphic p 0.02381 0.015177 0.321429 0.304256 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .14922 .58563 L s P .02 w .30353 .32426 Mdot .14922 .58563 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .004 w .51435 .48565 m .36003 .74703 L .22934 .66987 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .36003 .74703 Mdot .22934 .66987 Mdot P .545 .7 1 r .004 w newpath .36003 .74703 .15177 0 365.72958 arc s newpath .51435 .48565 .4553 0 365.72958 arc s 0 0 1 r newpath .51435 .48565 .4553 30.55775 120.55781 arc s newpath .36003 .74703 .15177 -149.44225 120.55781 arc s P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.35119 0.015177 0.64881 0.304256 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .0392 .47346 L s P .02 w .30353 .32426 Mdot .0392 .47346 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .004 w .51435 .48565 m .25001 .63485 L .11785 .70946 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .25001 .63485 Mdot .11785 .70946 Mdot P .545 .7 1 r .004 w newpath .25001 .63485 .15177 0 365.72958 arc s newpath .51435 .48565 .4553 0 365.72958 arc s 0 0 1 r newpath .51435 .48565 .4553 30.55775 150.55781 arc s newpath .25001 .63485 .15177 -209.44225 150.55781 arc s P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.678571 0.015177 0.97619 0.304256 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m 1e-05 .3213 L s P .02 w .30353 .32426 Mdot 1e-05 .3213 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .004 w .51435 .48565 m .21083 .4827 L .20935 .63446 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .21083 .4827 Mdot .20935 .63446 Mdot P .545 .7 1 r .004 w newpath .21083 .4827 .15177 0 365.72958 arc s newpath .51435 .48565 .4553 0 365.72958 arc s 0 0 1 r newpath .51435 .48565 .4553 30.55775 180.55781 arc s newpath .21083 .4827 .15177 -269.44225 180.55781 arc s P P MathSubEnd P % End of sub-graphic P p % Start of sub-graphic p 0.02381 0.333164 0.321429 0.622244 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .56491 .47857 L s P .02 w .30353 .32426 Mdot .56491 .47857 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .004 w .51435 .48565 m .77572 .63997 L .90641 .71713 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .77572 .63997 Mdot .90641 .71713 Mdot P .545 .7 1 r .004 w newpath .77572 .63997 .15177 0 365.72958 arc s newpath .51435 .48565 .4553 0 365.72958 arc s 0 0 1 r newpath .51435 .48565 .4553 30.55775 30.55781 arc s newpath .77572 .63997 .15177 30.55775 30.55781 arc s P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.35119 0.333164 0.64881 0.622244 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .45273 .58859 L s P .02 w .30353 .32426 Mdot .45273 .58859 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .004 w .51435 .48565 m .66355 .74999 L .79571 .67539 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .66355 .74999 Mdot .79571 .67539 Mdot P .545 .7 1 r .004 w newpath .66355 .74999 .15177 0 365.72958 arc s newpath .51435 .48565 .4553 0 365.72958 arc s 0 0 1 r newpath .51435 .48565 .4553 30.55775 60.55781 arc s newpath .66355 .74999 .15177 -29.44225 60.55781 arc s P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.678571 0.333164 0.97619 0.622244 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g .02 w .44408 .43185 Mdot P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p p .6 g .004 w .30353 .32426 m .30058 .62777 L s P .02 w .30353 .32426 Mdot .30058 .62777 Mdot P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .004 w .51435 .48565 m .51139 .78917 L .51287 .63741 L s p 1 0 0 r .02 w .51435 .48565 Mdot P 0 0 1 r .02 w .51139 .78917 Mdot .51287 .63741 Mdot P .545 .7 1 r .004 w newpath .51139 .78917 .15177 0 365.72958 arc s newpath .51435 .48565 .4553 0 365.72958 arc s 0 0 1 r newpath .51435 .48565 .4553 30.55775 90.55781 arc s newpath .51139 .78917 .15177 -89.44225 90.55781 arc s P P MathSubEnd P % End of sub-graphic P P % End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 9 :[font = text; inactive; preserveAspect] We have ended up with what is called a hypocycloid. ;[s] 3:0,0;39,1;50,2;51,-1; 3:1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] An immediate consequence of this construction is that the envelope is the same, apart from position, regardless of which triangle we take (provided that the circumcircle of the triangle is of radius 1). Changing the triangle simply rotates the envelope round the fixed center. :[font = text; inactive; preserveAspect] Finally the function RollingTangent shows the Simpson line rolling round its envelope. ;[s] 3:0,0;21,1;35,2;86,-1; 3:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 1; pictureWidth = 435; pictureHeight = 277] %! %%Creator: Mathematica %%AspectRatio: .63742 MathPictureStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.02381 0.31746 0.015177 0.31746 [ [ 0 0 0 0 ] [ 1 .63742 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p P 0 0 m 1 0 L 1 .63742 L 0 .63742 L closepath clip newpath p p % Start of sub-graphic p 0.02381 0.015177 0.321429 0.304256 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .6 g .004 w .30353 .32426 m .14922 .58563 L s P .02 w .30353 .32426 Mdot .14922 .58563 Mdot P 0 0 1 r .02 w .22934 .66987 Mdot p .699 .129 1 r .004 w s 0 .72894 m 1 .47139 L s s P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.35119 0.015177 0.64881 0.304256 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .6 g .004 w .30353 .32426 m .0392 .47346 L s P .02 w .30353 .32426 Mdot .0392 .47346 Mdot P 0 0 1 r .02 w .11785 .70946 Mdot p .699 .129 1 r .004 w s 0 .77597 m 1 .21153 L s s P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.678571 0.015177 0.97619 0.304256 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .6 g .004 w .30353 .32426 m 1e-05 .3213 L s P .02 w .30353 .32426 Mdot 1e-05 .3213 Mdot P 0 0 1 r .02 w .20935 .63446 Mdot p .699 .129 1 r .004 w s 0 .83977 m .85628 0 L s s P P MathSubEnd P % End of sub-graphic P p % Start of sub-graphic p 0.02381 0.333164 0.321429 0.622244 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .6 g .004 w .30353 .32426 m .56491 .47857 L s P .02 w .30353 .32426 Mdot .56491 .47857 Mdot P 0 0 1 r .02 w .90641 .71713 Mdot p .699 .129 1 r .004 w s 0 .18198 m 1 .77239 L s s P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.35119 0.333164 0.64881 0.622244 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .6 g .004 w .30353 .32426 m .45273 .58859 L s P .02 w .30353 .32426 Mdot .45273 .58859 Mdot P 0 0 1 r .02 w .79571 .67539 Mdot p .699 .129 1 r .004 w s 0 .45385 m 1 .73226 L s s P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.678571 0.333164 0.97619 0.622244 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.303534 0.303534 0.324255 0.303534 [ [ 0 0 0 0 ] [ 1 .97131 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 .97131 L 0 .97131 L closepath clip newpath p p .6 g .004 w newpath .30353 .32426 .30353 0 365.72958 arc s P p .6 g p .004 w .49221 .56202 m .325 .62703 L s .325 .62703 m .51501 .10651 L s .51501 .10651 m .49221 .56202 L s P p .03 w .49221 .56202 Mdot .325 .62703 Mdot .51501 .10651 Mdot P P p .699 .129 1 r p .004 w .81345 .63736 m .87955 .69781 L .89891 .71221 L .90423 .71577 L .90571 .7167 L .90638 .71711 L .90641 .71713 L .9064 .71712 L .90633 .71708 L .90621 .71701 L .90518 .71644 L .90054 .71398 L .88068 .70472 L .84681 .69148 L .79971 .67651 L .74091 .66195 L .6726 .64968 L .63571 .6449 L .61675 .64291 L .59751 .6412 L .57804 .6398 L .55839 .63871 L .54852 .63828 L .53862 .63794 L .52871 .63767 L .52374 .63757 L .51878 .63749 L .51381 .63742 L .50885 .63738 L .50388 .63736 L .49891 .63736 L .49395 .63738 L .48899 .63742 L .48404 .63748 L .47909 .63756 L .4692 .63777 L .45935 .63807 L .43974 .63891 L .42034 .64006 L .40117 .6415 L .36377 .64525 L .32794 .65003 L .29405 .65568 L .23342 .66883 L .18418 .68292 L .14801 .69585 L .12586 .70542 L .12012 .70825 L .11857 .70906 L .11812 .70931 L Mistroke .11788 .70943 L .11785 .70945 L .11786 .70945 L .11806 .70934 L .11906 .70874 L .12351 .70595 L .14147 .69338 L .20638 .63736 L .29317 .54069 L .38064 .41358 L .45142 .27545 L .47725 .20986 L .49617 .15077 L .50859 .10109 L .51264 .08057 L .51547 .0633 L .51728 .04949 L .51786 .04395 L .51827 .03933 L .51854 .03566 L .51869 .03294 L .51873 .03195 L .51876 .0312 L .51877 .03068 L .51878 .03042 L .51878 .03038 L .51878 .03039 L .51878 .03047 L .51878 .03062 L .51878 .03082 L .51878 .03108 L .51878 .0314 L .51879 .03179 L .51881 .03274 L .51885 .03393 L .5189 .03536 L .51898 .03704 L .51922 .0411 L .5196 .0461 L .52089 .05887 L .52308 .07518 L .52637 .09482 L .53695 .1431 L .55374 .2013 L .57727 .26659 L .64362 .4059 L .72785 .53626 L .81345 .63736 L Mfstroke P P p p .6 g .004 w .30353 .32426 m .30058 .62777 L s P .02 w .30353 .32426 Mdot .30058 .62777 Mdot P 0 0 1 r .02 w .51287 .63741 Mdot p .699 .129 1 r .004 w s 0 .63242 m 1 .64216 L s s P P MathSubEnd P % End of sub-graphic P P % End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center; endGroup] Figure 10 :[font = section; inactive; Cclosed; preserveAspect; startGroup] Geometric Demonstration of Simpson's Line :[font = text; inactive; preserveAspect] Here are the two geometric facts used (concyclic means on the same circle, and of course iff means if and only if). A hint for proving them is given in the section Further Work. ;[s] 5:0,0;40,1;49,2;91,3;94,4;181,-1; 5:1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 324; pictureHeight = 141] %! %%Creator: Mathematica %%AspectRatio: .4375 MathPictureStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.729167 0.208333 0.21875 0.208333 [ [ 0 0 0 0 ] [ 1 .4375 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p P 0 0 m 1 0 L 1 .4375 L 0 .4375 L closepath clip newpath p p .6 g .004 w newpath .72917 .21875 .20833 0 365.72958 arc s P .004 w .78211 .40945 m .9282 .28032 L .64247 .40819 L .53407 .14567 L .78211 .40945 L s p .025 w .78211 .40945 Mdot .9282 .28032 Mdot .64247 .40819 Mdot .53407 .14567 Mdot P newpath .64247 .40819 .03125 -112.43661 -24.10985 arc s newpath .78211 .40945 .03125 -133.23782 -41.47614 arc s [(a)] .64247 .40819 -3 7 Mshowa [(b)] .78211 .40945 -2 5 Mshowa [(Fact 1:)(the dots are concyclic)(iff)(angle a = angle b.)] 0 .21875 -1 0 Mshowa P % End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 11 :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 324; pictureHeight = 141] %! %%Creator: Mathematica %%AspectRatio: .4375 MathPictureStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.729167 0.208333 0.21875 0.208333 [ [ 0 0 0 0 ] [ 1 .4375 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p P 0 0 m 1 0 L 1 .4375 L 0 .4375 L closepath clip newpath p p .6 g .004 w newpath .72917 .21875 .20833 0 365.72958 arc s P .004 w .9069 .07408 m .9282 .28032 L .64247 .40819 L .53407 .14567 L .9069 .07408 L s .9069 .07408 m 0 0 rlineto 1 .05621 m .9069 .07408 L s s p .025 w .9069 .07408 Mdot .9282 .28032 Mdot .64247 .40819 Mdot .53407 .14567 Mdot P newpath .64247 .40819 .03125 -112.43661 -24.10985 arc s newpath .9069 .07408 .03125 -10.86886 84.10479 arc s [(a)] .64247 .40819 -3 6 Mshowa [(b)] .9069 .07408 -5 -4 Mshowa [(Fact 2:)(the dots are concyclic)(iff)(angle a = angle b.)] 0 .21875 -1 0 Mshowa P % End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 12 :[font = text; inactive; preserveAspect] One proof is as follows: :[font = text; inactive; preserveAspect] I show that the line through the feet, X and Y, of two of the perpendiculars will pass through the foot , Z, of the third perpendicular. :[font = postscript; PostScript; formatAsPostScript; evaluateAsNotebooksKernel; output; inactive; preserveAspect; leftWrapOffset = 30; pictureLeft = 83; pictureWidth = 235; pictureHeight = 233] %! %%Creator: Mathematica %%AspectRatio: 0.991489 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0 1 0 1 [ [ 188 280 0 0 ] [ 423 513 0 0 ] ] MathScale % Start of Graphics %!PS-Adobe-2.0 EPSF-1.2 %%Title: UNTITLED %%Creator: Altsys Virtuoso 1.0 %%CreationDate: Fri Oct 08 22:19:37 GMT 1993 %%BoundingBox: 188 280 423 513 %%FHPathName: UNTITLED %%DocumentProcSets: Altsys_header 4 0 %%DocumentSuppliedProcSets: Altsys_header 4 0 %%ColorUsage: Color %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFonts: Symbol %%+Courier %%DocumentNeededFonts: Symbol %%+Courier %%EndComments %%BeginProcSet: Altsys_header 4 0 /AltsysDict 233 dict def AltsysDict begin /bdf{bind def}bind def /xdf{exch def}bdf /defed{where{pop true}{false}ifelse}bdf /ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf /d{setdash}bdf /h{closepath}bdf /H{}bdf /J{setlinecap}bdf /j{setlinejoin}bdf /M{setmiterlimit}bdf /n{newpath}bdf /N{newpath}bdf /q{gsave}bdf /Q{grestore}bdf /w{setlinewidth}bdf /sepdef{ dup where not { AltsysSepDict } if 3 1 roll exch put }bdf /st{settransfer}bdf /colorimage defed /_rci xdf /md defed{ md type /dicttype eq { /colorimage where { md eq { /_rci false def }if }if /settransfer where { md eq { /st systemdict /settransfer get def }if }if }if }if /setstrokeadjust defed { true setstrokeadjust /C{curveto}bdf /L{lineto}bdf /m{moveto}bdf } { /dr{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform}bdf /C{dr curveto}bdf /L{dr lineto}bdf /m{dr moveto}bdf /setstrokeadjust{pop}bdf }ifelse /rectstroke defed /xt xdf xt {/yt save def} if /privrectpath { 4 -2 roll m dtransform round exch round exch idtransform 2 copy 0 lt exch 0 lt xor {dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto} {exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto} ifelse closepath }bdf /rectclip{newpath privrectpath clip newpath}def /rectfill{gsave newpath privrectpath fill grestore}def /rectstroke{gsave newpath privrectpath stroke grestore}def xt {yt restore} if /packedarray{array astore readonly}ndf /` {false setoverprint /-save0- save def pop pop pop pop pop concat userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath false setstrokeadjust } bdf /currentpacking defed{true setpacking}if /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /xformfont { currentfont exch makefont setfont } bdf /fhnumcolors 1 statusdict begin /processcolors defed { pop processcolors } { /deviceinfo defed { deviceinfo /Colors known { pop deviceinfo /Colors get } if } if } ifelse end def /printerRes gsave matrix defaultmatrix setmatrix 72 72 dtransform abs exch abs max grestore def /graycalcs [ {Angle Frequency} {GrayAngle GrayFrequency} {0 Width Height matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} {0 GrayWidth GrayHeight matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} ] def /calcgraysteps { /currenthalftone defed {currenthalftone /dicttype eq}{false}ifelse { currenthalftone begin HalftoneType 4 le {graycalcs HalftoneType 1 sub get exec} { HalftoneType 5 eq { Default begin {graycalcs HalftoneType 1 sub get exec} end } {0 60} ifelse } ifelse end } { currentscreen pop exch } ifelse printerRes 300 max exch div exch 2 copy sin mul round dup mul 3 1 roll cos mul round dup mul add 1 add dup maxsteps gt {pop maxsteps} if } bdf /nextrelease defed { /languagelevel defed not { /framebuffer defed { 0 40 string framebuffer 9 1 roll 8 {pop} repeat dup 516 eq exch 520 eq or { /fhnumcolors 3 def /currentscreen {60 0 {pop pop 1}}bdf /calcgraysteps {maxsteps} bdf }if }if }if }if /goodsep { spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or }bdf /bottom -0 def /delta -0 def /frac -0 def /height -0 def /left -0 def /numsteps -0 def /numsteps1 -0 def /radius -0 def /right -0 def /top -0 def /width -0 def /xt -0 def /yt -0 def /df currentflat def /tempstr 1 string def /clipflatness currentflat def /inverted? 0 currenttransfer exec .5 ge def /tc1 [0 0 0 1] def /tc2 [0 0 0 1] def /storerect{/top xdf /right xdf /bottom xdf /left xdf /width right left sub def /height top bottom sub def}bdf /concatprocs{ systemdict /packedarray known {dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse { /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx } { /proc2 exch cvlit def/proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }ifelse }bdf /i{dup 0 eq {pop df dup} {dup} ifelse /clipflatness xdf setflat }bdf version cvr 38.0 le {/setrgbcolor{ currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll setrgbcolor}bdf}if /vms {/vmsv save def} bdf /vmr {vmsv restore} bdf /vmrs{vmsv restore /vmsv save def}bdf /eomode{ {/filler /eofill load def /clipper /eoclip load def} {/filler /fill load def /clipper /clip load def} ifelse }bdf /normtaper{}bdf /logtaper{9 mul 1 add log}bdf /lfxform { /yt xdf /xt xdf xt yt translate rotate storerect left xt sub bottom yt sub translate right left sub 0.00001 max top bottom sub 0.00001 max scale }bdf /CD{/NF exch def{exch dup/FID ne 1 index/UniqueID ne and{exch NF 3 1 roll put} {pop pop}ifelse}forall NF}bdf /MN{1 index length/Len exch def dup length Len add string dup Len 4 -1 roll putinterval dup 0 4 -1 roll putinterval}bdf /RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch {1 index MN cvn/NewN exch def cvn findfont dup maxlength dict CD dup/FontName NewN put dup /Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf /RF{dup FontDirectory exch known{pop 3 -1 roll pop}{RC}ifelse}bdf /FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known {exch pop findfont 3 -1 roll pop} {pop dup findfont dup maxlength dict CD dup dup /Encoding exch /Encoding get 256 array copy 7 -1 roll {3 -1 roll dup 4 -2 roll put}forall put definefont} ifelse}bdf /fps{ currentflat exch dup 0 le{pop 1}if { dup setflat 3 index stopped {1.3 mul dup 3 index gt{pop setflat pop pop stop}if} {exit} ifelse }loop pop setflat pop pop }bdf /fp{100 currentflat fps}bdf /clipper{clip}bdf /W{/clipper load 100 clipflatness fps}bdf end%. AltsysDict %%EndProcSet %%EndProlog %%BeginSetup AltsysDict begin %%IncludeFont: Symbol 0 dict dup begin end /f0 /Symbol FF def %%IncludeFont: Courier 0 dict dup begin end /f1 /Courier FF def end %. AltsysDict %%EndSetup AltsysDict begin /onlyk{false}ndf /ccmyk{dup 5 -1 roll sub 0 max exch}ndf /cmyk2gray{ 4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul add add add 1 min neg 1 add }bdf /setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf /setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf /findcmykcustomcolor{5 packedarray}ndf /setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf /setseparationgray{setgray}ndf /setoverprint{pop}ndf /currentoverprint false ndf /cmykbufs2gray{ 0 1 2 index length 1 sub { 4 index 1 index get0.3 mul 4 index 2 index get0.59 mul 4 index 3 index get0.11 mul 4 index 4 index get add add add cvi 255 min 255 exch sub 2 index 3 1 roll put }for 4 1 roll pop pop pop }bdf /colorimage{ pop pop [ 5 -1 roll/exec cvx 6 -1 roll/exec cvx 7 -1 roll/exec cvx 8 -1 roll/exec cvx /cmykbufs2gray cvx ]cvx image } %. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only) version cvr 47.1 le statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse and{userdict begin bdf end}{ndf}ifelse fhnumcolors 1 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf ic im iy ik cmyk2gray /xt xdf currenttransfer {dup 1.0 exch sub xt mul add}concatprocs st image } ifelse }ndf fhnumcolors 1 ne {yt restore} if fhnumcolors 3 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf 1.0 dup ic ik add min sub 1.0 dup im ik add min sub 1.0 dup iy ik add min sub /ic xdf /iy xdf /im xdf currentcolortransfer 4 1 roll {dup 1.0 exch sub ic mul add}concatprocs 4 1 roll {dup 1.0 exch sub iy mul add}concatprocs 4 1 roll {dup 1.0 exch sub im mul add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage } ifelse }ndf fhnumcolors 3 ne {yt restore} if fhnumcolors 4 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf currentcolortransfer {1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll {1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll {1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll {1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy} true 4 colorimage } ifelse }ndf fhnumcolors 4 ne {yt restore} if /separationimage{image}ndf /newcmykcustomcolor{6 packedarray}ndf /inkoverprint false ndf /setinkoverprint{pop}ndf /setspotcolor { spots exch get dup 4 get (_vc_Registration) eq {pop 1 exch sub setseparationgray} {0 5 getinterval exch setcustomcolor} ifelse }ndf /currentcolortransfer{currenttransfer dup dup dup}ndf /setcolortransfer{st pop pop pop}ndf /fas{}ndf /sas{}ndf /fhsetspreadsize{pop}ndf /filler{fill}bdf /F{gsave {filler}fp grestore}bdf /f{closepath F}bdf /S{gsave {stroke}fp grestore}bdf /s{closepath S}bdf /lfs{ gsave W n lfxform pop pop pop /xt xdf /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} [spots xt get aload pop pop] customcolorimage grestore }ndf /lfp{ gsave W n lfxform 9 {pop} repeat _rci { /lfbuf4 xdf /lfbuf3 xdf /lfbuf2 xdf /lfbuf1 xdf pop 1 256 8 [1 0 0 -256 0 256] {lfbuf1}{lfbuf2}{lfbuf3}{lfbuf4} true 4 colorimage } { 4 {pop} repeat /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} image } ifelse grestore }ndf /bcs [0 0] def /_rfs { /tint2 xdf /tint1 xdf bcs exch 1 exch put /radius xdf /yt xdf /xt xdf tint1 tint2 sub abs calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bcs 0 tint2 tint1 sub frac mul tint1 add put bcs vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /bc4 [0 0 0 0] def /_rfp { /k2 xdf /y2 xdf /m2 xdf /c2 xdf /k1 xdf /y1 xdf /m1 xdf /c1 xdf /radius xdf /yt xdf /xt xdf c1 c2 sub abs m1 m2 sub abs y1 y2 sub abs k1 k2 sub abs max max max calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bc4 0 c2 c1 sub frac mul c1 add put bc4 1 m2 m1 sub frac mul m1 add put bc4 2 y2 y1 sub frac mul y1 add put bc4 3 k2 k1 sub frac mul k1 add put bc4 vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /rfs{_rfs}ndf /rfp{_rfp}ndf /cvc [0 0 0 1] def /vc{ AltsysDict /cvc 2 index put aload length 4 eq {setcmykcolor} {setspotcolor} ifelse }bdf /origmtx matrix currentmatrix def /ImMatrix matrix currentmatrix def 0 setseparationgray /imgr {-4000 -4000 4000 4000 } def /bleed 0 def /clpr {-4000 -4000 4000 4000 } def /xs 1 def /ys 1 def /botx 0 def /overlap 0 def /wdist 18 def 0 2 mul fhsetspreadsize 0 0 ne {/df 0 def /clipflatness 0 def} if /maxsteps 256 def /currentpacking defed{false setpacking}if /spots[ 1 0 0 0 (Process Cyan) false newcmykcustomcolor 0 1 0 0 (Process Magenta) false newcmykcustomcolor 0 0 1 0 (Process Yellow) false newcmykcustomcolor 0 0 0 1 (Process Black) false newcmykcustomcolor ]def /textopf false def /curtextmtx{}def /otw .25 def /msf{dup/curtextmtx xdf makefont setfont}bdf /makesetfont/msf load def /curtextheight{.707104 .707104 curtextmtx dtransform dup mul exch dup mul add sqrt}bdf /ta{1 index {tempstr 0 2 index put tempstr 2 index gsave exec grestore tempstr stringwidth rmoveto 5 index eq{6 index 6 index rmoveto}if 3 index 3 index rmoveto }forall 7{pop}repeat}bdf /sts{/textopf currentoverprint def vc setoverprint /ts{awidthshow}def exec textopf setoverprint}bdf /stol{/xt currentlinewidth def setlinewidth vc newpath /ts{{false charpath stroke}ta}def exec xt setlinewidth}bdf /strk{/textopf currentoverprint def vc setoverprint /ts{{false charpath stroke}ta}def exec textopf setoverprint }bdf clpr storerect left bottom width height rectclip [] 0 d 3.863708 M 1 w 0 j 0 J false setoverprint 0 i false eomode [0 0 0 1]vc vms 210.7588 397.2584 m 210.7588 455.111 257.6562 502.0084 315.5088 502.0084 C 373.3613 502.0084 420.2588 455.111 420.2588 397.2584 C 420.2588 339.4059 373.3613 292.5084 315.5088 292.5084 C 257.6562 292.5084 210.7588 339.4059 210.7588 397.2584 C [0.255161 0.255161 0.255161 0] vc s n 217.2588 433.5084 m 405.2588 451.5084 L [0.466667 0.466667 0.466667 0] vc S n 256.7588 446.0084 m 379.2588 417.5084 L [0.266667 0.933318 0 0] vc S n 277.2588 494.5084 m 284.2588 439.5084 L [1 0.666651 0 0] vc S n 205.7588 458.0084 m 275.7588 493.5084 L S n 278.7588 494.5084 m 379.7588 418.0084 L S n 283.2588 446.7584 m 289.7588 447.7584 L S n 289.7588 447.7584 m 290.5088 440.5084 L S n 215.5088 454.5084 m 210.0088 452.0084 L S n 212.2588 461.0084 m 215.5088 454.2584 L S n 267.2588 443.5084 m 269.0088 449.7584 276.8734 452.9995 281.7588 453.5084 C [0 1 1 0] vc S n 213.5088 444.0084 m 216.7588 446.2584 222.1862 446.4284 226.0088 442.2584 C S n 375.0088 422.0084 m 378.7588 427.0084 L [1 0.666651 0 0] vc S n 378.7588 427.0084 m 383.7588 423.0084 L S n 389.2588 458.0084 m 387.7588 453.0084 390.2588 443.0084 396.2588 439.5084 C [0 1 1 0] vc S n 282.7588 439.5084 m 282.7588 440.3369 283.4303 441.0084 284.2588 441.0084 C 285.0872 441.0084 285.7588 440.3369 285.7588 439.5084 C 285.7588 438.68 285.0872 438.0084 284.2588 438.0084 C 283.4303 438.0084 282.7588 438.68 282.7588 439.5084 C f S n 189.2588 461.5084 m 256.2588 446.0084 L 3.899994 M [0.103777 0.390021 0 0] vc [4 4 ] 0 d S n 422.7588 460.5084 m 412.7588 460.5084 L 412.7588 445.5084 L 422.7588 445.5084 L 422.7588 460.5084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 412.758759 450.392395 m 0 0 32 0 0 (C) ts } true [0 0 0 1]sts Q 214.2588 440.0084 m 203.2588 440.0084 L 203.2588 426.0084 L 214.2588 426.0084 L 214.2588 440.0084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 203.258759 429.892395 m 0 0 32 0 0 (A) ts } true [0 0 0 1]sts Q 291.2588 294.0084 m 281.2588 294.0084 L 281.2588 280.0084 L 291.2588 280.0084 L 291.2588 294.0084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 281.258759 283.892395 m 0 0 32 0 0 (B) ts } true [0 0 0 1]sts Q vmrs 282.2588 512.0084 m 272.2588 512.0084 L 272.2588 498.0084 L 282.2588 498.0084 L 282.2588 512.0084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 272.258759 501.892395 m 0 0 32 0 0 (P) ts } true [0 0 0 1]sts Q 297.2588 437.0084 m 280.2588 437.0084 L 280.2588 423.0084 L 297.2588 423.0084 L 297.2588 437.0084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 280.258759 426.892395 m 0 0 32 0 0 (Y) ts } true [0 0 0 1]sts Q 390.2588 415.5084 m 380.2588 415.5084 L 380.2588 402.5084 L 390.2588 402.5084 L 390.2588 415.5084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 380.258759 405.392395 m 0 0 32 0 0 (X) ts } true [0 0 0 1]sts Q 207.7588 459.5084 m 194.7588 459.5084 L 194.7588 448.5084 L 207.7588 448.5084 L 207.7588 459.5084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 194.758759 449.392395 m 0 0 32 0 0 (Z) ts } true [0 0 0 1]sts Q 226.7588 458.0084 m 215.7588 458.0084 L 215.7588 444.0084 L 226.7588 444.0084 L 226.7588 458.0084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 215.758759 447.892395 m 0 0 32 0 0 (a) ts } true [0 0 0 1]sts Q 391.2588 450.0084 m 381.2588 450.0084 L 381.2588 436.0084 L 391.2588 436.0084 L 391.2588 450.0084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 381.258759 439.892395 m 0 0 32 0 0 (c) ts } true [0 0 0 1]sts Q 278.2588 462.0084 m 266.2588 462.0084 L 266.2588 447.0084 L 278.2588 447.0084 L 278.2588 462.0084 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 266.258759 451.892395 m 0 0 32 0 0 (y) ts } true [0 0 0 1]sts Q 405.2588 451.5084 m 287.2588 295.5084 L [0.466667 0.466667 0.466667 0] vc false setoverprint S n 287.2588 295.5084 m 198.7588 472.0084 L S n 276.7588 494.5084 m 404.7588 452.5084 L S n 275.2588 493.5084 m 217.7588 434.5084 L S n 214.2588 433.0084 m 214.2588 434.9414 215.8257 436.5084 217.7588 436.5084 C 219.6918 436.5084 221.2588 434.9414 221.2588 433.0084 C 221.2588 431.0754 219.6918 429.5084 217.7588 429.5084 C 215.8257 429.5084 214.2588 431.0754 214.2588 433.0084 C f S n 401.7588 451.5084 m 401.7588 453.4414 403.3257 455.0084 405.2588 455.0084 C 407.1918 455.0084 408.7588 453.4414 408.7588 451.5084 C 408.7588 449.5754 407.1918 448.0084 405.2588 448.0084 C 403.3257 448.0084 401.7588 449.5754 401.7588 451.5084 C f S n 283.7588 297.0084 m 283.7588 298.9414 285.3257 300.5084 287.2588 300.5084 C 289.1918 300.5084 290.7588 298.9414 290.7588 297.0084 C 290.7588 295.0754 289.1918 293.5084 287.2588 293.5084 C 285.3257 293.5084 283.7588 295.0754 283.7588 297.0084 C f S n 273.7588 493.0084 m 273.7588 494.9414 275.3257 496.5084 277.2588 496.5084 C 279.1918 496.5084 280.7588 494.9414 280.7588 493.0084 C 280.7588 491.0754 279.1918 489.5084 277.2588 489.5084 C 275.3257 489.5084 273.7588 491.0754 273.7588 493.0084 C [1 1 1 0] vc f S n vmr end %%Trailer %End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 13 :[font = text; inactive; preserveAspect; endGroup] The points P, C, X, Y are concyclic because the right angles at X and Y are equal (Fact 1) . So, by Fact 2, y = c. (1) The points P, A, B, C are concyclic because P is on the circumcircle of the triangle ABC. So by Fact 2 a = c. (2) Thus, by (1) and (2), a = y. (3) But the points P, Z, A, Y are concyclic because the right angles at Z and Y are equal (Fact 2). So by Fact 1 angle PYZ = a (4) Thus, by (3) and (4) angle PYZ = y (5) By (5) the angle between YP and YZ is equal to the angle, y, between YP and the continuation of the line segment XY; so the line XY passes through Z. :[font = section; inactive; Cclosed; preserveAspect; startGroup] The Nine-Point Circle :[font = text; inactive; preserveAspect] It turns out that our fixed center is a very famous point ± the nine point centre ± I'll explain what this is (questions about when three points are colinear and when three lines are concurrent have fascinated people for ages). ;[s] 3:0,0;22,1;34,2;230,-1; 3:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] Here is a picture of a triangle ABC and some constructions. on it. :[font = postscript; PostScript; formatAsPostScript; evaluateAsNotebooksKernel; output; inactive; preserveAspect; leftWrapOffset = 30; pictureLeft = 25; pictureTop = 1; pictureWidth = 344; pictureHeight = 344] %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0 1 0 1 [ [ 140 267 0 0 ] [ 484 611 0 0 ] ] MathScale % Start of Graphics %!PS-Adobe-2.0 EPSF-1.2 %%Title: UNTITLED %%Creator: Altsys Virtuoso 1.0 %%CreationDate: Fri Oct 08 15:58:21 GMT 1993 %%BoundingBox: 140 267 484 611 %%FHPathName: UNTITLED %%DocumentProcSets: Altsys_header 4 0 %%DocumentSuppliedProcSets: Altsys_header 4 0 %%ColorUsage: Color %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFonts: Symbol %%+Courier %%DocumentNeededFonts: Symbol %%+Courier %%EndComments %%BeginProcSet: Altsys_header 4 0 /AltsysDict 233 dict def AltsysDict begin /bdf{bind def}bind def /xdf{exch def}bdf /defed{where{pop true}{false}ifelse}bdf /ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf /d{setdash}bdf /h{closepath}bdf /H{}bdf /J{setlinecap}bdf /j{setlinejoin}bdf /M{setmiterlimit}bdf /n{newpath}bdf /N{newpath}bdf /q{gsave}bdf /Q{grestore}bdf /w{setlinewidth}bdf /sepdef{ dup where not { AltsysSepDict } if 3 1 roll exch put }bdf /st{settransfer}bdf /colorimage defed /_rci xdf /md defed{ md type /dicttype eq { /colorimage where { md eq { /_rci false def }if }if /settransfer where { md eq { /st systemdict /settransfer get def }if }if }if }if /setstrokeadjust defed { true setstrokeadjust /C{curveto}bdf /L{lineto}bdf /m{moveto}bdf } { /dr{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform}bdf /C{dr curveto}bdf /L{dr lineto}bdf /m{dr moveto}bdf /setstrokeadjust{pop}bdf }ifelse /rectstroke defed /xt xdf xt {/yt save def} if /privrectpath { 4 -2 roll m dtransform round exch round exch idtransform 2 copy 0 lt exch 0 lt xor {dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto} {exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto} ifelse closepath }bdf /rectclip{newpath privrectpath clip newpath}def /rectfill{gsave newpath privrectpath fill grestore}def /rectstroke{gsave newpath privrectpath stroke grestore}def xt {yt restore} if /packedarray{array astore readonly}ndf /` {false setoverprint /-save0- save def pop pop pop pop pop concat userdict begin /showpage {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath false setstrokeadjust } bdf /currentpacking defed{true setpacking}if /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /xformfont { currentfont exch makefont setfont } bdf /fhnumcolors 1 statusdict begin /processcolors defed { pop processcolors } { /deviceinfo defed { deviceinfo /Colors known { pop deviceinfo /Colors get } if } if } ifelse end def /printerRes gsave matrix defaultmatrix setmatrix 72 72 dtransform abs exch abs max grestore def /graycalcs [ {Angle Frequency} {GrayAngle GrayFrequency} {0 Width Height matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} {0 GrayWidth GrayHeight matrix defaultmatrix idtransform dup mul exch dup mul add sqrt 72 exch div} ] def /calcgraysteps { /currenthalftone defed {currenthalftone /dicttype eq}{false}ifelse { currenthalftone begin HalftoneType 4 le {graycalcs HalftoneType 1 sub get exec} { HalftoneType 5 eq { Default begin {graycalcs HalftoneType 1 sub get exec} end } {0 60} ifelse } ifelse end } { currentscreen pop exch } ifelse printerRes 300 max exch div exch 2 copy sin mul round dup mul 3 1 roll cos mul round dup mul add 1 add dup maxsteps gt {pop maxsteps} if } bdf /nextrelease defed { /languagelevel defed not { /framebuffer defed { 0 40 string framebuffer 9 1 roll 8 {pop} repeat dup 516 eq exch 520 eq or { /fhnumcolors 3 def /currentscreen {60 0 {pop pop 1}}bdf /calcgraysteps {maxsteps} bdf }if }if }if }if /goodsep { spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or }bdf /bottom -0 def /delta -0 def /frac -0 def /height -0 def /left -0 def /numsteps -0 def /numsteps1 -0 def /radius -0 def /right -0 def /top -0 def /width -0 def /xt -0 def /yt -0 def /df currentflat def /tempstr 1 string def /clipflatness currentflat def /inverted? 0 currenttransfer exec .5 ge def /tc1 [0 0 0 1] def /tc2 [0 0 0 1] def /storerect{/top xdf /right xdf /bottom xdf /left xdf /width right left sub def /height top bottom sub def}bdf /concatprocs{ systemdict /packedarray known {dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse { /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx } { /proc2 exch cvlit def/proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }ifelse }bdf /i{dup 0 eq {pop df dup} {dup} ifelse /clipflatness xdf setflat }bdf version cvr 38.0 le {/setrgbcolor{ currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll currenttransfer exec 3 1 roll setrgbcolor}bdf}if /vms {/vmsv save def} bdf /vmr {vmsv restore} bdf /vmrs{vmsv restore /vmsv save def}bdf /eomode{ {/filler /eofill load def /clipper /eoclip load def} {/filler /fill load def /clipper /clip load def} ifelse }bdf /normtaper{}bdf /logtaper{9 mul 1 add log}bdf /lfxform { /yt xdf /xt xdf xt yt translate rotate storerect left xt sub bottom yt sub translate right left sub 0.00001 max top bottom sub 0.00001 max scale }bdf /CD{/NF exch def{exch dup/FID ne 1 index/UniqueID ne and{exch NF 3 1 roll put} {pop pop}ifelse}forall NF}bdf /MN{1 index length/Len exch def dup length Len add string dup Len 4 -1 roll putinterval dup 0 4 -1 roll putinterval}bdf /RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch {1 index MN cvn/NewN exch def cvn findfont dup maxlength dict CD dup/FontName NewN put dup /Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf /RF{dup FontDirectory exch known{pop 3 -1 roll pop}{RC}ifelse}bdf /FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known {exch pop findfont 3 -1 roll pop} {pop dup findfont dup maxlength dict CD dup dup /Encoding exch /Encoding get 256 array copy 7 -1 roll {3 -1 roll dup 4 -2 roll put}forall put definefont} ifelse}bdf /fps{ currentflat exch dup 0 le{pop 1}if { dup setflat 3 index stopped {1.3 mul dup 3 index gt{pop setflat pop pop stop}if} {exit} ifelse }loop pop setflat pop pop }bdf /fp{100 currentflat fps}bdf /clipper{clip}bdf /W{/clipper load 100 clipflatness fps}bdf end%. AltsysDict %%EndProcSet %%EndProlog %%BeginSetup AltsysDict begin %%IncludeFont: Symbol 0 dict dup begin end /f0 /Symbol FF def %%IncludeFont: Courier 0 dict dup begin end /f1 /Courier FF def end %. AltsysDict %%EndSetup AltsysDict begin /onlyk{false}ndf /ccmyk{dup 5 -1 roll sub 0 max exch}ndf /cmyk2gray{ 4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul add add add 1 min neg 1 add }bdf /setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf /setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf /findcmykcustomcolor{5 packedarray}ndf /setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf /setseparationgray{setgray}ndf /setoverprint{pop}ndf /currentoverprint false ndf /cmykbufs2gray{ 0 1 2 index length 1 sub { 4 index 1 index get0.3 mul 4 index 2 index get0.59 mul 4 index 3 index get0.11 mul 4 index 4 index get add add add cvi 255 min 255 exch sub 2 index 3 1 roll put }for 4 1 roll pop pop pop }bdf /colorimage{ pop pop [ 5 -1 roll/exec cvx 6 -1 roll/exec cvx 7 -1 roll/exec cvx 8 -1 roll/exec cvx /cmykbufs2gray cvx ]cvx image } %. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only) version cvr 47.1 le statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse and{userdict begin bdf end}{ndf}ifelse fhnumcolors 1 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf ic im iy ik cmyk2gray /xt xdf currenttransfer {dup 1.0 exch sub xt mul add}concatprocs st image } ifelse }ndf fhnumcolors 1 ne {yt restore} if fhnumcolors 3 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf 1.0 dup ic ik add min sub 1.0 dup im ik add min sub 1.0 dup iy ik add min sub /ic xdf /iy xdf /im xdf currentcolortransfer 4 1 roll {dup 1.0 exch sub ic mul add}concatprocs 4 1 roll {dup 1.0 exch sub iy mul add}concatprocs 4 1 roll {dup 1.0 exch sub im mul add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage } ifelse }ndf fhnumcolors 3 ne {yt restore} if fhnumcolors 4 ne {/yt save def} if /customcolorimage{ aload pop (_vc_Registration) eq { pop pop pop pop separationimage } { /ik xdf /iy xdf /im xdf /ic xdf currentcolortransfer {1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll {1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll {1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll {1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll setcolortransfer {/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy} true 4 colorimage } ifelse }ndf fhnumcolors 4 ne {yt restore} if /separationimage{image}ndf /newcmykcustomcolor{6 packedarray}ndf /inkoverprint false ndf /setinkoverprint{pop}ndf /setspotcolor { spots exch get dup 4 get (_vc_Registration) eq {pop 1 exch sub setseparationgray} {0 5 getinterval exch setcustomcolor} ifelse }ndf /currentcolortransfer{currenttransfer dup dup dup}ndf /setcolortransfer{st pop pop pop}ndf /fas{}ndf /sas{}ndf /fhsetspreadsize{pop}ndf /filler{fill}bdf /F{gsave {filler}fp grestore}bdf /f{closepath F}bdf /S{gsave {stroke}fp grestore}bdf /s{closepath S}bdf /lfs{ gsave W n lfxform pop pop pop /xt xdf /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} [spots xt get aload pop pop] customcolorimage grestore }ndf /lfp{ gsave W n lfxform 9 {pop} repeat _rci { /lfbuf4 xdf /lfbuf3 xdf /lfbuf2 xdf /lfbuf1 xdf pop 1 256 8 [1 0 0 -256 0 256] {lfbuf1}{lfbuf2}{lfbuf3}{lfbuf4} true 4 colorimage } { 4 {pop} repeat /lfbuf1 xdf 1 256 8 [1 0 0 -256 0 256] {lfbuf1} image } ifelse grestore }ndf /bcs [0 0] def /_rfs { /tint2 xdf /tint1 xdf bcs exch 1 exch put /radius xdf /yt xdf /xt xdf tint1 tint2 sub abs calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bcs 0 tint2 tint1 sub frac mul tint1 add put bcs vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /bc4 [0 0 0 0] def /_rfp { /k2 xdf /y2 xdf /m2 xdf /c2 xdf /k1 xdf /y1 xdf /m1 xdf /c1 xdf /radius xdf /yt xdf /xt xdf c1 c2 sub abs m1 m2 sub abs y1 y2 sub abs k1 k2 sub abs max max max calcgraysteps mul abs round dup 2 lt {pop 2} if 1 sub /numsteps1 xdf currentflat mark currentflat clipflatness { { dup setflat W 0 1 numsteps1 { numsteps1 div /frac xdf bc4 0 c2 c1 sub frac mul c1 add put bc4 1 m2 m1 sub frac mul m1 add put bc4 2 y2 y1 sub frac mul y1 add put bc4 3 k2 k1 sub frac mul k1 add put bc4 vc 1 index setflat { newpath mark xt yt radius 1 frac sub mul 0 360 {arc fill}stopped {cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} {cleartomark exit}ifelse }loop }for } gsave stopped grestore {exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} {exit}ifelse }loop cleartomark setflat }bdf /rfs{_rfs}ndf /rfp{_rfp}ndf /cvc [0 0 0 1] def /vc{ AltsysDict /cvc 2 index put aload length 4 eq {setcmykcolor} {setspotcolor} ifelse }bdf /origmtx matrix currentmatrix def /ImMatrix matrix currentmatrix def 0 setseparationgray /imgr {-4000 -4000 4000 4000 } def /bleed 0 def /clpr {-4000 -4000 4000 4000 } def /xs 1 def /ys 1 def /botx 0 def /overlap 0 def /wdist 18 def 0 2 mul fhsetspreadsize 0 0 ne {/df 0 def /clipflatness 0 def} if /maxsteps 256 def /currentpacking defed{false setpacking}if /spots[ 1 0 0 0 (Process Cyan) false newcmykcustomcolor 0 1 0 0 (Process Magenta) false newcmykcustomcolor 0 0 1 0 (Process Yellow) false newcmykcustomcolor 0 0 0 1 (Process Black) false newcmykcustomcolor ]def /textopf false def /curtextmtx{}def /otw .25 def /msf{dup/curtextmtx xdf makefont setfont}bdf /makesetfont/msf load def /curtextheight{.707104 .707104 curtextmtx dtransform dup mul exch dup mul add sqrt}bdf /ta{1 index {tempstr 0 2 index put tempstr 2 index gsave exec grestore tempstr stringwidth rmoveto 5 index eq{6 index 6 index rmoveto}if 3 index 3 index rmoveto }forall 7{pop}repeat}bdf /sts{/textopf currentoverprint def vc setoverprint /ts{awidthshow}def exec textopf setoverprint}bdf /stol{/xt currentlinewidth def setlinewidth vc newpath /ts{{false charpath stroke}ta}def exec xt setlinewidth}bdf /strk{/textopf currentoverprint def vc setoverprint /ts{{false charpath stroke}ta}def exec textopf setoverprint }bdf clpr storerect left bottom width height rectclip [] 0 d 3.863708 M 1 w 0 j 0 J false setoverprint 0 i false eomode [0 0 0 1]vc vms 312.5 439.25 m 312.3715 356.6319 L [0.335988 0.335988 0.335988 0] vc S n 313.625 439.25 m 346.1143 472.5444 L S n 196.9972 475.1641 m 312.5 438.5 L S n 160.0586 360.1319 m 464.17 360.1319 L 233.2283 591.0736 L 160.1773 360.5065 L 160.0586 360.1319 L [0 0 0 1] vc s n 187.0029 436.2481 m 187.0029 483.2614 225.2815 521.3721 272.5019 521.3721 C 319.7223 521.3721 358.0009 483.2614 358.0009 436.2481 C 358.0009 389.2348 319.7223 351.124 272.5019 351.124 C 225.2815 351.124 187.0029 389.2348 187.0029 436.2481 C s n 141.0039 439.2481 m 141.0039 533.2747 217.5611 609.4961 312.0019 609.4961 C 406.4428 609.4961 483 533.2747 483 439.2481 C 483 345.2215 406.4428 269 312.0019 269 C 217.5611 269 141.0039 345.2215 141.0039 439.2481 C 2 w [0.335988 0.335988 0.335988 0] vc s n 1 w [0 0 0 1] vc S n 233.3715 589.9303 m 233.3715 360.1319 L [1 0.666651 0 0] vc S n 161.2019 360.632 m 312.1143 511.5444 L S n 187.4972 448.1641 m 463 360.5 L S n 311.375 439.25 m 311.375 439.8713 311.8787 440.375 312.5 440.375 C 313.1213 440.375 313.625 439.8713 313.625 439.25 C 313.625 438.6287 313.1213 438.125 312.5 438.125 C 311.8787 438.125 311.375 438.6287 311.375 439.25 C [1 1 1 0] vc f 0.5 w [0 0 0 1] vc S n 192.9972 476.1641 m 201.3118 473.3468 L 1 w S n 346 472.5 m 351 477.5 L S n 312.0032 356.243 m 312.0032 363.743 L S n 346.706 392.3701 m 349.5233 400.6847 L S n 199.8701 393.8729 m 194.8701 398.8729 L S n 237.6271 511.3761 m 230.1271 511.3761 L S n 233.5 434 m 312.5 439.25 L S n 271.2812 436.5625 m 271.2812 437.8914 272.3586 438.9688 273.6875 438.9688 C 275.0164 438.9688 276.0938 437.8914 276.0938 436.5625 C 276.0938 435.2336 275.0164 434.1562 273.6875 434.1562 C 272.3586 434.1562 271.2812 435.2336 271.2812 436.5625 C [0 1 1 0] vc f 0.25 w S n 160.1773 360.5065 m 349 475.5 L 1 w [1 0.383993 1 0] vc S n vmrs 233 590.5 m 312.5 360 L [1 0.383993 1 0] vc S n 463 360.5 m 195.5 476 L S n 309.5312 438.5625 m 309.5312 439.8914 310.6086 440.9688 311.9375 440.9688 C 313.2664 440.9688 314.3438 439.8914 314.3438 438.5625 C 314.3438 437.2336 313.2664 436.1562 311.9375 436.1562 C 310.6086 436.1562 309.5312 437.2336 309.5312 438.5625 C [0.335988 0.335988 0.335988 0] vc f 0.25 w S n 283.5938 437.5 m 283.5938 438.8289 284.6711 439.9062 286 439.9062 C 287.3289 439.9062 288.4062 438.8289 288.4062 437.5 C 288.4062 436.1711 287.3289 435.0938 286 435.0938 C 284.6711 435.0938 283.5938 436.1711 283.5938 437.5 C [1 0.383993 1 0] vc f S n 231.0938 433.75 m 231.0938 435.0789 232.1711 436.1562 233.5 436.1562 C 234.8289 436.1562 235.9062 435.0789 235.9062 433.75 C 235.9062 432.4211 234.8289 431.3438 233.5 431.3438 C 232.1711 431.3438 231.0938 432.4211 231.0938 433.75 C [1 1 0 0] vc f S n 233 449 m 222 449 L 222 435 L 233 435 L 233 449 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 222 438.883972 m 0 0 32 0 0 (O) ts } true [0 0 0 1]sts Q 297 453 m 285 453 L 285 440 L 297 440 L 297 453 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 285 442.883972 m 0 0 32 0 0 (G) ts } true [0 0 0 1]sts Q 282 434 m 270 434 L 270 422 L 282 422 L 282 434 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 270 423.883972 m 0 0 32 0 0 (N) ts } true [0 0 0 1]sts Q 327 443 m 317 443 L 317 431 L 327 431 L 327 443 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 317 432.883972 m 0 0 32 0 0 (S) ts } true [0 0 0 1]sts Q 239.5 605 m 230.5 605 L 230.5 593 L 239.5 593 L 239.5 605 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 230.5 594.883972 m 0 0 32 0 0 (A) ts } true [0 0 0 1]sts Q 159 363 m 151 363 L 151 350 L 159 350 L 159 363 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 151 352.883972 m 0 0 32 0 0 (B) ts } true [0 0 0 1]sts Q 476 364 m 467 364 L 467 352 L 476 352 L 476 364 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 467 353.883972 m 0 0 32 0 0 (C) ts } true [0 0 0 1]sts Q 236 357 m 227 357 L 227 342 L 236 342 L 236 357 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 227 346.883972 m 0 0 32 0 0 (X) ts } true [0 0 0 1]sts Q 325 523 m 314 523 L 314 509 L 325 509 L 325 523 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 314 512.883972 m 0 0 32 0 0 (Y) ts } true [0 0 0 1]sts Q 183 454 m 175 454 L 175 441 L 183 441 L 183 454 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 175 443.883972 m 0 0 32 0 0 (Z) ts } true [0 0 0 1]sts Q 324 356 m 316 356 L 316 342 L 324 342 L 324 356 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 316 345.883972 m 0 0 32 0 0 (D) ts } true [0 0 0 1]sts Q 367 481 m 358 481 L 358 468 L 367 468 L 367 481 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 358 470.883972 m 0 0 32 0 0 (E) ts } true [0 0 0 1]sts Q 196 491 m 187 491 L 187 479 L 196 479 L 196 491 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 187 480.883972 m 0 0 32 0 0 (F) ts } true [0 0 0 1]sts Q 234 524 m 224 524 L 224 510 L 234 510 L 234 524 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 224 513.883972 m 0 0 32 0 0 (a) ts } true [0 0 0 1]sts Q 192.5 403.5 m 185.5 403.5 L 185.5 390.5 L 192.5 390.5 L 192.5 403.5 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 185.5 393.383972 m 0.199997 0 32 -0.199997 0 (b) ts } true [0 0 0 1]sts Q vmrs 356 396 m 348 396 L 348 383 L 356 383 L 356 396 L n q %%IncludeFont: Courier { f1 [12 0 0 12 0 0] makesetfont 348 385.883972 m 0 0 32 0 0 (c) ts } true [0 0 0 1]sts Q vmr end %%Trailer %End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 14 :[font = text; inactive; preserveAspect] This figure is fullof concidences , all of which can be readily proved using Mathematica and the ideas used above. The altitudes of the triangle (the perpendiculars from the vertices onto the opposite sides) meet at the orthocenter,O. The medians (the lines joining the vertices to the mid points of the opposite sides) meet at the centroid G. The perpendicur bisectors of the sides meet at the circumcenter, S (the center of the circumcircle). The nine points: · the feet of the altitudes, X, Y, Z; · the mid points of the sides , D, E, F; · the midpoints, a, b, c, of the lines joining the orthocenter, O, to the vertices, A, B, C; all lie on the nine-point circle (its center, N, is the nine-point center). But, there is more: The orthocenter, O, the nine-point center, N, the centroid, G, and the circumcenter, S, all lie on a line called the Euler line of the triangle. And they are nicely arranged on this line: The nine-point center N, is the mid point of the line joining the circumcenter, S to the orthocenter, O; and it is half as far again from the circumcenter as is the centroid, G. The last property is why our fixed center is in fact the nine-point center. For, going back to equation (*2*) in the Exploration section, we see that the coordinates of the fixed center are ;[s] 21:0,0;77,1;88,2;121,3;130,4;222,5;233,6;241,7;248,8;335,9;344,10;398,11;410,12;659,13;676,14;703,15;720,16;861,17;872,18;888,19;889,20;1303,-1; 21:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; preserveAspect] (p[a] + p[b] + p[c])/2 :[font = text; inactive; preserveAspect] (remember that S is the origin for coordinate system) :[font = text; inactive; preserveAspect] And this is, :[font = input; preserveAspect] 3/2 ( (p[a] + p[b] + p[c])/3 ) = 3/2 the coordinates of the centroid G. ;[s] 3:0,0;41,1;74,2;76,-1; 3:1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0; :[font = text; inactive; preserveAspect] (I leave it to you to show that SG = (p[a] + p[b] + p[c])/3) ;[s] 2:0,0;34,1;62,-1; 2:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0; :[font = text; inactive; preserveAspect; endGroup] In fact we now have the very simple and satisfying results: centroid = (p[a] + p[b] + p[c])/3; nine-point center = (p[a] + p[b] + p[c])/2; orthocenter = (p[a] + p[b] + p[c]). ;[s] 11:0,0;72,1;94,2;95,3;97,4;116,5;139,6;140,7;142,8;156,9;176,10;177,-1; 11:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = section; inactive; Cclosed; preserveAspect; startGroup] Further Work :[font = text; inactive; preserveAspect] (1) Can the envelope be found without using calculus? Modify equation (*1*) in the Exploration section to give the intersection of the Simpson lines at points t and t + h. :[font = input; preserveAspect] env[a_,b_,c_,t_,h_] = Factor[ ({x,y}/.Solve[{sl[t]==0, sl[t + h]==0},{x,y},{x,y}])[[1]], Trig -> True ]//Expand :[font = input; preserveAspect] Find out if this works and investigate its relation to the method used in the text. ;[s] 1:0,0;85,-1; 1:1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] (2) Prove the two facts used in the geometrical demonstration of the Simpson's line (hint: join the points on the circle to the center of the circle and use isosceles triangles ± a triangle is isosceles if two of its sides are equal ±the important consequence is that the angles opposite these side are also equal). ;[s] 3:0,0;199,1;208,2;323,-1; 3:1,11,8,Times,0,12,0,0,0;1,10,8,Times,1,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] (3) Find other ways of demonstrating Simpson©s line by Euclidean geometry - there are at least two othe ways using the two facts given. :[font = text; inactive; preserveAspect] (4) Prove the properties mentioned in the section on the nine point circle, (a) by using Mathematica, (b) by Euclidean geometry. ;[s] 3:0,0;92,1;103,2;131,-1; 3:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] (5 ) Prove the result used in the text that, in two dimentions, three points a ,b,c,are colinear if and only if Det[{b-a,c-a}] = 0. Extend this result to three points in three dimensions. Find tests for the colinearity of (a) more than three points in two dimensions ; (b) any number of points in any number of dimensions . ;[s] 5:0,0;80,1;85,2;121,3;134,4;334,-1; 5:1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0;1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] (6) Find conditions for lines to be concurrent similar to those in (5) above for points to be colinear. :[font = text; inactive; preserveAspect] (7) Find tests for four points in three dimensions to be in the same plane. :[font = text; inactive; preserveAspect] (8} Find tests for four plane in three dimensions to pass through the same point. :[font = text; inactive; preserveAspect] I have not myselfdone the problems below; please let me know if you find anything interesting. :[font = text; inactive; preserveAspect] (9) Is there a generalization of Simpson's line and our envelope result to three dimensions? :[font = text; inactive; preserveAspect] (10 Find a Euclidean proof of the rolling circle construction for the envelope. :[font = text; inactive; preserveAspect; endGroup] (11) Explain in Euclidean terms the significance of the direction (a+b+c)/3. (I am grateful to the reviewer for the following general argument that introduces yet another technique . However, I would very much like to see a Euclidean explanation. The problem is particularly intriguing since it is known that trisection of a general angle is not possible by Euclidean constructions. :[font = section; inactive; Cclosed; preserveAspect; startGroup] Animations :[font = text; inactive; preserveAspect] In the following a,b,c are the positions, in radians, of the points of the triangle; and t is the position in radians of the point from which the perpendiculars are dropped to the sides of the triangle; n can be any positive integer. To run the examples simply enter the input expression into Mathematica. The numbers can be changed ± if you want to keep the original change them in a copy. I have not shown the graphics generated by the last three since this was done in the text. ;[s] 5:0,0;42,1;52,2;294,3;305,4;756,-1; 5:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect] SimpsonConstruction[a,b,c,t], shows the construction of Simpson's line. ;[s] 1:0,0;72,-1; 1:1,8,6,Courier,0,10,0,0,0; :[font = text; inactive; preserveAspect] Here is an array of the frames from this. :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 0; pictureWidth = 405; pictureHeight = 94] %! %%Creator: Mathematica %%AspectRatio: .23256 MathPictureStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.02381 0.238095 0.005537 0.238095 [ [ 0 0 0 0 ] [ 1 .23256 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p P 0 0 m 1 0 L 1 .23256 L 0 .23256 L closepath clip newpath p p % Start of sub-graphic p 0.02381 0.005537 0.245293 0.227021 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.555094 0.3125 0.412732 0.3125 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath p p .6 g .004 w newpath .55509 .41273 .3125 0 365.72958 arc s P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.267442 0.005537 0.488926 0.227021 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.555094 0.3125 0.412732 0.3125 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath p p .6 g .004 w newpath .55509 .41273 .3125 0 365.72958 arc s P p .6 g p .004 w s 1 .32772 m 0 .96981 L s s s .55021 1 m .13729 0 L s s s 0 .25557 m 1 .43672 L s s P p .03 w .86759 .41273 Mdot .42505 .69689 Mdot .26245 .30311 Mdot P P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.511074 0.005537 0.732558 0.227021 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.555094 0.3125 0.412732 0.3125 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath p p .6 g .004 w newpath .55509 .41273 .3125 0 365.72958 arc s P p .6 g p .004 w s 1 .32772 m 0 .96981 L s s s .55021 1 m .13729 0 L s s s 0 .25557 m 1 .43672 L s s P p .03 w .86759 .41273 Mdot .42505 .69689 Mdot .26245 .30311 Mdot P P p p 0 0 1 r p .004 w .48922 .10725 m .22639 .21578 L .21446 .1869 L .24335 .17497 L .25528 .20385 L s .48922 .10725 m .44766 .33666 L .41691 .33109 L .42248 .30034 L .45323 .30591 L s .48922 .10725 m .73856 .49558 L .71227 .51247 L .69538 .48617 L .72168 .46929 L s P P .02 w .48922 .10725 Mdot P P MathSubEnd P % End of sub-graphic % Start of sub-graphic p 0.754707 0.005537 0.97619 0.227021 MathSubStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.555094 0.3125 0.412732 0.3125 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash p P 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath p p .6 g .004 w newpath .55509 .41273 .3125 0 365.72958 arc s P p .6 g p .004 w s 1 .32772 m 0 .96981 L s s s .55021 1 m .13729 0 L s s s 0 .25557 m 1 .43672 L s s P p .03 w .86759 .41273 Mdot .42505 .69689 Mdot .26245 .30311 Mdot P P p p 0 0 1 r p .004 w .48922 .10725 m .22639 .21578 L .21446 .1869 L .24335 .17497 L .25528 .20385 L s .48922 .10725 m .44766 .33666 L .41691 .33109 L .42248 .30034 L .45323 .30591 L s .48922 .10725 m .73856 .49558 L .71227 .51247 L .69538 .48617 L .72168 .46929 L s P P .02 w .48922 .10725 Mdot P p .699 .129 1 r .004 w s 0 .0921 m 1 .63841 L s s P P MathSubEnd P % End of sub-graphic P P % End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 13 :[font = input; preserveAspect] SimpsonConstruction[0,2,3.5,4.5] :[font = text; inactive; preserveAspect] SimpsonsLine[a,b,c,t], shows Simpson's line. ;[s] 2:0,0;22,1;46,-1; 2:1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 120; pictureWidth = 136; pictureHeight = 136] %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.555094 0.3125 0.412732 0.3125 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p P 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath p p .6 g .004 w newpath .55509 .41273 .3125 0 365.72958 arc s P p .6 g p .004 w s 1 .32772 m 0 .96981 L s s s .55021 1 m .13729 0 L s s s 0 .25557 m 1 .43672 L s s P p .03 w .86759 .41273 Mdot .42505 .69689 Mdot .26245 .30311 Mdot P P p p 0 0 1 r p .004 w .48922 .10725 m .22639 .21578 L .21446 .1869 L .24335 .17497 L .25528 .20385 L s .48922 .10725 m .44766 .33666 L .41691 .33109 L .42248 .30034 L .45323 .30591 L s .48922 .10725 m .73856 .49558 L .71227 .51247 L .69538 .48617 L .72168 .46929 L s P P .02 w .48922 .10725 Mdot P p .699 .129 1 r .004 w s 0 .0921 m 1 .63841 L s s P P % End of Graphics MathPictureEnd :[font = text; inactive; preserveAspect; center] Figure 14 :[font = input; preserveAspect] SimpsonConstruction[0,2,3.5,4.5] :[font = text; inactive; preserveAspect] SimpsonsLinesEnvelope[a,b,c,n], shows the envelope and Simpson's lines at 3n equally spaced points. ;[s] 2:0,0;31,1;101,-1; 2:1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; preserveAspect] SimpsonsLinesEnvelope[0,2,3.5, 9] :[font = text; inactive; preserveAspect] RollingTangent[a,b,c,n] shows the envelope and Simpson's line rolling round it at 3n equally spaced points in succession. ;[s] 2:0,0;25,1;123,-1; 2:1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; preserveAspect] RollingTangent[.1, .7, -1.6, 8] :[font = text; inactive; preserveAspect] MovingLinkage[a,b,c,n] shows the rotating linkage at 3n equally spaced points in succession as its tip traces out the envelope. ;[s] 2:0,0;24,1;129,-1; 2:1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; preserveAspect] MovingLinkage[.1, .7, -1.6, 8] :[font = text; inactive; preserveAspect] RollingCircle[a,b,c,n] shows the rolling circle at 3n equally spaced points in succession as a point fixed to its circumfrence traces out the envelope. ;[s] 2:0,0;24,1;153,-1; 2:1,8,6,Courier,0,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; preserveAspect; endGroup] RollingCircle[.1, .7, -1.6, 8] :[font = section; inactive; initialization; Cclosed; preserveAspect; startGroup] The Code :[font = subsection; inactive; initialization; Cclosed; preserveAspect; startGroup] Evaluated code :[font = input; preserveAspect] Off[General::spell1] :[font = smalltext; inactive; preserveAspect] If a new symbol is close in spelling to an existing symbol , Mathematica asks if it was a spelling mistake; this is very useful when preparing code; but if you intentionally include such symbols it will generate unwanted waeninsg every time the code is loaded; so many people turn this message off after finishing coding. ;[s] 3:0,0;61,1;72,2;322,-1; 3:1,9,7,Times,0,10,0,0,0;1,9,7,Times,2,10,0,0,0;1,9,7,Times,0,10,0,0,0; :[font = text; inactive; initialization; preserveAspect] First I give evaluated forms of the previous code to allow a quick start up. :[font = input; initialization; dontPreserveAspect] *) p[t_] = {Cos[t], Sin[t]}; v[i_] = p[ang[Mod[i,3]]]; (ang[0]= a; ang[1]= b; ang[2]= c;) (* :[font = input; initialization; preserveAspect] *) f[i_,t_] = {(Cos[t] + Cos[ang[Mod[1 + i, 3]]] - Cos[t - ang[Mod[1 + i, 3]] - ang[Mod[2 + i, 3]]] + Cos[ang[Mod[2 + i, 3]]])/2, -(-Sin[t] - Sin[ang[Mod[1 + i, 3]]] - Sin[t - ang[Mod[1 + i, 3]] - ang[Mod[2 + i, 3]]] - Sin[ang[Mod[2 + i, 3]]])/2}; (* :[font = input; initialization; preserveAspect] *) sl[t_] = 2*y*Cos[a/2 + b/2 + c/2 - t/2] + Sin[a/2 + b/2 + c/2 - (3*t)/2] + Sin[a/2 + b/2 - c/2 - t/2] + Sin[a/2 - b/2 + c/2 - t/2] - 2*x*Sin[a/2 + b/2 + c/2 - t/2] - Sin[a/2 - b/2 - c/2 + t/2]; (* :[font = input; initialization; preserveAspect] *) env[a_,b_,c_,t_] = {Cos[a]/2 + Cos[b]/2 + Cos[c]/2 + Cos[a + b + c - 2*t]/2 + Cos[t], Sin[a]/2 + Sin[b]/2 + Sin[c]/2 + Sin[a + b + c - 2*t]/2 + Sin[t]}; (* :[font = input; initialization; preserveAspect] *) pi = N[Pi]; (* :[font = input; initialization; preserveAspect] *) fixedcenter[a_,b_,c_] := (p[a] + p[b] + p[c])/2; movingcenter[a_,b_,c_, t_] := fixedcenter[a,b,c] + p[t]; centroid[a_,b_,c_] := (p[a] + p[b] + p[c])/3; (* :[font = input; initialization; preserveAspect; endGroup] *) plotRange[a_,b_,c_] := { { Min[ -1, #1-1.6], Max[1, #1+1.6] }, { Min[ -1, #2-1.6], Max[1, #2+1.6] } }&@@N[fixedcenter[a,b,c]]; (*the N is put in to force numerical evaluation of expressions like Sin[1] so that Min and Max can be determined at this stage*) (* :[font = subsection; inactive; initialization; Cclosed; preserveAspect; startGroup] General Objects :[font = text; inactive; initialization; preserveAspect] The graphics primitive Line[p,q] is really LineSegment[p,q], that is the part of the line between the two points p and q. The object fullLine, below approximates the complete line. ;[s] 3:0,0;134,1;142,2;182,-1; 3:1,11,8,Times,0,12,0,0,0;1,7,6,Courier,1,10,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = input; initialization; preserveAspect] *) fullLine::usage = "fullLine[{p,q},k:(10^5)] gives Line[{p - k(q-p), q + k(q-p)}]"; fullLine[{p_,q_},k_:(10^5)] := Line[N[{p - k(q-p), q + k(q-p)}]] (* :[font = text; inactive; initialization; preserveAspect] We need to be able to show perpendicularity in the usual way (with a little box as in Fig. 1). :[font = input; initialization; preserveAspect; endGroup] *) blockedLine[{s_,f_}] := Module[{v,n,d,u,p}, v = f-s; n = Sqrt[N[v.v]]; d = Min[.1,.3 n]; u = d v /n; p = {{0,-1},{1,0}}.u; Line[{s,f,f+p, f+p-u,f-u}] ] (* :[font = subsection; inactive; initialization; Cclosed; preserveAspect; startGroup] Particular Objects :[font = input; initialization; preserveAspect] *) circumcircle := { GrayLevel[0.6], Circle[{0,0},1] }; (* :[font = input; initialization; preserveAspect] *) centroidpoint[a_,b_,c_] := { PointSize[0.02], GrayLevel[0.6], Point[N[centroid[a,b,c]]] }; (* :[font = input; initialization; preserveAspect] *) fixedcenterpoint[a_,b_,c_] := { PointSize[0.02], RGBColor[1,0,0], Point[fixedcenter[a,b,c]] }; (* :[font = input; initialization; preserveAspect] *) triangle[a_,b_,c_] = { GrayLevel[0.6], Table[Line[{v[i],v[i+1]}], {i,0,2}], PointSize[0.03], Table[Point[v[i]],{i,0,2}] }; (* :[font = input; initialization; preserveAspect] *) fulltriangle[a_,b_,c_] = { GrayLevel[0.6], Table[fullLine[{v[i],v[i+1]}], {i,0,2}], PointSize[0.03], Table[Point[v[i]],{i,0,2}] }; (* :[font = input; initialization; preserveAspect; endGroup] *) perpendiculars[a_,b_,c_,t_] = { {RGBColor[0,0,1], Table[blockedLine[{p[t],f[i,t]}], {i,0,2}]}, PointSize[0.02], Point[p[t]] }; (* :[font = subsection; inactive; initialization; Cclosed; preserveAspect; startGroup] Graphics and Animations :[font = input; initialization; preserveAspect] *) simpsonsline[a_,b_,c_,t_] = { RGBColor[0.699, 0.129, 1.000], fullLine[{f[0,t], f[1,t]}] }; (* :[font = input; initialization; preserveAspect] *) SimpsonConstruction[a_,b_,c_,t_, opts___] := Map[ Show[Graphics[#], opts, PlotRange -> plotRange[a,b,c], AspectRatio -> Automatic ]&, { {circumcircle}, {circumcircle, fulltriangle[a,b,c]}, {circumcircle, fulltriangle[a,b,c], perpendiculars[a,b,c,t]}, {circumcircle, fulltriangle[a,b,c], perpendiculars[a,b,c,t], simpsonsline[a,b,c,t]} } ] (* :[font = input; initialization; preserveAspect] *) SimpsonsLine[a_,b_,c_,t_, opts___] := Show[ Graphics[{ circumcircle, fulltriangle[a,b,c], perpendiculars[a,b,c,t], simpsonsline[a,b,c,t] }], opts, PlotRange -> plotRange[a,b,c], AspectRatio -> Automatic ] (* :[font = input; initialization; preserveAspect] *) envelope[a_,b_,c_] := (envelope[a,b,c]= (*note the caching*) Block[{t}, ParametricPlot[ Evaluate[env[a, b, c, t]], {t,0,N[2Pi]}, PlotStyle -> {{RGBColor[0.699, 0.129, 1.000]}}, (*purple*) DisplayFunction ->Identity ][[1]] (* [[1]] removes the options, so we don't need change DisplayFunction*) ]) (* :[font = input; initialization; preserveAspect] *) SimpsonsLinesEnvelope[a_,b_,c_,n_, opts___]:= Show[ Graphics[{ circumcircle, triangle[a,b,c], Table[ simpsonsline[a,b,c,t], {t,0, 2(1-1/(3n)) N[Pi], 2 N[Pi]/(3n)} ] }], opts, AspectRatio -> Automatic, PlotRange -> plotRange[a,b,c] ] (* :[font = input; initialization; preserveAspect] *) movingpoint[a_,b_,c_,t_] := { { GrayLevel[.6], Line[{{0,0},p[t]}] }, PointSize[.02], Point[{0,0}], Point[p[t]] } (* :[font = input; initialization; preserveAspect] *) RollingTangent[a_,b_,c_,n_, opts___] := Table[ Show[ Graphics[{ circumcircle, triangle[a,b,c], envelope[a,b,c], movingpoint[a,b,c, (a+b+c)/3 +t], PointSize[0.02], RGBColor[0,0,1], Point[env[a,b,c,(a+b+c)/3 + t]], simpsonsline[a,b,c,(a+b+c)/3 + t] }], opts, AspectRatio -> Automatic, PlotRange -> plotRange[a,b,c] ], {t,0, 2(1-1/(3n)) N[Pi], 2 N[Pi]/(3n)} ] (* :[font = input; initialization; preserveAspect] *) linkage[a_,b_,c_,t_]:= { Line[{fixedcenter[a,b,c], movingcenter[a,b,c,t], env[a,b,c,t]}], fixedcenterpoint[a,b,c], PointSize[.02], RGBColor[0,0,1], Point[movingcenter[a,b,c,t]], Point[env[a,b,c,t]] } MovingLinkage[a_,b_,c_, n_, opts___] := Table[ Show[ Graphics[{ circumcircle, centroidpoint[a,b,c], triangle[a,b,c], movingpoint[a,b,c, (a+b+c)/3 +t], envelope[a,b,c], linkage[a,b,c, (a+b+c)/3 +t] }], opts, AspectRatio -> Automatic, PlotRange -> plotRange[a,b,c] ], {t,0, 2(1-1/(3n)) N[Pi], 2 N[Pi]/(3n)} ] (* :[font = input; initialization; preserveAspect; endGroup; endGroup] *) rollingcircle[a_,b_,c_,t_]:= { linkage[a,b,c,t], RGBColor[0.545, 0.700, 1.000], (*pale blue*) Circle[movingcenter[a,b,c,t],0.5], Circle[fixedcenter[a,b,c],1.5], RGBColor[0,0,1], (*arcs rolled out*) Circle[fixedcenter[a,b,c],3/2, {(a+b+c)/3,t + 10^-6}], Circle[movingcenter[a,b,c,t],0.5, { (a+b+c) - 2t, t + 10^-6}] }; RollingCircle[a_,b_,c_,n_, opts___] := Table[ Show[ Graphics[{ circumcircle, centroidpoint[a,b,c], triangle[a,b,c], movingpoint[a,b,c, (a+b+c)/3 +t], envelope[a,b,c], rollingcircle[a,b,c, (a+b+c)/3 +t] }], opts, AspectRatio -> Automatic, PlotRange -> plotRange[a,b,c] ], {t,0, 2(1-1/(3n)) N[Pi], 2 N[Pi]/(3n)} ] (* :[font = section; inactive; Cclosed; preserveAspect; groupLikeTitle; startGroup] References :[font = text; inactive; preserveAspect; endGroup] Wagon, S. 1991. Mathematica in Action. W. H. Freeman, New York. Monasse, D. Symbolic Geometry, Golden Spirals and Descartes-Geometry. This Journal, Vol 2, Number 3, Spring 1993. Helzer, G. Constructions with Straight Edge and Compass. The Mathematica Journal, Vol 2, Issue 3, Summer 1992. ;[s] 3:0,0;16,1;27,2;518,-1; 3:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = section; inactive; Cclosed; preserveAspect; startGroup] About the Author :[font = text; inactive; preserveAspect] Allan Hayes received his Ph.D from Cambridge University in 1960. He has held posts in mathematics at MIT and Purdue University and, from 1965, the University of Leicester. He has become increasingly concerned with teaching and with encouraging a more active role for students. In 1988 he became an independent consultant in the use of computer systems, principally Mathematica , in education. He is active in the Institute for Mathematics and its Applications and is currently helping to develop the use of Mathematica at De Monfort University Leicester. ;[s] 5:0,0;365,1;376,2;508,3;519,4;558,-1; 5:1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0;1,10,8,Times,2,12,0,0,0;1,11,8,Times,0,12,0,0,0; :[font = text; inactive; preserveAspect; endGroup; endGroup] Department of Mathematics The University Leicester LE1 7RH U.K. email: hay@le.ac.uk ^*)