From a97e074022bc6c8f38e228f7cf6f3280da94530d Mon Sep 17 00:00:00 2001
From: Kevin O'Connor <kevin@koconnor.net>
Date: Thu, 27 Apr 2017 11:19:30 -0400
Subject: [PATCH] docs: Kinematics document image updates

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
---
 docs/Kinematics.md              |  41 ++++---
 docs/img/corner-blob.jpg        | Bin 5772 -> 4665 bytes
 docs/img/corner-dimple.jpg      | Bin 5507 -> 4388 bytes
 docs/img/corner-good.jpg        | Bin 5461 -> 4354 bytes
 docs/img/corner.svg             |  42 +++++--
 docs/img/corner.svg.png         | Bin 1176 -> 2157 bytes
 docs/img/lookahead-slow.svg     | 208 ++++++++++++++++++++++++++++++++
 docs/img/lookahead-slow.svg.png | Bin 0 -> 7641 bytes
 docs/img/lookahead.svg          |  36 ++++--
 docs/img/lookahead.svg.png      | Bin 3323 -> 4180 bytes
 docs/img/trapezoids.svg         |  25 ++--
 docs/img/trapezoids.svg.png     | Bin 4748 -> 4613 bytes
 12 files changed, 304 insertions(+), 48 deletions(-)
 create mode 100644 docs/img/lookahead-slow.svg
 create mode 100644 docs/img/lookahead-slow.svg.png

diff --git a/docs/Kinematics.md b/docs/Kinematics.md
index 92de88adc..401554f85 100644
--- a/docs/Kinematics.md
+++ b/docs/Kinematics.md
@@ -73,21 +73,24 @@ flow would result in poor print quality.
 To solve this, the "look-ahead" mechanism queues multiple incoming
 moves and analyzes the angles between moves to determine a reasonable
 speed that can be obtained during the "junction" between two moves. If
-the next move forms an acute angle (the head is going to travel in
-nearly a reverse direction on the next move) then only a small
-junction speed is permitted. If the next move is nearly in the same
-direction then the head need only slow down a little (if at all).
+the next move is nearly in the same direction then the head need only
+slow down a little (if at all).
 
 ![lookahead](img/lookahead.svg.png)
 
+If the next move forms an acute angle (the head is going to travel in
+nearly a reverse direction on the next move) then only a small
+junction speed is permitted.
+
+![lookahead](img/lookahead-slow.svg.png)
+
 The junction speeds are determined using "approximated centripetal
 acceleration". Best
-[described](https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/)
-by the author.
+[described by the author](https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/).
 
 Klipper implements look-ahead between moves contained in the XY plane
-that have similar extruder flow rates. Other moves are rare and
-implementing look-ahead between them is unnecessary.
+that have similar extruder flow rates. Other moves are relatively rare
+and implementing look-ahead between them is unnecessary.
 
 Key formula for look-ahead:
 ```
@@ -158,20 +161,20 @@ To generate step times on Delta printers it is necessary to correlate
 the movement in cartesian space with the movement on each stepper
 tower.
 
+To simplify the math, for each stepper tower, the code calculates the
+location of a "virtual tower" that is along the line of movement.
+This virtual tower is chosen at the point where the line of movement
+(extended infinitely in both directions) would be closest to the
+actual tower.
+
 ![delta-tower](img/delta-tower.svg.png)
 
-To simplify the math, for each move contained in an XY plane, the code
-calculates the location of a "virtual tower" that is along the line of
-movement.  This virtual tower is chosen at the point where the line of
-movement (extended infinitely in both directions) would be closest to
-the actual tower.
+It is then possible to calculate where the head will be along the line
+of movement after each step is taken on the virtual tower.
 
 ![virtual-tower](img/virtual-tower.svg.png)
 
-It is then possible to calculate where the head will be along the line
-of movement after each step is taken on the virtual tower. The key
-formula is Pythagoras's theorem:
-
+The key formula is Pythagoras's theorem:
 ```
 distance_to_tower^2 = arm_length^2 - tower_height^2
 ```
@@ -196,7 +199,7 @@ must also be used in the calculations.
 
 Should the move contain only Z movement (ie, no XY movement at all)
 then the same math is used - just in this case the tower is parallel
-to the line of movement (its slope is 1.0).
+to the line of movement.
 
 ### Stepper motor acceleration limits ###
 
@@ -248,7 +251,7 @@ pressure. Pressure increases when filament is pushed into the extruder
 (as in [Hooke's law](https://en.wikipedia.org/wiki/Hooke%27s_law)) and
 the pressure necessary to extrude is dominated by the flow rate
 through the nozzle orifice (as in
-[Poiseuille law](https://en.wikipedia.org/wiki/Poiseuille_law)). The
+[Poiseuille's law](https://en.wikipedia.org/wiki/Poiseuille_law)). The
 key idea is that the relationship between filament, pressure, and flow
 rate can be modeled using a linear coefficient:
 ```
