From b2314a4f8799574dc42380417b4a943ff98ff6bf Mon Sep 17 00:00:00 2001 From: Pomax Date: Thu, 27 Aug 2020 11:36:17 -0700 Subject: [PATCH] error-only for http-server, better parameter parsing for sketch markup --- .../aligning/{cubic.js => aligning.js} | 23 ++-- docs/chapters/aligning/content.en-GB.md | 6 +- docs/chapters/aligning/quadratic.js | 59 ---------- docs/chapters/arclength/draw-slices.js | 2 +- docs/chapters/arclengthapprox/approximate.js | 2 +- docs/chapters/boundingbox/bbox.js | 2 +- docs/chapters/components/components.js | 2 +- docs/chapters/control/lerp.js | 2 +- docs/chapters/extended/extended.js | 2 +- docs/chapters/extremities/extremities.js | 2 +- docs/chapters/flattening/flatten.js | 2 +- docs/chapters/tightbounds/tightbounds.js | 4 +- .../2a6c6fb5527e3c00c683136a74075810.png | Bin 14041 -> 0 bytes .../2bac71234aed2bca2686fdbce7dd78d8.png | Bin 0 -> 12825 bytes ...g => ed3e2ad3961fbf9e9e5bc951f1d79302.png} | Bin .../0d7138b99f5986332a050a8479eefa57.png | Bin 0 -> 10248 bytes .../0e2627e80066b53966050764aec146ac.png | Bin 9807 -> 0 bytes .../457d2450a6a7f786328e2282d6613cf1.png | Bin 10276 -> 0 bytes .../475547c773a7279dc037c9ced2c8c6dc.png | Bin 0 -> 10589 bytes .../580c33f599b70de44b17c546098508aa.png | Bin 0 -> 9833 bytes .../72c05323cfc7d739acad1cd969be7b72.png | Bin 10612 -> 0 bytes ...g => a040f6b7c7c33ada25ecfd1060726545.png} | Bin ...g => c270144cc41e4ebc4b0b2331473530fa.png} | Bin ...g => e2c621442e98e2cd20af7efe1cfb041f.png} | Bin ...g => f8989a62ebec9d6f123291c146caab5b.png} | Bin ...g => 35d69b33228ae64221385047177b67a5.png} | Bin ...g => f7490a1c523d4dc8772b621b4a61fdd4.png} | Bin ...g => 44242f6a6be718bea46292369d509520.png} | Bin ...g => 62d7ef11f60acde82868424364a477e8.png} | Bin ...g => 9331dd83c72b233190eaca1cfcc169db.png} | Bin ...g => 391a61142c56b79260680aefb08cd9c4.png} | Bin ...g => baeceec6e1587794b8b275a90d5d85e9.png} | Bin ...g => 05ff4df8b73ba25dffeb42f768e0e9c4.png} | Bin ...g => 6d246f1c53e40bd5156ef50c4046db51.png} | Bin ...g => 3deec756c96e53127cd1d615c61043ae.png} | Bin ...g => e2bb7113d5cda2e3fd29bbc54fbe8841.png} | Bin .../387f931043aabd6c467985c568482636.png | Bin 9599 -> 9921 bytes ...g => 419415bee6ffd7598c035c42de09a94f.png} | Bin ...g => ccc77ae1f57d7dd7ce4d5397fe1b140b.png} | Bin docs/index.html | 50 ++++---- docs/ja-JP/index.html | 50 ++++---- docs/js/custom-element/api/base-api.js | 14 ++- docs/js/custom-element/api/graphics-api.js | 13 -- docs/js/custom-element/api/util/hatchery.js | 111 ------------------ docs/zh-CN/index.html | 50 ++++---- package-lock.json | 23 ++-- package.json | 4 +- 47 files changed, 130 insertions(+), 293 deletions(-) rename docs/chapters/aligning/{cubic.js => aligning.js} (65%) delete mode 100644 docs/chapters/aligning/quadratic.js delete mode 100644 docs/images/chapters/aligning/2a6c6fb5527e3c00c683136a74075810.png create mode 100644 docs/images/chapters/aligning/2bac71234aed2bca2686fdbce7dd78d8.png rename docs/images/chapters/aligning/{117193f78662930b6cfb204d40263796.png => ed3e2ad3961fbf9e9e5bc951f1d79302.png} (100%) create mode 100644 docs/images/chapters/arclength/0d7138b99f5986332a050a8479eefa57.png delete mode 100644 docs/images/chapters/arclength/0e2627e80066b53966050764aec146ac.png delete mode 100644 docs/images/chapters/arclength/457d2450a6a7f786328e2282d6613cf1.png create mode 100644 docs/images/chapters/arclength/475547c773a7279dc037c9ced2c8c6dc.png create mode 100644 docs/images/chapters/arclength/580c33f599b70de44b17c546098508aa.png delete mode 100644 docs/images/chapters/arclength/72c05323cfc7d739acad1cd969be7b72.png rename docs/images/chapters/arclengthapprox/{e617047054199de6b96eb910db73b3ee.png => a040f6b7c7c33ada25ecfd1060726545.png} (100%) rename docs/images/chapters/arclengthapprox/{2fefae0125551f8f8b899f14daf07960.png => c270144cc41e4ebc4b0b2331473530fa.png} (100%) rename docs/images/chapters/boundingbox/{3e26118e0f37de916bb52f17850ccdc3.png => e2c621442e98e2cd20af7efe1cfb041f.png} (100%) rename docs/images/chapters/boundingbox/{797277014fb93e37fd47f8f2fcdb3b89.png => f8989a62ebec9d6f123291c146caab5b.png} (100%) rename docs/images/chapters/components/{168ec97a7e9ba5793ad9d2e619f71cb3.png => 35d69b33228ae64221385047177b67a5.png} (100%) rename docs/images/chapters/components/{c3df5265111b12dabee757a22b474d29.png => f7490a1c523d4dc8772b621b4a61fdd4.png} (100%) rename docs/images/chapters/control/{ee31748e196d3be41c675b05200a7f76.png => 44242f6a6be718bea46292369d509520.png} (100%) rename docs/images/chapters/control/{75888dd88efe5e9c041fefd8b05975f3.png => 62d7ef11f60acde82868424364a477e8.png} (100%) rename docs/images/chapters/control/{66333ae5bfbcb51d424e5670ab53262e.png => 9331dd83c72b233190eaca1cfcc169db.png} (100%) rename docs/images/chapters/extended/{c6ac50057ea7e251a5bf11737878a23a.png => 391a61142c56b79260680aefb08cd9c4.png} (100%) rename docs/images/chapters/extended/{97a1ceb81980368d08d8d2f2e8719936.png => baeceec6e1587794b8b275a90d5d85e9.png} (100%) rename docs/images/chapters/extremities/{308bb36c8390ecfca6eed0cccfeec73b.png => 05ff4df8b73ba25dffeb42f768e0e9c4.png} (100%) rename docs/images/chapters/extremities/{2be56b901cc023ece52f001d770893f8.png => 6d246f1c53e40bd5156ef50c4046db51.png} (100%) rename docs/images/chapters/flattening/{a6cd214a7f8725430d2bb99a9da385f2.png => 3deec756c96e53127cd1d615c61043ae.png} (100%) rename docs/images/chapters/flattening/{a77519c299fce1ce95c84a1e5f7c0478.png => e2bb7113d5cda2e3fd29bbc54fbe8841.png} (100%) rename docs/images/chapters/tightbounds/{e087b9e9822e65dcc4ff7673db10e91c.png => 419415bee6ffd7598c035c42de09a94f.png} (100%) rename docs/images/chapters/tightbounds/{ed626d23d5f258a3f599e881b5f12aad.png => ccc77ae1f57d7dd7ce4d5397fe1b140b.png} (100%) delete mode 100644 docs/js/custom-element/api/util/hatchery.js diff --git a/docs/chapters/aligning/cubic.js b/docs/chapters/aligning/aligning.js similarity index 65% rename from docs/chapters/aligning/cubic.js rename to docs/chapters/aligning/aligning.js index 006f6365..4cc0d4e4 100644 --- a/docs/chapters/aligning/cubic.js +++ b/docs/chapters/aligning/aligning.js @@ -1,14 +1,17 @@ +let curve; + setup() { - this.curve = Bezier.defaultCubic(this); - setMovable(this.curve.points); + const type = this.parameters.type ?? `quadratic`; + curve = (type === `quadratic`) ? Bezier.defaultQuadratic(this) : Bezier.defaultCubic(this); + setMovable(curve.points); } draw() { resetTransform(); clear(); - this.curve.drawSkeleton(); - this.curve.drawCurve(); - this.curve.drawPoints(); + curve.drawSkeleton(); + curve.drawCurve(); + curve.drawPoints(); translate(this.width/2, 0); line(0,0,0,this.height); @@ -16,7 +19,7 @@ draw() { this.drawRTCurve( this.rotatePoints( this.translatePoints( - this.curve.points + curve.points ) ) ); @@ -35,8 +38,9 @@ translatePoints(points) { rotatePoints(points) { // rotate so that last point is (...,0) - let dx = points[3].x; - let dy = points[3].y; + let degree = curve.points.length - 1; + let dx = points[degree].x; + let dy = points[degree].y; let a = atan2(dy, dx); return points.map(v => { return { @@ -47,6 +51,7 @@ rotatePoints(points) { } drawRTCurve(points) { + let degree = curve.points.length - 1; let ncurve = new Bezier(this, points); translate(60, this.height/2); setStroke(`grey`); @@ -55,5 +60,5 @@ drawRTCurve(points) { ncurve.drawCurve(); setFill(`black`); text(`(0,0)`, 5,15); - text(`(${points[3].x|0},0)`, points[3].x, -5, CENTER); + text(`(${points[degree].x|0},0)`, points[degree].x, -5, CENTER); } diff --git a/docs/chapters/aligning/content.en-GB.md b/docs/chapters/aligning/content.en-GB.md index 0282abb2..8c1ac60c 100644 --- a/docs/chapters/aligning/content.en-GB.md +++ b/docs/chapters/aligning/content.en-GB.md @@ -40,5 +40,7 @@ If we drop all the zero-terms, this gives us: We can see that our original curve definition has been simplified considerably. The following graphics illustrate the result of aligning our example curves to the x-axis, with the cubic case using the coordinates that were just used in the example formulae: - - +
+ + +
diff --git a/docs/chapters/aligning/quadratic.js b/docs/chapters/aligning/quadratic.js deleted file mode 100644 index 63de9458..00000000 --- a/docs/chapters/aligning/quadratic.js +++ /dev/null @@ -1,59 +0,0 @@ -setup() { - this.curve = Bezier.defaultQuadratic(this); - setMovable(this.curve.points); -} - -draw() { - resetTransform(); - clear(); - this.curve.drawSkeleton(); - this.curve.drawCurve(); - this.curve.drawPoints(); - - translate(this.width/2, 0); - line(0,0,0,this.height); - - this.drawRTCurve( - this.rotatePoints( - this.translatePoints( - this.curve.points - ) - ) - ); -} - -translatePoints(points) { - // translate to (0,0) - let m = points[0]; - return points.map(v => { - return { - x: v.x - m.x, - y: v.y - m.y - } - }); -} - -rotatePoints(points) { - // rotate so that last point is (...,0) - let dx = points[2].x; - let dy = points[2].y; - let a = atan2(dy, dx); - return points.map(v => { - return { - x: v.x * cos(-a) - v.y * sin(-a), - y: v.x * sin(-a) + v.y * cos(-a) - }; - }); -} - -drawRTCurve(points) { - let ncurve = new Bezier(this, points); - translate(10, this.height/2); - setStroke(`grey`); - line(0,-this.height,0,this.height); - line(-10,0,this.width,0); - ncurve.drawCurve(); - setFill(`black`); - text(`(0,0)`, 5,15); - text(`(${points[2].x|0},0)`, points[2].x, 15, CENTER); -} diff --git a/docs/chapters/arclength/draw-slices.js b/docs/chapters/arclength/draw-slices.js index 4a157ea8..aec3ccb2 100644 --- a/docs/chapters/arclength/draw-slices.js +++ b/docs/chapters/arclength/draw-slices.js @@ -1,5 +1,5 @@ setup() { - this.steps = getParameter(`steps`, 10); + this.steps = this.parameters.steps ?? 10; } draw() { diff --git a/docs/chapters/arclengthapprox/approximate.js b/docs/chapters/arclengthapprox/approximate.js index 801131ff..0516f958 100644 --- a/docs/chapters/arclengthapprox/approximate.js +++ b/docs/chapters/arclengthapprox/approximate.js @@ -1,7 +1,7 @@ let curve; setup() { - let type = getParameter(`type`, `quadratic`); + let type = this.parameters.type ?? `quadratic`; curve = (type === `quadratic`) ? Bezier.defaultQuadratic(this) : Bezier.defaultCubic(this); setMovable(curve.points); setSlider(`.slide-control`, `steps`, type === `quadratic` ? 4 : 8); diff --git a/docs/chapters/boundingbox/bbox.js b/docs/chapters/boundingbox/bbox.js index 727aeac6..e47d084b 100644 --- a/docs/chapters/boundingbox/bbox.js +++ b/docs/chapters/boundingbox/bbox.js @@ -1,7 +1,7 @@ let curve; setup() { - let type = getParameter(`type`, `quadratic`); + let type = this.parameters.type ?? `quadratic`; if (type === `quadratic`) { curve = Bezier.defaultQuadratic(this); } else { diff --git a/docs/chapters/components/components.js b/docs/chapters/components/components.js index ce0d64f9..38fb5e48 100644 --- a/docs/chapters/components/components.js +++ b/docs/chapters/components/components.js @@ -1,7 +1,7 @@ let curve; setup() { - let type = getParameter(`type`, `quadratic`); + let type = this.parameters.type ?? `quadratic`; if (type === `quadratic`) { curve = Bezier.defaultQuadratic(this); } else { diff --git a/docs/chapters/control/lerp.js b/docs/chapters/control/lerp.js index 3152dcd4..64b69f91 100644 --- a/docs/chapters/control/lerp.js +++ b/docs/chapters/control/lerp.js @@ -2,7 +2,7 @@ setup() { const w = this.width, h = this.height; - const degree = this.getParameter(`degree`, 3); + const degree = this.parameters.degree ?? 3; if (degree === 3) { this.f = [ diff --git a/docs/chapters/extended/extended.js b/docs/chapters/extended/extended.js index 88676033..ab8118bd 100644 --- a/docs/chapters/extended/extended.js +++ b/docs/chapters/extended/extended.js @@ -1,7 +1,7 @@ let curve; setup() { - const type = this.getParameter(`type`, `quadratic`); + const type = this.parameters.type ?? `quadratic`; curve = (type === `quadratic`) ? Bezier.defaultQuadratic(this) : Bezier.defaultCubic(this); setMovable(curve.points); } diff --git a/docs/chapters/extremities/extremities.js b/docs/chapters/extremities/extremities.js index ce4dd17e..ab683fe1 100644 --- a/docs/chapters/extremities/extremities.js +++ b/docs/chapters/extremities/extremities.js @@ -1,7 +1,7 @@ let curve; setup() { - const type = this.getParameter(`type`, `quadratic`); + const type = this.parameters.type ?? `quadratic`; if (type === `quadratic`) { curve = Bezier.defaultQuadratic(this); } else { diff --git a/docs/chapters/flattening/flatten.js b/docs/chapters/flattening/flatten.js index db5ab602..66292fa2 100644 --- a/docs/chapters/flattening/flatten.js +++ b/docs/chapters/flattening/flatten.js @@ -1,7 +1,7 @@ let curve; setup() { - const type = getParameter(`type`, `quadratic`); + const type = this.parameters.type ?? `quadratic`; curve = (type === `quadratic`) ? Bezier.defaultQuadratic(this) : Bezier.defaultCubic(this); setMovable(curve.points); setSlider(`.slide-control`, `steps`, (type === `quadratic`) ? 4 : 8); diff --git a/docs/chapters/tightbounds/tightbounds.js b/docs/chapters/tightbounds/tightbounds.js index 6382a591..46496607 100644 --- a/docs/chapters/tightbounds/tightbounds.js +++ b/docs/chapters/tightbounds/tightbounds.js @@ -1,7 +1,7 @@ let curve; setup() { - const type = this.type = getParameter(`type`, `quadratic`); + const type = this.parameters.type ?? `quadratic`; curve = (type === `quadratic`) ? Bezier.defaultQuadratic(this) : Bezier.defaultCubic(this); setMovable(curve.points); } @@ -62,7 +62,7 @@ translatePoints(points) { rotatePoints(points) { // rotate so that last point is (...,0) - let last = this.type === `quadratic` ? 2 : 3; + let last = points.length - 1; let dx = points[last].x; let dy = points[last].y; let a = atan2(dy, dx); diff --git a/docs/images/chapters/aligning/2a6c6fb5527e3c00c683136a74075810.png b/docs/images/chapters/aligning/2a6c6fb5527e3c00c683136a74075810.png deleted file mode 100644 index 28ffec2308eeb32faef8fa3effc18420ce1681d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14041 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 diff --git a/docs/images/chapters/aligning/2bac71234aed2bca2686fdbce7dd78d8.png b/docs/images/chapters/aligning/2bac71234aed2bca2686fdbce7dd78d8.png new file mode 100644 index 0000000000000000000000000000000000000000..bb829d246d56da2c74699ef1c5daac7731c1d554 GIT binary patch literal 12825 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 NB(EZuf78hC{{SKtDC+9}X! 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 O5X$lza^*;i=l=z78=S%b diff --git a/docs/images/chapters/arclength/457d2450a6a7f786328e2282d6613cf1.png b/docs/images/chapters/arclength/457d2450a6a7f786328e2282d6613cf1.png deleted file mode 100644 index ef63bc85602fddb06d9d48fc6aa9884f922d2506..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10276 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 F|1ayDk~;tZ diff --git a/docs/images/chapters/arclength/475547c773a7279dc037c9ced2c8c6dc.png b/docs/images/chapters/arclength/475547c773a7279dc037c9ced2c8c6dc.png new file mode 100644 index 0000000000000000000000000000000000000000..dde58d8076eb0f8c1ef45f871e86edd7ce8513bb GIT binary patch literal 10589 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 literal 0 HcmV?d00001 diff --git a/docs/images/chapters/arclength/580c33f599b70de44b17c546098508aa.png b/docs/images/chapters/arclength/580c33f599b70de44b17c546098508aa.png new file mode 100644 index 0000000000000000000000000000000000000000..7ecf5fa70d9b26de4ec8a96fe51afa82c9c7b2be GIT binary patch literal 9833 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 literal 0 HcmV?d00001 diff --git a/docs/images/chapters/arclength/72c05323cfc7d739acad1cd969be7b72.png b/docs/images/chapters/arclength/72c05323cfc7d739acad1cd969be7b72.png deleted file mode 100644 index 5a7791898953db9f0f435b9f0fc70496364f5962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10612 zcmdsdpFAxK0AK9PN%ei@h_{jFb)an4U&}jM^(49y?J-9mlyZ2qsd-%trt?c1Tx*qmW&NW>kH`BDiV9D zW!3Cz_*#F|#rKpG-n&#+O32vOxfod*V~hPE#GMXdIk}-0ZBlyCnKr=RyLshyI+`?) zd~h?6+`^U2WhPn35a#zvtc4b@90l#|@pDGJw*gFfvH`D3esJQ56^ZqUqh+K2UwYUn zi$D@1E{VtgEEkBFtUT&x4{mZhdZMJ{+UP49YqvL61jiJ=$B~_w+mlQ2}j|PFr zlp9+JMfjktlv?2W z?Zv)CT#{ROKXlmP?%F`Lnyoo z(FaR$3a>|-PV59+D`g?sgez}!ffJy!^Kfx>P-KYtojuy1Lqya_+<9 z`L;)MA*Tn6;VkGJ0FK7TnQ-y55tN(mbn@Eb}Gu5v$-$jM!0)TqF{zxPDL*6?N+ zeEiw^zTQ;J)q6@`-PC`oDugV2GOZqiXCf7K&L2Ha(Y_omA+@wTe`hntkRjq-a$)Zn z7a#gp!_O~qv=mC3E+Cf&iO$#5)Lh@WbVmH*aJ503tk7Fte6Z=MHdYdcY+5{Rjp4*` z*B5&-*BI0DA9Ai%)fY}5AK$T`rbJEx*2kJ!1U+5G7^Z!6h$;f5Kt5A#zVL9~)w8;8qU|$hsa`WP%JZ^K1>A(Dwh|BR>`5EzI=!M;% zpkfIv*9^}XnQsp)by#w6)r<(JCo-vBNA$+IzVr35bvalla8Bc;Go?Dt3kZN=lER;( z2CtkRwBt)~?6#AO+#cffM9%h%WP78b&q$h>49O>PJyoWo8kUlh%GPPXnwr8l+MS|J zN_h?Yy1%O%jze9~=~N_$jO-~THzA-jL=4j=T;aaE7p%2d?`ZX8Jl(E&f``|&K;0{= zlqH=YAe&Sbq*Wu}xG`W}PQ4xigs+mwa`cvE7vC6W^P!Myz?h~|Iakv7`dm-8RK1+f znQ87DR-bfoh!8acL&&19L2o>xXVuT2qXI)Z#kx(xtU6J7*0YIed^m;9X_Hi@R1x}` z#J88Llo4cCFR39mUGVx4c#P_39RiI>qaw1<%uG3Q2`MZ-^qog`HckY|c&K4lqEe&X zv+~s(n7qWGY$6e_Congf7D$X)CZn>YG z=;UO$`RHWU!fx^-Fj~pgZIzHPKc!r{r8U*qL{`*qC0T~%edcaBE)Bkbeq@)Q_jpT5A})1(k%eekAD6f0vkSHZo6|~ zJU_?MhK;HQW8t}PK}-WT+877dMWAVIfH`#Ye+r_*4wzCWMpw9P4oV33qh`k;h9+Il1F z-5{$5Ffysq%#_|OqmBdUPlLQcD-ch9lXzRO=k!DEgi zP8-7JLnFO^SLo@Sie!LQ|5jlDxZV^L@Te9Y27c6Cqi5&f;4s}9IXF7I3o;STyaOKi zo`8}P_S1C1>t@eO*2MB(xW&Z1f4I!EjbVd72=kU&sw+iux;vn2TKztp5AQ;>;Y8;=vet+rbj40T##smaZ+B@l8dqA%CE=$g@9Kp%Q(;JrTB=G~8m-Ch7)mq`xMg{EP8USzDcKg>(`KVLoG zV`X;G$rd{pD;Tt+Q@B@W?}u{Yq-fSzkfjSmcEI8C2!< zg`mUQo5{+|d{Y_h^4v8+b91=UzEI3}6qx-nO^MIFRG;{ofWmOK)Bdi1Q&U=2K_I-` z({Xc%8;g9VaL3_shtSaP+?MrtV3h zArH_WNc;P3EZS>b^Ub!tn~scl*&4;guZS*^dgJKF8xCm7S3`V@v}#0XWfF~N>wh=s zCjuKNRVn;(dDxB5e$URrVzIM_SGqEIc5oo`WeGn+$o*KoAK;q@0cGajMAn+E`B_NV zpATwfm+VZcMI9^MwyxZsk7QDLZ&b3y$fcnbCC>OUk+tu)MvZZ~z79|c3B@!v^6EqZ zLaCRRZt4|jA15mov>`a`F)8SYiE1FnK#rrkay;2cWrg&KZwd$D@$UYKw_mUXPae zP(?jmvVly|%xDpZuD+5MGB<9jbU_7^t7HB@tsUR-0K>m7FEw5E(|~gD)~H4$3*3&d zi&YA7PBu5a4#f2>vVWQOZ>W@O8;21+C?XiBf@5Q|+)rK%r11v}dm8ojmWKf!EWyRa zMMF=4K@H^p0aj7Mo?u}STwbn9mTA?zfxwypuT1!~cV2-K;e;v;Hq>e9rj>t^nwk|% zX6xN)=;&I`jUSif3l0Q=|%TCRr-|3dg8kW`<#q6u{*b| zu-=!c+~Outo{L7{wDX?A*H;u556{5T2OK9XFOS}8W(^We;ZR0X$)MkYJ5f4mxFF<< zi)Y}iqx85UffBO?%I}^J~$sxS;HhS*@(fO5Hug!opc_jWo+MA6w>xn4VZB032D*`mA&CShaQ+X1i$W1G0 z+KY4=-nzKB>@K#`_8$NwA#3&~O=Ow&3zb4<(y#&PM@;zj=~d$I-;7#53IG76=9}M{ z4XOTeiWy#7;{`PWJuPjrUb9Qd?n0FW5UL`fYrCuf*x|GkXK+C#x3b$+LI?|{fILu(MUA;wYd(H? zEQ4)jg>FeMK}?*EH8(edLxd{u0W1H-+l7?m^mG)_JExd{fX=Du@8zs>EidwA3LoU0 zF4*E3VtfqnCBDbfF7Hg79!yW?`)>7jAP)?Vx3lR9-1SV@+aKQFY(vjvMFMq1~DeXH~uA|uEc1=vg?pNb@eM~9*1OhvC zmy=tbcOBoXt9@#TINc>+7ISd8o@8UQ+mye)JwM-maCLf0Pk(u1TU9MZxw@~%pn+v% z{FaI7?gpFEFPQ|NHKolbqrCL+@N}Jyw!ZYXKf^IbRBmio8mC9i2um66pkKUy6(UeBbmRNS5%3f)C%t z3E6aujtZDCrzc9kC^y(Zc&sk<5iFfZ!X8eUFG&+QZRYp@fKY!Kt6n8`*+1RvjU!&m zC8VkuOx;}GfMc1NnSs|RW)|pl!k&bMYNd3yXBtQw8`==upp~OlH<#VRLXAo#V6u`~ zCcO`$!zQ~^)n$4&!U~yv-HhVbYMZ<^x8Ir6?ju2hP`-*rZTLj7$-%TlwYaN7Po{Q= z`hCIp_t0KrKmWVK!=!+O1bApb^O<89GK>t``u}& zHuW#F7B7!hwdyQ5!*r{t7N;9*F$f70y^cdufqCP2WXq;-TLu*ulLTWwlu1xz<5*e- zz9cPpXY#kfVMMJZhNw@xa2ymwZt7)81>k+m$);=exUlI+)-a=z7~*{=v8lUo+%IQQ zdLEvjT*yP}tb2f@dSymuqrJlo`q9QumN;|*Sz_)T9T1)TB6T&HhXw6dc#Vwq$Fu$C z+QeF#So-rcIf(hHs9g_&9M5)^=Z0t;v=m411)N`p7Z?A}5-axEZx$APMM}n6HFStn ze2mq?@s8=5;3jvjh@Qx1OL7Qt6I36iUIt2`+kVdrWzXy@7os8}V0tR(D!+lKgele( z@Y6X+d^sZ2|8oP z?Gay9#r3m#o#XrWwg@u*MArp(kmyliyO}5BGa$VrC0s&OLXHrXZTKunI@JMfdX07| zBO}I62m2KuX@IoU0-zgX=M!?;LJ||hvOn2qn(L!I9avn1R_H;LvOXY#Bu8ka4y#E^ zON+y9>2o4$oU6;R-{GO6e5S|%kpboifZ|X3H<#X(`V?t=)lkbxwk@vc5iS{-sWxwP z-J# z28q7!ySpJW`Sf17Kk;g;`9iU*yd1#sandAPoZqu-8$ChE$k#pa@;HvTW_;3g%gG_f zl|TA(^QZvw);{u!Y})_*@s^DL7$YWz=qv`Z6`J#3`-90$9cff~c{qlFwmzkSm+Hz6TETJem(7(GG2uijbw zvt!bz@0NFw4WMXIO4ihw1z7zpk^MqRFnYuvF*)q8^X~wYgcH<;RM?)moQ!&}L4(F_ zd+dOQ=9V^-huh8)?lzv^|IKPG4>ucPtBUdr!!JCXz_`b2aHcNfn5P=K+2ah8h@B!^ zj+B2^ZEI3zPsPp64eVggW+0NSPLWNOjs>!m9J$m{O`U!vjcfy3HM+#aM37HsBrwyL zBtVM({CT>v66J_cM?2YYKdkgMPyf8;Z0lW{Yd*dpF0Q*akc?unhQp*?-5D2(NB_lA z=Yu>azQ+aJRJknaS*wRTE}0NcQ%}?~pXWJJgRMcn>%n9Cc=bmI+6$rVSnHj4zrDno ztk_edj#KQ2rCr^E58`o6)8aIVC-6GU$;lm^XZ$%{U+fbOd-dNJSL)UCNJ$XX+BPAsV zZX|(qceN=^M!vVb&`K*WuU&|96Dd$VC?#%dSy=fBvXcH3N+zT(40o`R>Ha3t^%5Cknc14lHYJ49gZRTTj zjJI??{71jPkHQF$3$7$CQUD#N#vt&kx84g4A%+d58+lyw!w`gg+w$?oj629L==@jwX={2M)zY%*FlHoCUm>Qps%k0K zwr#aAQ!*hcQ6zGPE4t26=X#+{`&2eNBy&{Xv zBXkSi1oPOWMaHQ}X*bxEJLA9A|50kXvWuzL?9)eNP)o<>))Fs;HP`AHcZRql7I12N zWIC2^@+_6d`t{9)?fP8PE7l-h0bp30lbPpx?LFP=C?Mp<(8~4YDQ1gdzJ5>6&hDzL z99tLiMOEyRzm)W^?v-xp%Qd|6akLoj!3w^)5;YBU0;aw&g2n#GVFM}=ksw+b$>oCw zlnn=KWW(R@Z#XKHC15)fGEy!0iLvXa^sDZ_Q4kNGMG;+E>GsFvCKnSVV7^ zhE}>oN2;>ZZy6adGd5C-LPKBVLQs!aqvJwC(8dL#I?&Kx%dPedUao}G;j@IaM6!Wp zyg7AM{}HnG*=3V4zdC!Fq*h2zVc7kKTrE5lbO!L?DjFEB7Pn|@-a z3pg*AR_+*5>rq97bi}{-FK+zibnga*>#Gwz2ZuU>ugPXOqgz~J-sF6@mrtONl{vtk zqlnYqDZsYP{8P_jkm`b)hd_tEXZp)S=URzc|LPBjA4iyZuL>3(%2^Ced_8ZS+ zW$;h4VO-F&4g2$l&&#VV&-I|m>+mB#(B_dO=CL)NjEqd%gO9M@uYZMNffgWqx{Cf# z&O$2FnS>U|iFQpk)ZCg=M?O^rGZ%aNT1& z_LGIU%*SY0Sj&^SEq}n3RCC8cvb%YBb{7WX1*5@&7UHv53%5Tz5VuN!yk1u_SFmQA zmwX0axe(7evPxln$FS}5bb$#d#;0(hjxP@by=B_mg7r4@QsV{A)%9%h)kb@@QKvni zo+ak3;I^@uzuGCStc{`$u!zW!-QCTyn25ESttZ#e;03tLpixl`uXbQz-D4CH*<(;E z!9_v!upoz^sgc}f@+Yg6s;7_UPA(y4lSf9nv|+t5wY92=Y{cs4fAs%rlUB)qydtTk0`d?%YW6}GhG%%U|G zxC+y-B;V%e;21sK-wVsx(ron*gu~$=4Hv77s0Vq{?>_XD_gB1@@LQ-_sn83|Q(A7& zFnR5|ue+9NdoOW!T{m52$a;Q$%=jhdg2X!6unr01cFvUBdwRItwpfhW&m=l>n@AY$Ro6hzAY>FGPGXoi@_x`3FO87!9e1mt$?Q1%1k!zG6@O^!@h zG~S}eG!BkgGIuFzR}gpJ*TJAPQA+8HeYrIhPb!0PMrj)gt&yJb!YXG3ho4{D=2Azi zYAHO{cRtS0P$D0H$D*%)q}+9P=>9^W!}=Q@!knDny)T9`u~+|uvXTk^N`yq` z5c62kP*Ch^>gX7MrQ_|zr80<@`noy1Xx!nq4wj^b6DcVFa#91W62D|E4s^m=*gsW> z5fwgDo*n3ZbavjaT%X}3C2Ji{n+hc=Iq_=@TU(5NZS}l zjtdA{SQ^d!hNP@KcA-p07N%S=7u?u1QJ`9k{f_(Dm1g8Ct^P?ULPD$xNn;b3HCA?Z`T{YC_f))uUMynZF4vi zqJ-bl+FFyIF|8naCvIiM0-EG=E$(qiNyI+a+w_U-2J(@wxk1Lo2aBfM1Oj{d?3wVz z)Q=yp$jHg7>+6SF6Mo2?R#()d!e(blC6qYt5hK|spe^IQU;R}pP`CCQPDVxsi2>@< zr%2n)UCYbMw`Y?Ej}(T|1-ZU*vQ!yX|=d}380I$%)_yA?oOX7E= z+Z;+?MO3zbJ=qvU^18p;yu7-q2D*umjfsiTZE=eMjU)?rStt}rL@gPy)R(~guR^S`>g!-@ETWa=y@zwXV{ zX@bJeX-g4at^+w*=>|VQ2d!!^n{IafmL$OI(!s&7@BIlSlF!4P>-EKf!bFK$lkWrA zP=w^fjN%6T?)|rsr6vw8+g;H7+j9C9;aixOci7L~ZX!58KQC;ot*J>2qWVf_AjTgU zO!PvR%k1y%ue|(x(}B1N#O1K*SN-6JIpSbUlGr0>RaJaCIyyc+zA9rF7Lax_pZ$vC zi5agj7d?I9=6(72HiLF8gMrskx8ry}lwG02?^$N5%juSqH0WN%oK0IEmpC8ox|`lV zM38VLiTaB4_V(6VPDWjwY#JLK-yW>`+W3C__)#{QbG?Z}NLaW=Pu(SYxZL?p;Dk)j z1rrq&6`hFfcJ7quTs9{+_t69a>p3cg@@XR8DO+1x5eJz# zouKdbLkU4wqHm9^AleNI*i7HS9e;dtd{PoKSgps?Oi$|{jF37>lYxZz|N763w zv+u{1b1zHj@q?LsaobS!T z5?OUX*~wyPXsG+kDHKTB^lFaF))ySj%P<1U%3KQD-1y~_?(XH~1){+ehL%1e9}kSA+i3S4%rlgJ znn+1Q+2r~YS^0tFkyy2B-v|k%-CP`u|8hnU`GJHf1t87J+S;GOOdo0Bkc?pZc+hsk zmg#fN_=p>A-l^dDDvfrAB9}`j_13eJ;J!s7dnZ@9c3lpzGd_NPr3M>4Dk`c+)q+{n zkei5&jSag{g>(XwZo5zVbdA|~p#tUg>2}w}qVF((FU~$1dgHHO&CNmWWEmPBzWO(Y zIv_Y$1+?_63eDg(W(toi$I;0ZX;xDavFZNh{IoGiTT`YFo7CIj8uobu$}Slb6B>Z| z_>9V6)If8-JKY5~4vB~`=?){9mLIk{+nJ!Dp?O6~so>=$WN&X@rr-Mdze0t~v36fy z^>Xd*pqHfjQz}&r4ZhiS2K8*52Uo}>o=m{x)()4u@Y!^UNl8f`?Ho8(X6l9MticAy zPaSxwRl7wcLSxYJ^3c#pfPB3l>if3e(NbRtpO9UDAp27=r%x%lklQO?UtfF)Gde ztcR)3_gA(ON}A0stOqS8SU?JodIQD(kF>Oi{Crw~lzDl1Ee=g#IbehC&5Ysw`DO#R zH1GkIN% z0ep#G7mu&N(LDBpbqmLFh=^dVo)=&REfZ51_y)q{gII=korV2sPh^B|yMqXrBR{R1fcz$}HW!Dhbia{6*J^U1We?*kcivuW$@QBz%o0e5sm11|{E z!<@s8I%n+dw|?pAWim}z8b*y(N4%ANc4* z2|-0gg=(2*43k>PNR9+X3a{-Dh@MkbhA1EanC#CrJ$?S%0bKU6(lBz-uKm_An96JK z;!*&@If>{$R-JkifE1u**$&sq0{)W)8Upc*DnSKusmk?MT2|K921%9Rgic!{$jr>l zWo2bsBiUUTz8ULIR+ozvrEzh1U{Y@a;B#tf%0y7O6gD$GZGUraJ=0*DnTx5_8l}a` z)vR{_bPEPAPe6RQm6x7GL*xP|Y0o++# zTKdo5A2gYGPPaz=0r1!_{YK`oo&jxe0x&=Vcd|sGg`k-zE+KIQn$VLT!oOVh!hn&; z%gZ|<;E^CtK^bYZHwL^Yw0fM4Y&(GnM?{f1e}17b&C1;T2u4FT6#x07VmknqL5@-5 zr7u9+Y!I$>x%shJLv9$uX0GugP%fwi--4`SOdv{sePWUWV7OQydaK=U^`ibP1?};% zn#G<3Cbb-;T*>MB>UUoI`}@i?O>ZEcAghcapXU1ixP*9*tw&0aM-)#1?o=WnNlD0y JSBQP_`+ug<$z1>d diff --git a/docs/images/chapters/arclengthapprox/e617047054199de6b96eb910db73b3ee.png b/docs/images/chapters/arclengthapprox/a040f6b7c7c33ada25ecfd1060726545.png similarity index 100% rename from docs/images/chapters/arclengthapprox/e617047054199de6b96eb910db73b3ee.png rename to docs/images/chapters/arclengthapprox/a040f6b7c7c33ada25ecfd1060726545.png diff --git a/docs/images/chapters/arclengthapprox/2fefae0125551f8f8b899f14daf07960.png b/docs/images/chapters/arclengthapprox/c270144cc41e4ebc4b0b2331473530fa.png similarity index 100% rename from docs/images/chapters/arclengthapprox/2fefae0125551f8f8b899f14daf07960.png rename to docs/images/chapters/arclengthapprox/c270144cc41e4ebc4b0b2331473530fa.png diff --git a/docs/images/chapters/boundingbox/3e26118e0f37de916bb52f17850ccdc3.png b/docs/images/chapters/boundingbox/e2c621442e98e2cd20af7efe1cfb041f.png similarity index 100% rename from docs/images/chapters/boundingbox/3e26118e0f37de916bb52f17850ccdc3.png rename to docs/images/chapters/boundingbox/e2c621442e98e2cd20af7efe1cfb041f.png diff --git a/docs/images/chapters/boundingbox/797277014fb93e37fd47f8f2fcdb3b89.png b/docs/images/chapters/boundingbox/f8989a62ebec9d6f123291c146caab5b.png similarity index 100% rename from docs/images/chapters/boundingbox/797277014fb93e37fd47f8f2fcdb3b89.png rename to docs/images/chapters/boundingbox/f8989a62ebec9d6f123291c146caab5b.png diff --git a/docs/images/chapters/components/168ec97a7e9ba5793ad9d2e619f71cb3.png b/docs/images/chapters/components/35d69b33228ae64221385047177b67a5.png similarity index 100% rename from docs/images/chapters/components/168ec97a7e9ba5793ad9d2e619f71cb3.png rename to docs/images/chapters/components/35d69b33228ae64221385047177b67a5.png diff --git a/docs/images/chapters/components/c3df5265111b12dabee757a22b474d29.png b/docs/images/chapters/components/f7490a1c523d4dc8772b621b4a61fdd4.png similarity index 100% rename from docs/images/chapters/components/c3df5265111b12dabee757a22b474d29.png rename to docs/images/chapters/components/f7490a1c523d4dc8772b621b4a61fdd4.png diff --git a/docs/images/chapters/control/ee31748e196d3be41c675b05200a7f76.png b/docs/images/chapters/control/44242f6a6be718bea46292369d509520.png similarity index 100% rename from docs/images/chapters/control/ee31748e196d3be41c675b05200a7f76.png rename to docs/images/chapters/control/44242f6a6be718bea46292369d509520.png diff --git a/docs/images/chapters/control/75888dd88efe5e9c041fefd8b05975f3.png b/docs/images/chapters/control/62d7ef11f60acde82868424364a477e8.png similarity index 100% rename from docs/images/chapters/control/75888dd88efe5e9c041fefd8b05975f3.png rename to docs/images/chapters/control/62d7ef11f60acde82868424364a477e8.png diff --git a/docs/images/chapters/control/66333ae5bfbcb51d424e5670ab53262e.png b/docs/images/chapters/control/9331dd83c72b233190eaca1cfcc169db.png similarity index 100% rename from docs/images/chapters/control/66333ae5bfbcb51d424e5670ab53262e.png rename to docs/images/chapters/control/9331dd83c72b233190eaca1cfcc169db.png diff --git a/docs/images/chapters/extended/c6ac50057ea7e251a5bf11737878a23a.png b/docs/images/chapters/extended/391a61142c56b79260680aefb08cd9c4.png similarity index 100% rename from docs/images/chapters/extended/c6ac50057ea7e251a5bf11737878a23a.png rename to docs/images/chapters/extended/391a61142c56b79260680aefb08cd9c4.png diff --git a/docs/images/chapters/extended/97a1ceb81980368d08d8d2f2e8719936.png b/docs/images/chapters/extended/baeceec6e1587794b8b275a90d5d85e9.png similarity index 100% rename from docs/images/chapters/extended/97a1ceb81980368d08d8d2f2e8719936.png rename to docs/images/chapters/extended/baeceec6e1587794b8b275a90d5d85e9.png diff --git a/docs/images/chapters/extremities/308bb36c8390ecfca6eed0cccfeec73b.png b/docs/images/chapters/extremities/05ff4df8b73ba25dffeb42f768e0e9c4.png similarity index 100% rename from docs/images/chapters/extremities/308bb36c8390ecfca6eed0cccfeec73b.png rename to docs/images/chapters/extremities/05ff4df8b73ba25dffeb42f768e0e9c4.png diff --git a/docs/images/chapters/extremities/2be56b901cc023ece52f001d770893f8.png b/docs/images/chapters/extremities/6d246f1c53e40bd5156ef50c4046db51.png similarity index 100% rename from docs/images/chapters/extremities/2be56b901cc023ece52f001d770893f8.png rename to docs/images/chapters/extremities/6d246f1c53e40bd5156ef50c4046db51.png diff --git a/docs/images/chapters/flattening/a6cd214a7f8725430d2bb99a9da385f2.png b/docs/images/chapters/flattening/3deec756c96e53127cd1d615c61043ae.png similarity index 100% rename from docs/images/chapters/flattening/a6cd214a7f8725430d2bb99a9da385f2.png rename to docs/images/chapters/flattening/3deec756c96e53127cd1d615c61043ae.png diff --git a/docs/images/chapters/flattening/a77519c299fce1ce95c84a1e5f7c0478.png b/docs/images/chapters/flattening/e2bb7113d5cda2e3fd29bbc54fbe8841.png similarity index 100% rename from docs/images/chapters/flattening/a77519c299fce1ce95c84a1e5f7c0478.png rename to docs/images/chapters/flattening/e2bb7113d5cda2e3fd29bbc54fbe8841.png diff --git a/docs/images/chapters/reordering/387f931043aabd6c467985c568482636.png b/docs/images/chapters/reordering/387f931043aabd6c467985c568482636.png index 644d0b425807b64562c8bb204405d03bc84493ac..bb2201ff623b3e7a0a790a7739aa1c0e390d3e05 100644 GIT binary patch literal 9921 zcmd^lhd-5n`2Ml?-ZCOiT6W0H$d-{LA;-)J$DWmW5*f+L$S#=`S=lQin}m!gTgWDU z_w)Jw{)q4E^=-eN&UruY=Y8Mzbzj$YKM{I2)u_nX$x$d2m4>>C0Sbl3fcz#UhAT`3 zKday`VoNPG71Sy6GqdhZJPLIdrJn~@pkQSoHe9MTq5rmcH3;*e!jIJ>kIk(S0GB`uAQQsJc&6%`fs-*qyrb_>HMgyvsU z5$5Pn%o(^|IPxh_wx{8qvGMgcLyCnXO6Yhz)Jsi%c6N3PD=UI()82h=RTMcxi07{^ zCa1A7yn};-#i=@(slYum*eivoLhOt90{J2GBz=3Zf^b=O>^ne zCFI{-UCS;Fw$9Gf?tf1kW?0$SB8J}Ro)ZzFL+RbR6*5wI$7-fADEPR(^WT7Y2P$1Y zkUjpqZu{xK>C-Hi>H05UzBC^0tZa4*HOOw!82JZnWM-mV)o3R<@hcxA%MT82MeF&P ze*gZR^_m-Bdo*X{#)fMetg^JUw10B+hmM{eUr0zOIVDAIQ)+%wFPSy7DTKsoX)upf z#>;79VR!X=h)$}+Y~}PL|HbH8^B+o%q_WzTXUku`VqYD5Pf$@&u{d17VB4EUcIM2P zmk9|$b5ewagpGqQ*qxaLv?*iL(>dQ27Gi8{!nU^D9*DE6^U=4qweiTw{foZ-K#0%z z)Go29@qF~0o|)P6@Ni<}yHisco*HNz?QzPAzF2nNY^Iz%}`kmmsJbruv0(}Tja4^2d@^Hc055__4VoF5Ng9i_; z+t~021O%L=k3gX=CXh2RF>UPa;Sv&<=E!&Awb9CV@3NVinL!$A6v}ZvZC2^Sa^T** zyC{D3YL@##Z#l^?5jZB3H9AyS1lQ05ae*sW!ctP$@bU32FqozqzK}L7hl7KI-km#Y zLmAXcnCv(6Zr3!mv}S+*Cf3!}9sR}neBzCqxw&~!x5!0CwBOtOd}4?avWNJ1h84Fc zY8`)RVpw}%$wNR$2&b8+w9uQrl;uE@ZBKJ5puMfK@}U%t8Xh6aZA39kFZ10y@`Qwh zx22^Gb2;zdZ$_7TVzEIG*VVPP+2v(&85tQLfB%+m-&o+LWuHF%&O^W2-M}@g(3DrM zI=(eAF@Yp_4kdSdu<*L-(LZT7cXxe#{h-7|W*=YQtXpqxLU6nTs;a6cHv^%(&L(y9 zBz5cGzfV(bN*$pRJU(vnw9OKdIa@19kd%zf{%CQu_zW*E@67V@q59RKavV1!nv(7C zL+Q;o%0@=ay=m7%dU~|2t*y^WO0w|q@Q_kaD3_Yo^%vd|+Fl$Wc=YIztGD;UL#GOp z=h@l3^Yim(g@kCTtE<2C_Nsb$Nyy5{(b3Tb0m|^A(ZnJmA~b33{pAat`pLqBHLH#o zOwi4AX||s5+MhoyIix*E&+BHWn3%A0aB$F`ITQKzt$>QEYPRlcd2Pw>_7x_KjEpnO zBZWwzE)BiG9&FjDsHj+ciRD4+F`SyyuWu&bzHcr^7}MCF7zi01mzEYaKW{xeI%+xm zR{v>4grbwv<=~KzyGeW3MN=ptRxQ=;3$clb;ZaePt?li+f`ZhWo10LDL!9?ZjSBUR zjEGU)a*yPADkE-!}*&|{!@d}YjK)+ey69J_w|xVb3MP`DKEQ=06H{AFIdzUvA$I-?-SI{Xja0zCu%(q%TypZ$fgH7#$w`i{U%x`u zy|M38&J?D5QZICrn2><^`}^zIr-w*Pg&&^;$etemMeiLxx^;^IxkqWk2|IlR;pySG z24Tn1%T=|tIpyVyzkmNmfJeuFy-7IZkgW``gOP=$WoU?@zP{d%iI1P3KUva+tGT6R zpuhh~dAay8pql-``jdNhSv?tYXOaZXn)?(^qaX{mSHClSwChvV(xQO0);Bg* ze=|Ex5T-#gD@BbYe@Tg|g+-=$or2q3I~5-qZQ1w)&(+;s+1XjJ{&-8vZnH)e5zs-}UMulxG_XC2s8^kN{JGE3T4mg;SI?fGk>r(^2LxAL z`u#Q4_`N03&$&4|4vr}Kz{BKK2bv?U$;Jx_ny`iD@o{!VMMXb4zK&>4<=66o7It>H z!aJn~u^ySd=`vPuwd~`^mXm)+*v+3e3~%4YtMVk6{q%5RW36&JyQ(S~o5vX=9e=*R zX5!noZ+kAa=64_1+c!0bQ6T9D8Gu>r&nnUqz2H{Oq3~~;ftZRt)U4KPHr1uRsR}!n zX;9$0F{9`-Sw%-iMpo3lD$Izc$;!H3datM0@ro!Qh5{EZ1l85a z9Pr-o&Yg37e1s4W zg91j54v`7Fb8+glEG)R08H?5FhWjp4W&D+`t*sVaFE1=kR0`#5r{E`OhW%+c|G028>lxXM0!P;zra4mO!c1L8wW$@*lr1!wiG#Eg;8&*4Xn z=U9a!3xesu8z7}H>yy<*-OGC7U#nw^iY`-f%X46{SOknu_UCAvrt3LzG~Bjs?MTgK z1n%C|el5>=$*71nAV6syCmnx8N<-5DPzH_fnKF*LsjG`TB_*XNm`_528GuTfh-^S> zIAszCtq7n&Nm)6i{=12>@l#AoIHv6xle)IHwGj!=o^pC;ARI4{P*JKE(BPuD!C>yn*<;16{X z|9YVH@L}=HH|s8I(aYwaSrG)N(^aD6@IYc&CJj9Emk>>7B#)q&k^?7uz>I7 zp6kDlv-rCl@aU2JC+8o}R#%;nt2xO5c0dfX^aOy_5psI}>Pkpfcq|{kcb9aD6n#2q za^nUOlq*r7Ih0Pw*qAYNeNy=fUihMiT{cv1e?Ll6Qc|(QtUln{lwn3sbyzoK9Sg>%dz~BPS$~aTUf|&+_Zw@e)JSD*&voS$Ld3RgyF>- zR#rKgNxVNk`!dAE#R*)zn0fJjQYQ6r9+W^UWP^bEQ+?6SJ#8S&7+YKPqG3*6 z9??Xl%Nw(%)(0upcFjNeE9(6BvLBzGkWy1KdzdPPTDoCCgW=~Hkg>3^D0b**YBsNa z|476cPs@`sNiYWV-T2-;Xt1}+M6|TD21@TM0No$BF$e1z+GP(s=pP#s*w=FK-(78j zO=v4BMZMAp(||k%m38^@WjHn<)5*e^;7lueUh#M`hV+{x1%?;*-8O(l=o=b_!nwg= zt2{t6pm%n5$|@^yz*{rt@^f=7fVTyED~FPPwQdd_@qB&Z!iA@ikqiN_Yg_ulYtVgS z)%k)O=CTYg&i?upc1F@!xOzAe_N`)PaPMCCd`%zJPL}`PIwM~zA8TN;03-R^5eIZq zEHoW<<#0+mSjkxUP}u%Qza5;`{@6m_Yc&s#@|ijM=3sqXgh{cgySrGtJ#hzC>hXze zx~#5txIPYfHem7?XTf8akI*-uM{MluFanpGl?4r$DxDtPspU`%g!^oQraeC{nK6fg zA#hQ%tGj!4Wu@C%;}xw@)Us}^W?rzVAj>iRR;>mfy<$ulp9(i?K(c9l02|=r4Rv+W za2oFD?j#|xKco(hjzkLVFK9<8rL{pR(*grwG55ji?CkV8_?7e?K!0_rF4f-5px|Y5 zXfj8Le4jO_LZ8hx77?p<%HiSR>v;xQ+1dD@SyeF@o{u#re_x-@Z2juq2fmXsa{XyP zWsO*8SC_+t`W+zr02yDtsJ~1~%BikSxof7GM-OM((|$gbD1OTfjH(LAHVlr=Km zP^OUjssPYz51gD-fLdFNvUx~z{_cAnbGy(;q`14e8Q-Kh(VhyDEwhCX1sn$F`}cQN zRu-O)jt=k0;!G0FF-DK62JD0`~beW)!GSQXJ_A3usA_s`EqkJ?m-yb~4?6AOWB z>}SrTj3Vk28btn8+PN3Nt}3VeD4>khARV7YMj{Fn#J~r^;^$2YV%4dUkreOVy-Vhb zQo$(gC%$|c%5=$SCdDoT4+TmK1AJ;@dplGc9TE~kFh~BpNDR+eN5ojyb8>PLH#CV;*B!nL0;zD!({(U%U(UNuM9E$kSf}6_91RvQ!jOv-2_aa~L+g*+L zyU>?YR743}4xz+=g|G?2hTUEBDCbuMldqNyjf_NPh(XtLd3kxgEhxy!Ate=>@>{tg z`?p6-Ku}QC+L{kxm`>kCFPoIByG(tO=n}@dx;`-~w5d_c2VM*OCQF#-^Ws1biNUQ~ zBJRJnIphOagMxw(7`E+6ZmKDlP-R1-#`C2?glf0bkdrGRq#0O2lx~zR0MF*QV<`_1 zYzzid)O~O!$KQ6atF0|;i5_cg%nF6ojy%lP))p;0`?LS-g*-FWGw9vj-G{e0nL$Ow zB_y<2J6Wa~7#LXC+O`MOeyL-9n2f5dVK6F`hDAX<+KNhu+zbl~^ZQ#?AqPA^*YR7) z+qZ9@7+$myl@}3&T-?~*RlR;4wPLW|`L?CCx0jluBP%cO#>RV~hjdI#VUa9C&@V;g zk9OBuW|~4$xDI#Ds&b-H6YJI+Gfh>lv-t7vBQ|HGsAas@L*KkPKXl23JG42MK7*VVOTisy zCu%$|nFnm%07$L-qfL28U!oQVXay>nEMpzWG^>auA>>u^{d<~}T97|VN=mM?%|!5V zP+jq!8hbXPk8AFFo(HZLQdoGYcsW+>lkZhbQ{*?Nx1KS@#SvJL*qP z-+A||S~rT!>)5T@qZFs>1EI|Tf)fFW9<`B+?JW9Teo;W+Noi^6%o|@x2?<_dVcKt{ z_wBqa7zQ4LGo@l^$XH@tM-HU~oDZlII7Shk_B7T8>12)0@8(ulqms=1$WkR9(g!$M zN-+zWM}0H*rve>|vJmdmLNQRq1IIz%N|&7SAxM>UvE6b|7CVRPgiB>$ zuUVGMA}o(5l~%%Tb3>HCMgE3$xhAUm8MK4iPI z=c>J)LWTlY?k%+9g99@8-R~dmL;?>zOdB4Vxx`GLYj&*r?GD`Z;p_NLYY?%dlG)63D``GU0%e zg9YvO^M_Vo2e2wUk_AC|y6ZTc!b+NWixV|gg*|uj@6Y3$ckiBc?uXXtD*R&{85!AM z%!xVKb-b9MSz220Af_`s0$e+I=7Gt{9_wQe9NOv9OrSPxMddM<#KaiRNH{e{bIMrQ zAM8b5rLxzkO6UwHYdjfkfJ5d5xdFzDl@S4*`R&_G?J?Xj#rG<+p}yB1J?E(_8tuw$ z$=#7sGrGkIEzG6Jfgf0UNKT}f<=F7%Upd(KHU3n`eB3$%F8ilBy3_1T# zGA`(LJJ2LxY*o))`BqyowWETuv@kANE*~$qXOM82iUKn$-!nG4!m^DVg2E}|wOaKj zfe9c3%r=QCD|xEIaq5|$KZBuvfKhIH6~f4K;R2aZ!?Ea)omB2z!2T?5|Ig#o$Q-p8 zdDo5_9(f@=0c~&-@jyQ0!wK$pD4Yb@W%v?DGGDPYA(@>9^}V_C?fzV25W!=Akz%>< z{m)Q?c$wVDhmZgEVb>?Gfxdn(7`9;z*lPU2nk<^*+E%~a3swiatvw=VhIvS8Fg0O6 z`F{=1pFfWnWdj2P@RUvcS;{FRN*SgG2J}WHrV*fnbHFp9*_nP&VFJIPxq7&I9_RED zR_03s{`z5`+gVtgm3TNF8X8In+~A`iPBwpSqS6YaueyeYZ|;#ZrBgudNY(r7_% zOOL(G`2OY`xEeSZ9i&NnlK1xZ7HRRuSPbRsAek4B@WXAeNSv!q}fGfKH>oVsVXFj>IeX!iDPh@$Guke2dQPQ&x**2_Hm)UpS@hX%Yyj z>FVm*2n%E>%Q?cPMYCdmQbN|F#y!YkgkH_n<32B zeCKf1V!`sVLlpZ}a!^0eo21mX>x zHUYhDZ9hM01f>zX{`BOZuJ{d+Vg6Yo_=1R}Bo11czG(DW^St1p#E88O&?`{)P2JrTfU%dsQdoJRooFi9 zk#^0!%wgnWniLjasBW9yWjYC->gW7CVYO+=om=TfiHV8opc!I$lxZ0l5Mz9lKP3%3 zN(6?$2M3u9+IivE5&L)r^IDd0H5}nJ;KDmzE$QHIkCxt#$S|-;jO6+QDF8yG-BD(u2p^t*?#P;SAG|+4g+rUJKT$6{0TW1EnFS3X;-azW>tG z(+c^EJvsKxee=euIh5>k3}zAFlsw+++O=!oeJuW?dEnt8-kTv834W)={Fk`5MMc(T zFZAQOe;I%F5doM%s3hW?oSd9+N+j|qAcZq-V{1zcDP5PoJXr#|LdtgwF>;>)bLEir zi3Q^e1MxsiXK?xf_n%$3mG80W)83!*NnG*nuth9++p6cfSj@$ zwjD{a5B-z+fnT1@7QkdF6v_3#K) z%6g)jgE8w;2K-|E@ZrM@@I`=3r-@HGF1zeYwa3Q+$H2J}rVAN>11tg0*lWxOw8PVw zm=5s4Tz~hl1?+yeQ`gdJdBLwG?bH)(`+_A&Aqp&2L^!jtv6WR+w7K`m;k>7OJ1i2{ zOH8YSkzNE*g{Gy{@aUg$QZDHKE+jv|$Kj@6zT5~d8(EzC@a&u*Okkp;qm3&Zn1B}| zuygO;z5S!39FR;UB_*8Z1k-QD>|qYk{3Y%jNbHR!67HFJUHK+R2Vwg`KHG1WvhNT# z9{ezXR&;w5TL`$8Fc?bpyz4gyDdMv;a)*wMjSL1^^S^%0f@8|Ur;bA0|9^)&${@Lx zS5^={1VIZ859bvU(v4-`SH%oQ-+y#K1jC_y=%IAL`@p+jov5UN-rdm_$pVJEI$Gyd z=*qWJtNu(y#3Dk>waH1-Q5z9p2?!AdX9jVQfQWwi`n3&Q+nL|L(GNHwT@V@uCJod- zDG3P)2u?;OCLTUMl`@lk6}U5KKgu%_l;C2!y16MqPXYUYj)B1{_HnI@w6taC3w{9s zf$MwgKj31>d#euKt5*{|?Sp|lH-U{G1)an4jHr(si+@=0v#_{U?kN)bw%K;9^y8wJ+pn!JQCU9U8wsv$_ zfv9Dba7xbXW8k_C`UXS*VjUw;2%{o|lAv`nj{EOuc@U;(hXbTT9|Og;)b_oZ6Z||p zaA78*J)HPqtOZ+ut_v-iZSra~4KH)#=1OS;FF!vKGDdpvKmgI+Z(cuQ4_H1$k-N|P>@nq<5RkG!hYKipmQw0*S$6usg!ly)AK5jI^eWAyecO8$+GD5 zn>ZNKA`V$!9}N^>k=8OTR4lm1ZBRZ)3kO_m0hotj9D-JT8FB+3?Q{uANdE3h`>eb} z1Unedn+vZW|LjV*ROPkC9uOEPV$p~~rcR(De$;v|*z}ywGrY*d90?;k7-^E-xpOCE z3h!7-Ks!UvG3h7hUT$vg91uMDBM#WL@vDf-0Oddzt!S^sKyaD#g#Y>l9o)r#E0+=%)F)=T=$4yO5hz>m5UJ3zYrS2%z96W}a z8g|i?qAMy<|N0v1^pZCk4QpPKfV~F#>$L z!LkXftgM_mz3w2+4t_UsU@a{KfVh75-PLl0XX6SyFXXG|3}nI}6?`d>xFI+kt|L>R0_BJ*d3`?%e5nehwoX1L%e)AhMFHjIfdxM*^@?o1E z=1SRuZLU}jlK+`+f)CsblPhG%&^_n~gS$-lUsn#W$DTn5$0jDgb{n#YPPcg8ta7%} z`vPnmNQZ?PeYK9`Q{e8#ckeb$Oiax5Su?SRMKr$E8c?93q5`rm3{;@9Qc_2an<0#h zU^s6P2P6?564r*ekjI@@!8FGLMTH}RR$QP(r?-NZeXeTdc4Q|_A4X<1oJYE_tK(BF zi@h?&M+kpt;f2WV)mgQcSpZp#y!f#0t>HY`nhEc%LA30we)8hAWdp8N zxHE4YDVY4_kHhiE83?YMX&#x}X+{qE=TD{74b~iC5jf&W81?JjyGIeBg0H5g26Z=p zmX*5>Bzkp z2igniz^EsHuckE~WXNpD-u?oZi)?q)*TZ_##VnG9?zaP-`Tw>n;_1VCF0AqaQjbpm zdBe!0OmH(UUEwho2r|HbVn7X0c^Q7o7XWI&feUU{iP2AH6^>IUEHESo#tUV4JxdRT z8g{q}lYYuA{M9ES%l16b2Z{; z{`{eVdn0^oXL%$U)b+|B*8~vkGLIz#c$EWr)gXj~rX7%%>cfyIKONyUZLQ3I6EY}LL{vaPQlwKv5Jc(j zlu)|vp8vgX?nk(5-Q^LN%$(<(XP>?IFZPMlzO6=1!bpNZAjmb;(Ygo(9u4j<5dr+> z;`^Cu_=mtkQw@zc!~Mys%TGWct{^nfig$g|*2f>~-}O8t+}w+ZCKG-}wwFreqsS%p z>bz$Hy3Fz33nlluqPOquoF)b`4nJ3n+7}q#aN$c_<|G7 zjS>+z4~B>>ElZFM>l)IGMK%-v|1bY{Kq5aXi7QC`FcX~Wy54}kd6Q&pY)sImhv_^a zA?Y|B74K_I;ayElQg#lGM@zkIWDJ6c?(XjW@r}Un1a2*oaYia$h&u83d0&sz8&1tX zV{<*uidv+~eeMG6l zu-WG1aA&B}>2h;(v$l~@)b_R;lavQhu4)W*jaXld&7)yLx#&4GlfV zVA*Rc`n=OhFa^`Qx?>jIWF=g2Qgq2GlCrR{C{^*;)1v6!m6lS8iHSjwwRvc9 zD-3=VMX&7mMYGDYP)DA>lYd*q$%(&ye}=Ts_zPVE>XuR*i|o|$@^EFW^1h0>1sj89 zwfiE4y}iAea7vao&(zu)CP*-_%~o_q{_KGAMM45wQWw?b%Ta8~PaADTb8>R<$;rt# z|NX<3m6i1tJ);PVY>Zarfb$_ANC^oEd1y(#&bwugelomu>z4NWyU%atZSL+?E_cak zDx0$-({G2re$Du6a8OwwNjY0v0hK^Jo_NbFI=iNZ@%QiF5RkBf0zOXa$X=&m84{Wd zJ5k2F_wFg?_BFP(U8wWh$vL62&goyy(tU3x$S^fKt8DIMO^cGTZD6s0|HE@Ksq^de zBhvaa_Br&^Ct<@ZF%c3P5n;xdcSS`i#>UJwUh5>{;^KysR1tl)=!Xxv7#SI-rl%E2 z%dHj6EeQPTSl}+oSuCE2GLqla)Ux`koWiZpITTT@b>oZ5zu0=#9jQ}y^FLY7x;VKu+4Kq zLhZf1y}=NPr5!(=!f^OGx3Iu2B0?kXGJ&?XM!mer1;>XEAEy5NpDCiHJ)R7adA)E)Tl^LIZqc#tsj5gGE2}Gy*{X%mX?OgwWTE<52G}D zTU!NPU219?n)u{oqCDNmzFalSU+;9Bf(%CR-|D`{HH4r2{qZkegv`xZF~q1wGYH{B z%W1BDG>fF8^O_W+Hp~j}r$td}6#UMCNW{d%;JS}ecFFsl=QTA_OwwLtTU%S|7))z| zmR#h!cRaZ2(30JGc~9Uj9X&kiD|zGsEFTbH+PMo9;m6QHxCvwIoR0n zEZd`-{w?d8E%wTMl`*N58m|jv{S>!a)nXJ z9Lj|1Y6-`Q+Dn(kozd#*L;}V&*s96E%a3>06rqcc9F6LN zr58XuI$nd|Vx42|Lr0N#G;_ZG=#TW=B7pU;_YskiO(H*J&OLtoc*#TR<*QeU#e=Y? z7Blw6#l?<~rVTv|mYDp0p;tHCeQS$aJ>dBW`JvTSuR3S?OcXxM7hk-)# z<>h6iDl4I9&z=pvy_Gt&Io*;H6-8=PZmTo85d~S9n4aDZ)sxa^OIv-Xi)*D5U8L92 z(sB-30yNfY&sDlPH%WU32V79#=19lcxpnW{*-C0Sz5q-6{OuOs>X1Lx@woFf_iJ}| z8ze-j_l5~z(S^T@KRWn|Yw_z$;^5YNe0}?FFHl4rvLrtc2+z&sxOwwt@6Vt3@9&bB znws*w`bI&&Sa{3NPbw!jmx`G=rZa(?gPWU>Pp>fR$^m&(Q^t%(9l>K zt-9VG#~Qb}=}LC_2HAg7vrCqZ-tk(PNwJNAfq_!hR(-1)w$U7I9g4!crS)efVqn?BXa3dw zUTD^=LC1Y7bkEv8)YdXRdGdsaf71aQt!*Qg znC41S*Q1$MViIaTVUH#4G)Z>?Ky+tk=jZC2fcN{;;jDs=LxS0(v$W&gP2;jC;9dd( z0!meGxYEG979|ci+HHe2@3^pku2hgQ#%CeL1_zNqB$V>|&1c(VHvj%@Niq%O^?00? zBZyn#!=ElB2^fde)yV=4*jyLO2v#v(frnZ9@294#hezw_$&r(rDSjz`j%o12Xy`OXW8-Oqra{bxMRehm ztZ%Qd=_&p*2hi@VaJU~e5^~x^$a+Og>>@l-I(j$kSlki>a5p(kE`V{g%B4d~{=~{X ze}ZNdb$BrR!kIMb)hqMU;{yrTDTLqNAAS#MtPFKucw`<1C6!Lm*VpGW8zV00JSLGn z$~G4tDTlfCPsxks+4{AJ&7UC}qhb-A{`@2}1OAeYA>0OzhR4F=PSP;pAr} zE!;Y!bk`ao<)+uy`Sn?`G6Fi`kz8v+2Ww?NfHFK8F0&yWILGz?x$`jAq?q0#PQ%WQ z_lEOW#LJhoiYqkDTsm4PCDWN&sQF|O8w$YV^Q%vgA0zyPskSQtpl-yn%E!XqNOd!j zAN#D>d#$#iJ6PQwfTPOQ*?*D)fq(q%Fh zZu-u1WGcsqSi(TJz5gE}AqKLcG8;;P2i1*6x0Lqb+vteV=KR~~N)3T0OL;S`sK^@_ ztiJzvl?$s=D)$Y|a?+BE7cW8%*47o(XJ_M`o}Thty9RVnoPNCZsu>&cga=mdoLl)_ z0I51v#KNY8e3-l`nL@7vnIb17F8oS{kO72uOQER7HIIWOsXdU^~9Os34hL*5P9;bSXc9fFqaWNSmE=XiN}akR=NGvF!okxP&m z)gGm<5 zcB-@b`9_05+Upwdz;46Qi3t{|^qxYo2#KBbQF7#67l5iB?4M@${=tcJ*vTK_fI zH83Eiq@+Z6Uzao-)Rd8t(Kax!8yKOWps;mzzTrU5ew!o=AGQw6N73Az4Wt~7E~QI* z&r}SW(7fSJrA&zDP-6#{2I?Bvd#`;391;PCqN=e>un@FUpzdO@kjZGJQ_DM@+|A;k z6VfO;{^nB4j_1#x2iFH2k^GF~nOG8sh`fCH((GV+o`;uL(cfPNc3u*67FafL@9HZC z5o@xSH}ecuky|xBTkL?~?J<|RJ@{s-Q{6YG6#W6pB|MgpAUdpnWW=;Z(Wllq7n{`C z3bR??)7K{oQ)2VDj6e≷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 IN@gMd1<2O@=Kufz diff --git a/docs/images/chapters/tightbounds/e087b9e9822e65dcc4ff7673db10e91c.png b/docs/images/chapters/tightbounds/419415bee6ffd7598c035c42de09a94f.png similarity index 100% rename from docs/images/chapters/tightbounds/e087b9e9822e65dcc4ff7673db10e91c.png rename to docs/images/chapters/tightbounds/419415bee6ffd7598c035c42de09a94f.png diff --git a/docs/images/chapters/tightbounds/ed626d23d5f258a3f599e881b5f12aad.png b/docs/images/chapters/tightbounds/ccc77ae1f57d7dd7ce4d5397fe1b140b.png similarity index 100% rename from docs/images/chapters/tightbounds/ed626d23d5f258a3f599e881b5f12aad.png rename to docs/images/chapters/tightbounds/ccc77ae1f57d7dd7ce4d5397fe1b140b.png diff --git a/docs/index.html b/docs/index.html index 250561a6..884ebdaa 100644 --- a/docs/index.html +++ b/docs/index.html @@ -328,7 +328,7 @@ function Bezier(3,t):
- + Scripts are disabled. Showing fallback image. @@ -336,7 +336,7 @@ function Bezier(3,t): - + Scripts are disabled. Showing fallback image. @@ -344,7 +344,7 @@ function Bezier(3,t): - + Scripts are disabled. Showing fallback image. @@ -462,12 +462,12 @@ function RationalBezier(3,t,w[],r[]):
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -560,7 +560,7 @@ function RationalBezier(3,t,w[],r[]):
- + Scripts are disabled. Showing fallback image. @@ -568,7 +568,7 @@ function RationalBezier(3,t,w[],r[]): - + Scripts are disabled. Showing fallback image. @@ -928,13 +928,13 @@ treated as a sequence of three (elementary) shear operations. When we combine th

If you move points in a curve sideways, you should only see the middle graph change; likewise, moving points vertically should only show a change in the right graph.

- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. @@ -1070,14 +1070,14 @@ function getCubicRoots(pa, pb, pc, pd) {

So now that we know how to do root finding, we can determine the first and second derivative roots for our Bézier curves, and show those roots overlaid on the previous graphics. For the quadratic curve, that means just the first derivative, in red:

- + Scripts are disabled. Showing fallback image.

And for cubic curves, that means first and second derivatives, in red and purple respectively:

- + Scripts are disabled. Showing fallback image. @@ -1095,12 +1095,12 @@ function getCubicRoots(pa, pb, pc, pd) {
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -1120,16 +1120,18 @@ function getCubicRoots(pa, pb, pc, pd) {

If we drop all the zero-terms, this gives us:

We can see that our original curve definition has been simplified considerably. The following graphics illustrate the result of aligning our example curves to the x-axis, with the cubic case using the coordinates that were just used in the example formulae:

- +
+ - + Scripts are disabled. Showing fallback image. - + - + Scripts are disabled. Showing fallback image. +
@@ -1139,12 +1141,12 @@ function getCubicRoots(pa, pb, pc, pd) {
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -1322,17 +1324,17 @@ y = curve.get(t).y
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -1368,7 +1370,7 @@ y = curve.get(t).y - + Scripts are disabled. Showing fallback image. @@ -1376,7 +1378,7 @@ y = curve.get(t).y - + Scripts are disabled. Showing fallback image. diff --git a/docs/ja-JP/index.html b/docs/ja-JP/index.html index 243a4323..73192be4 100644 --- a/docs/ja-JP/index.html +++ b/docs/ja-JP/index.html @@ -330,7 +330,7 @@ function Bezier(3,t):
- + Scripts are disabled. Showing fallback image. @@ -338,7 +338,7 @@ function Bezier(3,t): - + Scripts are disabled. Showing fallback image. @@ -346,7 +346,7 @@ function Bezier(3,t): - + Scripts are disabled. Showing fallback image. @@ -460,12 +460,12 @@ function RationalBezier(3,t,w[],r[]):
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -557,7 +557,7 @@ function RationalBezier(3,t,w[],r[]):
- + Scripts are disabled. Showing fallback image. @@ -565,7 +565,7 @@ function RationalBezier(3,t,w[],r[]): - + Scripts are disabled. Showing fallback image. @@ -925,13 +925,13 @@ treated as a sequence of three (elementary) shear operations. When we combine th

If you move points in a curve sideways, you should only see the middle graph change; likewise, moving points vertically should only show a change in the right graph.

- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. @@ -1067,14 +1067,14 @@ function getCubicRoots(pa, pb, pc, pd) {

So now that we know how to do root finding, we can determine the first and second derivative roots for our Bézier curves, and show those roots overlaid on the previous graphics. For the quadratic curve, that means just the first derivative, in red:

- + Scripts are disabled. Showing fallback image.

And for cubic curves, that means first and second derivatives, in red and purple respectively:

- + Scripts are disabled. Showing fallback image. @@ -1092,12 +1092,12 @@ function getCubicRoots(pa, pb, pc, pd) {
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -1117,16 +1117,18 @@ function getCubicRoots(pa, pb, pc, pd) {

If we drop all the zero-terms, this gives us:

We can see that our original curve definition has been simplified considerably. The following graphics illustrate the result of aligning our example curves to the x-axis, with the cubic case using the coordinates that were just used in the example formulae:

- +
+ - + Scripts are disabled. Showing fallback image. - + - + Scripts are disabled. Showing fallback image. +
@@ -1136,12 +1138,12 @@ function getCubicRoots(pa, pb, pc, pd) {
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -1319,17 +1321,17 @@ y = curve.get(t).y
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -1365,7 +1367,7 @@ y = curve.get(t).y - + Scripts are disabled. Showing fallback image. @@ -1373,7 +1375,7 @@ y = curve.get(t).y - + Scripts are disabled. Showing fallback image. diff --git a/docs/js/custom-element/api/base-api.js b/docs/js/custom-element/api/base-api.js index 4aa8d157..f400f1d0 100644 --- a/docs/js/custom-element/api/base-api.js +++ b/docs/js/custom-element/api/base-api.js @@ -1,5 +1,3 @@ -import { hatch } from "./util/hatchery.js"; - /** * The base API class, responsible for such things as setting up canvas event * handling, method accumulation, custom element binding, etc. etc. @@ -65,7 +63,17 @@ class BaseAPI { this.dataset = {}; } } - this.HATCHING = hatch(canvasBuildFunction); + this.parameters = Object.fromEntries( + Object.entries(this.dataset) + .map((pair) => { + let v = pair[1]; + if (v === `null` || v === `undefined`) return []; + let d = parseFloat(v); + // evaluate "string is number" using == rather than === + return [pair[0], v == d ? d : v]; + }) + .filter((v) => v.length) + ); this.addListeners(); this.setSize(width, height); this.currentPoint = false; diff --git a/docs/js/custom-element/api/graphics-api.js b/docs/js/custom-element/api/graphics-api.js index 8c89a678..f55a0930 100644 --- a/docs/js/custom-element/api/graphics-api.js +++ b/docs/js/custom-element/api/graphics-api.js @@ -138,19 +138,6 @@ class GraphicsAPI extends BaseAPI { points.forEach((p) => this.movable.push(p)); } - /** - * Get a parameter specified via data-attribute - */ - getParameter(name, fallback) { - let val = this.dataset[name]; - if (val) { - let asFloat = parseFloat(val); - if (val == asFloat) return asFloat; - return val; - } - return fallback; - } - /** * Set up a slider to control a named, numerical property in the sketch. * diff --git a/docs/js/custom-element/api/util/hatchery.js b/docs/js/custom-element/api/util/hatchery.js deleted file mode 100644 index a5a01006..00000000 --- a/docs/js/custom-element/api/util/hatchery.js +++ /dev/null @@ -1,111 +0,0 @@ -const HATCHING = []; - -/** - * Build hatching patterns. These are built fully unrolled, - * mostly because they're small and there's no actual benefit - * to abstracting the drawing for only six patterns. - */ -function hatch(canvasBuildFunction) { - if (HATCHING.length > 0) { - return HATCHING; - } - - let cvs, - ctx, - w = 9, - h = 9; - - if (canvasBuildFunction) { - let b = canvasBuildFunction(w, h); - cvs = b.canvas; - ctx = b.ctx; - } else { - cvs = document.createElement("canvas"); - cvs.width = w; - cvs.height = h; - ctx = cvs.getContext(`2d`); - } - - ctx.fillStyle = `#0000FF30`; - ctx.lineWidth = 1; - - const paint = (x, y) => ctx.fillRect(x, y, 1, 1); - - // pattern: \ - ctx.clearRect(0, 0, w, h); - paint(0, 0); - paint(1, 1); - paint(2, 2); - paint(3, 3); - paint(4, 4); - paint(5, 5); - paint(6, 6); - paint(7, 7); - paint(8, 8); - HATCHING.push(ctx.createPattern(cvs, "repeat")); - - // pattern: / - ctx.clearRect(0, 0, w, h); - paint(0, 8); - paint(1, 7); - paint(2, 6); - paint(3, 5); - paint(4, 4); - paint(5, 3); - paint(6, 2); - paint(7, 1); - paint(8, 0); - HATCHING.push(ctx.createPattern(cvs, "repeat")); - - // pattern: x (without clearing, because we can overlay) - paint(0, 0); - paint(1, 1); - paint(2, 2); - paint(3, 3); - paint(5, 5); - paint(6, 6); - paint(7, 7); - paint(8, 8); - HATCHING.push(ctx.createPattern(cvs, "repeat")); - - // pattern: | - ctx.clearRect(0, 0, w, h); - paint(4, 0); - paint(4, 1); - paint(4, 2); - paint(4, 3); - paint(4, 4); - paint(4, 5); - paint(4, 6); - paint(4, 7); - paint(4, 8); - HATCHING.push(ctx.createPattern(cvs, "repeat")); - - // pattern: - - ctx.clearRect(0, 0, w, h); - paint(0, 4); - paint(1, 4); - paint(2, 4); - paint(3, 4); - paint(4, 4); - paint(5, 4); - paint(6, 4); - paint(7, 4); - paint(8, 4); - HATCHING.push(ctx.createPattern(cvs, "repeat")); - - // pattern: + (without clearing, because we can overlap) - paint(4, 0); - paint(4, 1); - paint(4, 2); - paint(4, 3); - paint(4, 5); - paint(4, 6); - paint(4, 7); - paint(4, 8); - HATCHING.push(ctx.createPattern(cvs, "repeat")); - - return HATCHING; -} - -export { hatch }; diff --git a/docs/zh-CN/index.html b/docs/zh-CN/index.html index 504df1b1..b32f00f4 100644 --- a/docs/zh-CN/index.html +++ b/docs/zh-CN/index.html @@ -324,7 +324,7 @@ function Bezier(3,t):
- + Scripts are disabled. Showing fallback image. @@ -332,7 +332,7 @@ function Bezier(3,t): - + Scripts are disabled. Showing fallback image. @@ -340,7 +340,7 @@ function Bezier(3,t): - + Scripts are disabled. Showing fallback image. @@ -454,12 +454,12 @@ function RationalBezier(3,t,w[],r[]):
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -551,7 +551,7 @@ function RationalBezier(3,t,w[],r[]):
- + Scripts are disabled. Showing fallback image. @@ -559,7 +559,7 @@ function RationalBezier(3,t,w[],r[]): - + Scripts are disabled. Showing fallback image. @@ -919,13 +919,13 @@ treated as a sequence of three (elementary) shear operations. When we combine th

If you move points in a curve sideways, you should only see the middle graph change; likewise, moving points vertically should only show a change in the right graph.

- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. @@ -1061,14 +1061,14 @@ function getCubicRoots(pa, pb, pc, pd) {

So now that we know how to do root finding, we can determine the first and second derivative roots for our Bézier curves, and show those roots overlaid on the previous graphics. For the quadratic curve, that means just the first derivative, in red:

- + Scripts are disabled. Showing fallback image.

And for cubic curves, that means first and second derivatives, in red and purple respectively:

- + Scripts are disabled. Showing fallback image. @@ -1086,12 +1086,12 @@ function getCubicRoots(pa, pb, pc, pd) {
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -1111,16 +1111,18 @@ function getCubicRoots(pa, pb, pc, pd) {

If we drop all the zero-terms, this gives us:

We can see that our original curve definition has been simplified considerably. The following graphics illustrate the result of aligning our example curves to the x-axis, with the cubic case using the coordinates that were just used in the example formulae:

- +
+ - + Scripts are disabled. Showing fallback image. - + - + Scripts are disabled. Showing fallback image. +
@@ -1130,12 +1132,12 @@ function getCubicRoots(pa, pb, pc, pd) {
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -1313,17 +1315,17 @@ y = curve.get(t).y
- + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image.
@@ -1359,7 +1361,7 @@ y = curve.get(t).y - + Scripts are disabled. Showing fallback image. @@ -1367,7 +1369,7 @@ y = curve.get(t).y - + Scripts are disabled. Showing fallback image. diff --git a/package-lock.json b/package-lock.json index 5a7a5b4a..cf212758 100644 --- a/package-lock.json +++ b/package-lock.json @@ -630,9 +630,9 @@ "dev": true }, "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "file-type": { @@ -667,9 +667,9 @@ } }, "follow-redirects": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", - "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", "dev": true }, "fs-extra": { @@ -826,9 +826,8 @@ } }, "http-server": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", - "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", + "version": "git://github.com/Pomax/http-server.git#ff289661cd759f871c041e8890e1bd4af6c57bdc", + "from": "git://github.com/Pomax/http-server.git#patch-1", "dev": true, "requires": { "basic-auth": "^1.0.3", @@ -1081,9 +1080,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, "lodash.debounce": { diff --git a/package.json b/package.json index 7c49ff64..fc83ba5f 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "lint:tools": "prettier \"./src/**/*.js\" --write", "lint:lib": "prettier \"./docs/js/**/*.js\" --write", "pretty": "echo not running `prettier \"./docs/**/index.html\" --write` as it increases filesize by 30%", - "server": "cd docs && http-server -p 8000 --cors", + "server": "cd docs && http-server -e -p 8000 --cors", "watch": "run-p watch:*", "watch:chapters": "chokidar \"./docs/chapters/**/*.*\" -c \"npm run build\"", "watch:customelement": "chokidar \"./docs/js/custom-element/**/*.js\" -c \"npm run build\"", @@ -46,7 +46,7 @@ "chokidar-cli": "^2.1.0", "fs-extra": "^9.0.1", "glob": "^7.1.6", - "http-server": "^0.12.3", + "http-server": "git://github.com/Pomax/http-server#patch-1", "marked": "^1.1.1", "npm-run-all": "^4.1.5", "nunjucks": "^3.2.2",