diff --git a/docs/img/corner-blob.jpg b/docs/img/corner-blob.jpg
index 6dd529a01bd16541084d93520f515aff727009cf..eaf9024cdbfd064858f02da1b6bf46374d09a138 100644
GIT binary patch
delta 12
TcmeCt-KoO#|HkG}7IPs0B7p?O

delta 1126
zcmZ`%O-NKx6h8O9r=}Ll6bb#_qR6tD?t3%(oQZ;n8MAaEi?T(Fk$L9J`GFZnboI(j
z1`*@iB?v=Jo1lfzMuLzwg_~T~CTbI{TDA&b=e}Qqdc&FXbHDR{){Z@nn)WCAD|BDZ
z3}=840D?cTw;+FUEPdg|)v**CzsY9xO4TTrSUjfiT=ZV8I8n|RbA9R36e~|MmGePG
zRR&nEQJT>!M)AnWzRXB5SDj|;S}j*FX6D&BruCm@*Nf%y%#=~Oi#qSHze%6d=A1DJ
zFggmS0AL5~A}Uan_8`4nJPtB)EJ!*)x*dBv>Tl8D**iDsZjc;|sJ+*dF#`7DVY=4I
zerR#yz<UzehF5@^_`s1qJ~Vs>(nj_L4mRm>63Zh)X@mi&T+vcIky4UONu(0-lp2Su
zK3A)<{&Des35iV93WX^>mygz}dWC5*C8n~hI+V~dEUpbC6WRc)=mkAj)y?R%K3@$S
z;c$b51um@kb<hWO*&hsj)Z7_jtd0P)V$nc;(WD**V_TNv+Xg^iH6*{!uJvXMnC|ot
z)NBnMo)bW@m^?Z!1<tP*kA|406v_?i2kqRn>H+?ZMWDltL*H3#A-*m-7~HZ+H<sLF
zGNBS!tw9H0>fjV1b5-S5d+6L~@srUlOAZozx1>P+xp>0GlluVAdbaucF%`}imN6IZ
zAG@T#M5p+DK+6AX#Q>4>c!xiH%wQs^@+ADtY<p|({{z4kF91TIRs7*+=E?8I_}S$R
zECMSLw=a(+2Zbg!Aag8K;82sD(cr$MSr19G;^m;@)rs~eh!U4BFi%nPu3lP2i-=5b
z3A}qG0<#8iM_6DONh}-l3f^-F`L;2j1`+oO`aCWgb?yUs9;w&U&$yi27WP%DMg9Q4
Cw3qw<

diff --git a/docs/img/corner-dimple.jpg b/docs/img/corner-dimple.jpg
index 14cae0c4598e204736a05c8fdfb6326bbe5aae2b..55402d5ea3cc0bd5c8a5f1c7ff0f47b82834b1be 100644
GIT binary patch
delta 12
TcmZqHUZTYG|HkG-79~LdAs_^q

delta 1160
zcmZ`&O=uHQ5T5sTlTFf=)>>$>iqC>rjj6laG=HKXC8?FRY8CA@C0n~TKae!i;vrZM
z)`O7lu}}z_UIY(<2f-hTAWARRn;?iD6i*&KcAb~~tDqYuGjHBEGvB;<uQ_lxTr)qJ
zU!m(lW;_Fg01*6vxeK|`>GZj)7pGHf<{G=Dl`DFw$cBd$IUBiIEzFiO`cgPuoM)vu
zrpj_cQI!}Q)QgK+SuY$p9?nb@vXuqKE?2X8eQ}wcVeyfZ>`I|jTAbI5H*hV7%x}W?
zbZtqW1DKqI695o^4x$1@s|V%r>QN9;BO&1+>1z3dxPFZe+uycB_k+;FaPEV)jTx{P
z8`HT(`oU-Afp?^P4_*OU!wnhb!#&*zAQCy?2AHI?Ral%DOCt<Gm6do(j;53(Q=+Np
za4H&uDQ&4*VIwnq|2ztrt>*LdS~eG{R<tsU4=F<`n^MQ3@eCV|$CA-_jFq*#maS;D
z$bz<9aRcFSgLnj2HXI)GPF-{khTd<sdl)0+Vm1uw+M7*kV=%X2v|=Ry`lKN^eRgg&
zeNeMb4?#`87x0Jxg89i~@R}R^Y<0lHGzHIYP$y~Ij!}2<FAM@9D-V5RNFKf}v@kg3
z8r@#Aiiv~@VEEk*zSN;bLX=fiHiBMo!{-#EyN2i%_+bdH{cH7@g(sH)9`^2ub#f}Q
zyt0n9aQ@gO{mnbY?>$QHUn2(SK8yG8r-Ml-iKME)-^w(1WB*S8*X;xd0YCr4ua={?
zKR!RbzKtZ13BUW|bTYwLd;+43L^%%M#-Y}38zxyn;(Ru(`CxNAieh&DF8EEynF<f=
zY;=nICD*@+rR~=syyExY33$tKUh8}{j>2mo9j<%(Q0Gv(tu=&g9kF!(OVoUS(Dt9Q
fG~v{8=4Tj%fZs3qeE~_5g26zjy{F@8U;Dm4$OD_y

diff --git a/docs/img/corner-good.jpg b/docs/img/corner-good.jpg
index 687c73aaf9c4889050b57f60ec73654709c67119..812c82a50d734b6b8052c2f9a686dcc64e49a071 100644
GIT binary patch
delta 11
Scmcbr)uhDq|Hk4_7C`_WTm*^$

delta 1125
zcmZ{jOGs2v7=ZtC?p0F@O#`6^orKCX?cO_&J2O!fF=K`rS(KX=BXiZ8^MHAX(&Cbv
zrcI1@6A8vt(<W#Uv?zj*HiesP5!5DX6RlddoZEly)1c1q&;S4DeE;J-?n?isLBslN
zeS_``sj(Cg0zmKwRueMkrjlo`T%1a<>8or}E0**^o`ptaDLs6nlA9@{^rfL>ex4O(
znIcIsS&^e`K+l)8qMkc+Y$!FJOP3ZHyHrVM_3|=1#ni}gb~#rll;`#Q9Qsm+^<DUq
zG?w&PfQbnh1b`i|izq<R+Jo}6dKg61*pRTFbldao=)b`UcfNCr_JUwDy!Qdu#tgU@
zm+9Id`=G_i1Mf)BHeLp5;DUtm;kNDtkT$Z{53op=U056+O(F)MNV1xc!U;Lf<VYeE
zON1gYsV!AXEHcg4&!do;N;W&Mr8C2ol2&Buh&-aONo6#wrdUXg#=~lq6}7CEE@{T_
zg0@`p1L0tu1P!jNdwtMbHPJg5dZ)27V9XAmSvRR~KWR{x!Q7^4$F>2`XLZ5bXV*rf
z1q|o(5Nfmr0gnkF%ugPJSN-4@)&78K2!UOvUeeAjv*z=!O#&TG9{Sd73;3E~GkD7e
z-CT8wiG&JZw)#8xS_8WYQBoAiY!8C#EnYF&G)2F_4^!~%U)7@yPwxRd>f09U<&-69
zWescL{o^j_Z@yC;?@==Ux?+Hy)A$a5dQ4P_sqqN>tt_h<{eJ?Oa}yu}t^5y%k)by~
zzC5|MiA`W9{OyZV@fi2`4Tusp$~p8z`)KgKghiL6lYHfX9o32Rcah>Roiq2*a$mjh
z9A|iDdX4kWBjL;|fa`n)#!&cWV_mNM&Y<3Q4Cp~G3P+B(nt!3(=OcqMfWrL~jwTOK
JXCBhse*hJ4n63Z-

diff --git a/docs/img/corner.svg b/docs/img/corner.svg
index 3383a9692..f2e3d0ef2 100644
--- a/docs/img/corner.svg
+++ b/docs/img/corner.svg
@@ -102,8 +102,8 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="2.49"
-     inkscape:cx="27.644"
-     inkscape:cy="0.62950496"
+     inkscape:cx="95.030833"
+     inkscape:cy="-0.17370789"
      inkscape:document-units="px"
      inkscape:current-layer="layer1"
      showgrid="true"
@@ -112,11 +112,11 @@
      fit-margin-right="0"
      fit-margin-bottom="0"
      showborder="false"
-     inkscape:window-width="1920"
-     inkscape:window-height="1032"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1">
+     inkscape:window-width="1068"
+     inkscape:window-height="478"
+     inkscape:window-x="378"
+     inkscape:window-y="113"
+     inkscape:window-maximized="0">
     <inkscape:grid
        type="xygrid"
        id="grid6021"
@@ -133,7 +133,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
+        <dc:title />
       </cc:Work>
     </rdf:RDF>
   </metadata>
@@ -154,5 +154,31 @@
        id="path3514-5"
        inkscape:connector-curvature="0"
        sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.25000095px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="189.09824"
+       y="482.48389"
+       id="text12656-9"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.98759291,-0.15703579,0.15703579,0.98759291,0,0)"
+       inkscape:transform-center-x="1.3563414"
+       inkscape:transform-center-y="-5.7099754"><tspan
+         sodipodi:role="line"
+         id="tspan5552"
+         x="189.09824"
+         y="482.48389">move 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.25000095px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="427.95532"
+       y="379.5321"
+       id="text12656-9-8"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.98949457,0.14457001,-0.14457001,0.98949457,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan5554"
+         x="427.95532"
+         y="379.5321">move 2</tspan></text>
   </g>
 </svg>
diff --git a/docs/img/corner.svg.png b/docs/img/corner.svg.png
index c94ade2096d5f3da24d953b89a52a2942c3b06e3..12444e7c732f355467db5bb684a862f37ff75081 100644
GIT binary patch
delta 2085
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
P00000NkvXXu0mjfwSNEQ

delta 1096
zcmV-O1h@O`5SR&&7YY^#1^@s6eT*nJks(Zf1Qkg{K~#90?b}Ug9aR(u@LytVQ$MJ-
z8?_20sm8X7;9lIgaPLCJg$U}#l{>+e3z16ID2j^+DrgnNopjliqHaWMn>78d)hbx1
zO8rRMG%n6u-gGjreQ(}J-fQO%m${ku=FH8V^S|eR&fGVmMiJw90T1CAj%O|PPvYEv
z>I|($FEO&(0~laDh8f&YIDY}BaM;BpIhM6k*>`FT8EP_I8h7F|+*k71vT*uq3g^$`
zXF--kkkj~4kmdnw#1S0DiR_vhtBjfqm&aPXhUbLykG6Q-a&|1vanZ(k{3M7`Y=`hy
zrBT;t8#NhP$0K+j*K3^+WmwkUyq{5jPL!h}($tcyOQ^}v92>ATYg5_rUfiMDye(iF
z*I^STFo_#G7~|hUZY9Z;@1Ia7`fZ^m1GizDaL(<y{zQj%Qv~=!kYE~rmVEE#-2IAe
zv(BQ>uh?&8L^<4KEQ5+sjA5~tH@RBKum-nlID0xySy?UW6e%Y-DRPY&{8Q0?)>@4y
zQf%9>u7hz7oBVoNM7p;{L89xp(#Vij+58H>T{wNQ>eCAHE9)$l#0p<#YbiTFiyhdd
z_f?{@|91jgu)YJk3;0DjQD*UP2ezwX9ljA2z7NH7nD6EdhLsH6ls1b(HsqatKMn{@
zp0FN!#Y&wgLy81n;}v|NQAt{VP4rTJoza-5e#);Yd?)g*W$ec5*wYQ;gG`2I(&lba
z(P<Y+7UUn|tZ@3J7Owvok88}?g{;3@kl?EdV_Gewxh*5gR^e<_(QEnj1U}08X(8Gx
zB<ZI*$SVec484*zd8glp-#QrMllUO(r<ZNJ@M>oJN<%)X<e$qVZtB2)?xp0{oYr%z
z89bf)JCWiv-cd2H=qDM<q|J8RTESK`Y17Vxwu&wIUPPn+@E&%G(&g2NUdyk1Zjzqw
z5mA*(7{|B5fAR}vs^FayQDR4Cqa}2k3~NM!Q*`=nOPe|Usdik8FL9SxZQjD~eYo$i
zqM!2XEMCm+Sw_GlWB1^HO)cbdRmm_6(xw}DUL?-bE?${xR6{YUB>(ADeq9PlLhTa~
z{S!^{ip!B9Nt?XW--BB!462{frdt?OZ=&lLHVRTqYUC%Wze(pRCP}EXBL90yA+H$G
zT-sC(Yei|3j>iq&i<}z6fin4ZKOW3JtAYhVifK_%G$Posu}wpN=f&3Kxy;bKMwzmf
z6E%8`r|_<b+*M?G9_f9>8)IUda5FM2h)jN%q)m-07vrLc@r>4X|CVjJUljiP0}f{G
z5Dt!sRej3JicKwTY77!K<8vX8Xb_?7cO#3!!4GIS`+@A(^!>w#I!UZC_;^_C0N9W_
zcR_51oD&W|FI(X=#gC=h-V!qiZ=h?`XogWdi$_HzGCBLakndgH()~Yow^V!a#(psX
O0000<MNUMnLSTX+*&$Z|

diff --git a/docs/img/lookahead-slow.svg b/docs/img/lookahead-slow.svg
new file mode 100644
index 000000000..fad4a6d9f
--- /dev/null
+++ b/docs/img/lookahead-slow.svg
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="97.22496mm"
+   height="32.550285mm"
+   viewBox="0 0 344.49789 115.33566"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="lookahead-slow.svg"
+   inkscape:export-filename="/home/kevin/src/reprap/firmware/klipper/docs/img/lookahead-slow.svg.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4329-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4329"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.15"
+     inkscape:cx="3.4198125"
+     inkscape:cy="101.26451"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1091"
+     inkscape:window-height="588"
+     inkscape:window-x="149"
+     inkscape:window-y="422"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     showborder="false"
+     inkscape:snap-global="false"
+     showguides="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3436" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-135.22429,-249.96955)">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 150,250.23455 1.06383,102.12765 327.12765,-0.53192 -7.97871,5.85107"
+       id="path3347"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="434.04257"
+       y="365.1282"
+       id="text3349"
+       sodipodi:linespacing="100%"><tspan
+         sodipodi:role="line"
+         id="tspan3351"
+         x="434.04257"
+         y="365.1282">time</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-313.86618"
+       y="140.27856"
+       id="text3353"
+       sodipodi:linespacing="125%"
+       transform="matrix(-0.01601372,-0.99987177,0.99987177,-0.01601372,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3355"
+         x="-313.86618"
+         y="140.27856">velocity</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 150,250.23455 -5.31915,8.51063"
+       id="path3359"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.62366331px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 179.63013,351.45141 16.05677,-60.94328 43.25999,0 16.53759,47.11348"
+       id="path3361"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.7558428px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 254.72406,337.27551 22.65101,-77.77178 43.89917,0 24.69858,91.73948"
+       id="path3361-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.25000095px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="195.45749"
+       y="286.52051"
+       id="text12656-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7078"
+         x="195.45749"
+         y="286.52051">move A</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.25000095px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="280.5639"
+       y="254.60564"
+       id="text12656-9-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7080"
+         x="280.5639"
+         y="254.60564">move B</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 74.333855,283.02668 -147.83244,52.19984"
+       id="path3514"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-1)"
+       d="m -79.633985,251.6122 154.13499,31.81455"
+       id="path3514-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.25000095px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="36.7374"
+       y="252.31848"
+       id="text12656-9-1"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.96753827,0.25272454,-0.25272454,0.96753827,0,0)"
+       inkscape:transform-center-x="-0.91382951"
+       inkscape:transform-center-y="-4.9145266"><tspan
+         sodipodi:role="line"
+         id="tspan7074"
+         x="36.7374"
+         y="252.31848">move A</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.25000095px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-126.26086"
+       y="304.35226"
+       id="text12656-9-8"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.93839918,-0.34555314,0.34555314,0.93839918,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan7076"
+         x="-126.26086"
+         y="304.35226">move B</tspan></text>
+  </g>
+</svg>
diff --git a/docs/img/lookahead-slow.svg.png b/docs/img/lookahead-slow.svg.png
new file mode 100644
index 0000000000000000000000000000000000000000..80450e09e6db2121a6175e0cb0174eab732d76aa
GIT binary patch
literal 7641
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

literal 0
HcmV?d00001

diff --git a/docs/img/lookahead.svg b/docs/img/lookahead.svg
index 4962a48a6..b5c3df789 100644
--- a/docs/img/lookahead.svg
+++ b/docs/img/lookahead.svg
@@ -26,15 +26,15 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="0.94"
-     inkscape:cx="294.7319"
+     inkscape:cx="116.54041"
      inkscape:cy="45.708959"
      inkscape:document-units="px"
      inkscape:current-layer="layer1"
      showgrid="false"
      inkscape:window-width="1091"
      inkscape:window-height="588"
-     inkscape:window-x="107"
-     inkscape:window-y="116"
+     inkscape:window-x="149"
+     inkscape:window-y="422"
      inkscape:window-maximized="0"
      fit-margin-top="0"
      fit-margin-left="0"
@@ -55,7 +55,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
+        <dc:title />
       </cc:Work>
     </rdf:RDF>
   </metadata>
@@ -110,11 +110,27 @@
        id="path3361-7"
        inkscape:connector-curvature="0"
        sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 262.35192,299.34775 0,54.25533"
-       id="path3412"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.25000095px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="200.77664"
+       y="286.52051"
+       id="text12656-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5532"
+         x="200.77664"
+         y="286.52051">move 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.25000095px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="280.5639"
+       y="255.66946"
+       id="text12656-9-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5534"
+         x="280.5639"
+         y="255.66946">move 2</tspan></text>
   </g>
 </svg>
diff --git a/docs/img/lookahead.svg.png b/docs/img/lookahead.svg.png
index eb822746c0dc49948976f6a58741d9da8426e27f..b40e256ce455eb759218ae349476df12c8f8c504 100644
GIT binary patch
delta 4124
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
a{~x*)=Bc?aZ5IFl002n`MNUMnLSTY4n#{NW

delta 3260
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

diff --git a/docs/img/trapezoids.svg b/docs/img/trapezoids.svg
index b4ff5faf8..541309c46 100644
--- a/docs/img/trapezoids.svg
+++ b/docs/img/trapezoids.svg
@@ -25,9 +25,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="0.94"
-     inkscape:cx="294.7319"
-     inkscape:cy="45.708959"
+     inkscape:zoom="2.67"
+     inkscape:cx="164.48301"
+     inkscape:cy="76.011989"
      inkscape:document-units="px"
      inkscape:current-layer="layer1"
      showgrid="false"
@@ -55,7 +55,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
+        <dc:title />
       </cc:Work>
     </rdf:RDF>
   </metadata>
@@ -106,7 +106,7 @@
        sodipodi:nodetypes="cccc" />
     <path
        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.7558428px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 263.83557,321.45597 11.41184,-61.95224 59.85662,0 9.80496,28.97352"
+       d="m 263.83557,321.45597 11.41184,-61.95224 59.85662,0 9.80496,29.88826"
        id="path3361-7"
        inkscape:connector-curvature="0"
        sodipodi:nodetypes="cccc" />
@@ -118,19 +118,22 @@
        sodipodi:nodetypes="ccc" />
     <path
        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 264.47958,319.56052 0,31.9149"
+       d="m 263.86975,321.69491 0.37453,30.52957"
        id="path3412"
-       inkscape:connector-curvature="0" />
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
     <path
        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 343.73491,288.70946 1.06383,62.76596"
+       d="m 345.25947,289.31929 0.14909,62.46104"
        id="path3414"
-       inkscape:connector-curvature="0" />
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
     <path
        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 222.45831,289.77329 1.06383,61.70213"
+       d="m 222.45831,289.77329 -0.0598,62.07666"
        id="path3416"
-       inkscape:connector-curvature="0" />
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:20.00000119px;line-height:125%;font-family:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:'DejaVu Sans, Normal';font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;"
diff --git a/docs/img/trapezoids.svg.png b/docs/img/trapezoids.svg.png
index 891a4715390430e0f698e10a390fd9a0f1810519..b9f1090dab5de2e1c977d33f080f6f4368720ed5 100644
GIT binary patch
delta 4546
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

delta 4682
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
KS=O23lKu~vVZc=Y