From 42b9818441c9b194d3a0d3264d08b70617583f92 Mon Sep 17 00:00:00 2001 From: Pomax Date: Sun, 6 Sep 2020 17:23:52 -0700 Subject: [PATCH] regenerated all images --- docs/chapters/arclength/draw-slices.js | 2 +- .../chapters/arclengthapprox/content.en-GB.md | 4 +- docs/chapters/bsplines/basic.js | 16 +- docs/chapters/bsplines/content.en-GB.md | 4 + docs/chapters/bsplines/interpolation.js | 2 +- docs/chapters/bsplines/rational-uniform.js | 2 +- docs/chapters/bsplines/reduced.js | 2 +- docs/chapters/bsplines/uniform.js | 2 +- docs/chapters/catmullconv/catmull-rom.js | 2 + docs/chapters/curvefitting/content.en-GB.md | 2 +- docs/chapters/curvefitting/curve-fitting.js | 2 +- .../curveintersection/content.en-GB.md | 2 +- .../chapters/curveintersection/curve-curve.js | 6 +- docs/chapters/pointvectors/content.en-GB.md | 4 +- .../{cubic.js => pointvectors.js} | 36 +++- docs/chapters/pointvectors/quadratic.js | 61 ------ docs/chapters/pointvectors3d/content.en-GB.md | 2 +- docs/chapters/polybezier/poly.js | 25 +-- docs/chapters/projections/content.en-GB.md | 2 +- docs/chapters/projections/project.js | 20 +- docs/chapters/reordering/reorder.js | 7 +- docs/chapters/weightcontrol/content.en-GB.md | 8 +- docs/chapters/weightcontrol/rational.js | 25 +-- .../0d7138b99f5986332a050a8479eefa57.png | Bin 10248 -> 0 bytes .../475547c773a7279dc037c9ced2c8c6dc.png | Bin 10590 -> 0 bytes .../4b5d220d02b08f6c9aa19389255ef8bb.png | Bin 0 -> 10668 bytes .../4bffba7dda2a3556cf5b2ae7392083c6.png | Bin 0 -> 10293 bytes .../580c33f599b70de44b17c546098508aa.png | Bin 9830 -> 0 bytes .../dc74a2f2da19470b8d721ece5f3ce268.png | Bin 0 -> 9933 bytes ...g => 3cfaf7bf5e950072437cfe70391155fa.png} | Bin .../3f66c97dcdd56d201c2acda3bd403bbf.png | Bin 0 -> 24410 bytes .../610232b8f7ce7ef3f0f012d55e385c6d.png | Bin 20215 -> 0 bytes ...g => 6ba59877389e2c856234403ecbd953f9.png} | Bin ...g => 9c4bbb753918e3cb8cbc5a770a2af9ee.png} | Bin ...g => bd03680e4661ae7f4d687b2f229d2495.png} | Bin .../d9a99344a5de4b5be77824f8f8caa707.png | Bin 0 -> 20950 bytes ...g => dda4911d5148032e005a02ef33b78978.png} | Bin .../aa46749b9469341d9249ca452390d875.png | Bin 6622 -> 0 bytes .../e1e640b29dd07f905c1555438511cad9.png | Bin 0 -> 7096 bytes ...g => 1307361f152242ab0263d81a469cf43b.png} | Bin ...g => 390fe022c4e290a7a9d3814ae2936b77.png} | Bin .../2724b6c42f36b4dbea6962cac844d2c3.png | Bin 0 -> 11628 bytes .../44d454f380ae84dbe4661bd67c406edc.png | Bin 10037 -> 0 bytes .../58719bde12c1cbd535d5d8af1bef9c2b.png | Bin 10983 -> 0 bytes .../f4d72cc162d4cbcc6d6a459fced01cfb.png | Bin 0 -> 8726 bytes ...g => 044f65dd588b0210499add16ea50a23d.png} | Bin ...g => 17a6ffbfffaa9046ad165ca880d9030d.png} | Bin ...g => a1a3aabd22c0221beb38403a4532ea86.png} | Bin ...g => adc3b55c9956849ec86ecffcd8864d8a.png} | Bin ...g => b492c486c25f17a95c690e235b8ad483.png} | Bin ...g => b7dfe772ac90d762f48772b691a9070f.png} | Bin ...g => b810f02639a79cf7f8ae416d7185614d.png} | Bin ...g => babb27083b805c7c77bb93cfecbefb2b.png} | Bin .../3cc334d0ebc01cc5352e23ed47bc5414.png | Bin 0 -> 24048 bytes .../c40ab9e3f3d1f53872dff30a7bcdb003.png | Bin 22211 -> 0 bytes .../387f931043aabd6c467985c568482636.png | Bin 10207 -> 0 bytes .../81e559a69298ecc24c8edebe59e79647.png | Bin 0 -> 12102 bytes ...g => be18e8119472af796329f3e2159bdf94.png} | Bin docs/images/favicon.png | Bin 15466 -> 0 bytes docs/images/og-image.png | Bin 25547 -> 0 bytes docs/index.html | 82 +++---- docs/ja-JP/index.html | 82 +++---- docs/js/custom-element/api/graphics-api.js | 28 ++- docs/js/custom-element/lib/create.js | 23 +- docs/placeholder-style.css | 200 +++++++++++------- docs/zh-CN/index.html | 82 +++---- 66 files changed, 407 insertions(+), 328 deletions(-) rename docs/chapters/pointvectors/{cubic.js => pointvectors.js} (58%) delete mode 100644 docs/chapters/pointvectors/quadratic.js delete mode 100644 docs/images/chapters/arclength/0d7138b99f5986332a050a8479eefa57.png delete mode 100644 docs/images/chapters/arclength/475547c773a7279dc037c9ced2c8c6dc.png create mode 100644 docs/images/chapters/arclength/4b5d220d02b08f6c9aa19389255ef8bb.png create mode 100644 docs/images/chapters/arclength/4bffba7dda2a3556cf5b2ae7392083c6.png delete mode 100644 docs/images/chapters/arclength/580c33f599b70de44b17c546098508aa.png create mode 100644 docs/images/chapters/arclength/dc74a2f2da19470b8d721ece5f3ce268.png rename docs/images/chapters/bsplines/{7ac6e46280de14dce141fb073777dc8e.png => 3cfaf7bf5e950072437cfe70391155fa.png} (100%) create mode 100644 docs/images/chapters/bsplines/3f66c97dcdd56d201c2acda3bd403bbf.png delete mode 100644 docs/images/chapters/bsplines/610232b8f7ce7ef3f0f012d55e385c6d.png rename docs/images/chapters/bsplines/{984c86b3b357c799aaab5a5fbd48d599.png => 6ba59877389e2c856234403ecbd953f9.png} (100%) rename docs/images/chapters/bsplines/{4c71f82901edc1a0acae31cf5be12c65.png => 9c4bbb753918e3cb8cbc5a770a2af9ee.png} (100%) rename docs/images/chapters/bsplines/{84bd623b9d3d8bf01a656f49c17079b8.png => bd03680e4661ae7f4d687b2f229d2495.png} (100%) create mode 100644 docs/images/chapters/bsplines/d9a99344a5de4b5be77824f8f8caa707.png rename docs/images/chapters/bsplines/{9915d887443459415a7bfb57bea1b898.png => dda4911d5148032e005a02ef33b78978.png} (100%) delete mode 100644 docs/images/chapters/catmullconv/aa46749b9469341d9249ca452390d875.png create mode 100644 docs/images/chapters/catmullconv/e1e640b29dd07f905c1555438511cad9.png rename docs/images/chapters/curvefitting/{78d32beb061391c47217611128446146.png => 1307361f152242ab0263d81a469cf43b.png} (100%) rename docs/images/chapters/curveintersection/{9540ecc84c3fc63a07f5372ab031c99e.png => 390fe022c4e290a7a9d3814ae2936b77.png} (100%) create mode 100644 docs/images/chapters/pointvectors/2724b6c42f36b4dbea6962cac844d2c3.png delete mode 100644 docs/images/chapters/pointvectors/44d454f380ae84dbe4661bd67c406edc.png delete mode 100644 docs/images/chapters/pointvectors/58719bde12c1cbd535d5d8af1bef9c2b.png create mode 100644 docs/images/chapters/pointvectors/f4d72cc162d4cbcc6d6a459fced01cfb.png rename docs/images/chapters/polybezier/{0553872bf00ebc557f4b11d69d634fc6.png => 044f65dd588b0210499add16ea50a23d.png} (100%) rename docs/images/chapters/polybezier/{1aeb331a5170c203c31c55ae8d55b809.png => 17a6ffbfffaa9046ad165ca880d9030d.png} (100%) rename docs/images/chapters/polybezier/{7afd119dd93a581ec161e2cbfc3c1e63.png => a1a3aabd22c0221beb38403a4532ea86.png} (100%) rename docs/images/chapters/polybezier/{04bc7b98ba019a4a90bedce6e10eaf08.png => adc3b55c9956849ec86ecffcd8864d8a.png} (100%) rename docs/images/chapters/polybezier/{acb8f004751017eaac4aae0b039c94cf.png => b492c486c25f17a95c690e235b8ad483.png} (100%) rename docs/images/chapters/polybezier/{1a3c6b24bea874d32334d62110507fcb.png => b7dfe772ac90d762f48772b691a9070f.png} (100%) rename docs/images/chapters/polybezier/{60adbd6fe091a72e1ed37355e49a506e.png => b810f02639a79cf7f8ae416d7185614d.png} (100%) rename docs/images/chapters/polybezier/{cfbfbbc56365ba547dc7e82b329c4007.png => babb27083b805c7c77bb93cfecbefb2b.png} (100%) create mode 100644 docs/images/chapters/projections/3cc334d0ebc01cc5352e23ed47bc5414.png delete mode 100644 docs/images/chapters/projections/c40ab9e3f3d1f53872dff30a7bcdb003.png delete mode 100644 docs/images/chapters/reordering/387f931043aabd6c467985c568482636.png create mode 100644 docs/images/chapters/reordering/81e559a69298ecc24c8edebe59e79647.png rename docs/images/chapters/weightcontrol/{0ef06657f0540938686b9b35b249a22b.png => be18e8119472af796329f3e2159bdf94.png} (100%) delete mode 100644 docs/images/favicon.png delete mode 100644 docs/images/og-image.png diff --git a/docs/chapters/arclength/draw-slices.js b/docs/chapters/arclength/draw-slices.js index aec3ccb2..ac1c0bc9 100644 --- a/docs/chapters/arclength/draw-slices.js +++ b/docs/chapters/arclength/draw-slices.js @@ -24,7 +24,7 @@ draw() { end(); setFill(`black`); - text(`Approximating with ${this.steps} strips: ${computedArea} (true area: ${trueArea}`, w/2, h-10, CENTER); + text(`Approximating with ${this.steps} strips : ${computedArea} (true area: ${trueArea})`, w/2, h-10, CENTER); } drawSlices(w, h, a, n) { diff --git a/docs/chapters/arclengthapprox/content.en-GB.md b/docs/chapters/arclengthapprox/content.en-GB.md index ace9e2d4..604885e7 100644 --- a/docs/chapters/arclengthapprox/content.en-GB.md +++ b/docs/chapters/arclengthapprox/content.en-GB.md @@ -7,11 +7,11 @@ If we combine the work done in the previous sections on curve flattening and arc
- + - +
diff --git a/docs/chapters/bsplines/basic.js b/docs/chapters/bsplines/basic.js index 8251fc19..000fe549 100644 --- a/docs/chapters/bsplines/basic.js +++ b/docs/chapters/bsplines/basic.js @@ -19,7 +19,7 @@ draw() { setStroke(`lightgrey`); drawGrid(20); - setStroke(`#CC00CC99`); + setStroke(this.parameters.showCurves ? `transparent` : `#CC00CC99`); for (let i=0, e=points.length-1, p, n; i circle(p.x, p.y, 3)); + points.forEach((p,i) => { + circle(p.x, p.y, 3) + text(`${i+1}`, p.x+5, p.y+5); + }); this.drawSplineData(); } @@ -36,10 +39,17 @@ drawSplineData() { // we'll need at least 4 points if (points.length <= 3) return; + if (this.parameters.showCurves) { + for(let i=0; i vertex(p.x, p.y)); end(); diff --git a/docs/chapters/bsplines/content.en-GB.md b/docs/chapters/bsplines/content.en-GB.md index ccf52a68..98b099fb 100644 --- a/docs/chapters/bsplines/content.en-GB.md +++ b/docs/chapters/bsplines/content.en-GB.md @@ -15,6 +15,10 @@ Consider the difference to be this: - for Bézier curves, the curve is defined as an interpolation of points, but: - for B-Splines, the curve is defined as an interpolation of *curves*. +In fact, let's look at that again, but this time with the base curves shown, too. Each consecutive four points defined one curve: + + + In order to make this interpolation of curves work, the maths is necessarily more complex than the maths for Bézier curves, so let's have a look at how things work. diff --git a/docs/chapters/bsplines/interpolation.js b/docs/chapters/bsplines/interpolation.js index 48eed69d..5954d465 100644 --- a/docs/chapters/bsplines/interpolation.js +++ b/docs/chapters/bsplines/interpolation.js @@ -31,7 +31,7 @@ setup() { knots = new BSpline(this, points).formKnots(); let min = 0, max = knots.length-1; knots.forEach((_,i) => { - addSlider(`slide-control`, false, min, max, 0.01, i, (v) => this.setKnotValue(i,v)); + addSlider(`slide-control`, `!knot ${i+1}`, min, max, 0.01, i, (v) => this.setKnotValue(i,v)); }); } diff --git a/docs/chapters/bsplines/rational-uniform.js b/docs/chapters/bsplines/rational-uniform.js index 195ed98a..6d15395a 100644 --- a/docs/chapters/bsplines/rational-uniform.js +++ b/docs/chapters/bsplines/rational-uniform.js @@ -12,7 +12,7 @@ setup() { weights = new BSpline(this, points, !!this.parameters.open).formWeights(); points.forEach((_,i) => { - addSlider(`slide-control`, false, 0, 10, 0.1, i%2===1? 2 : 6, v => this.setWeight(i, v)); + addSlider(`slide-control`, `!weight ${i+1}`, 0, 10, 0.1, i%2===1? 2 : 6, v => this.setWeight(i, v)); }); points = points.concat(points.slice(0,3)); diff --git a/docs/chapters/bsplines/reduced.js b/docs/chapters/bsplines/reduced.js index d9835f33..b69f439a 100644 --- a/docs/chapters/bsplines/reduced.js +++ b/docs/chapters/bsplines/reduced.js @@ -20,7 +20,7 @@ setup() { let min=0, max=knots.length-1; knots.forEach((_,i) => { - addSlider(`slide-control`, false, min, max, 0.01, knots[i], v => this.setKnotValue(i, v)); + addSlider(`slide-control`, `!knot ${i+1}`, min, max, 0.01, knots[i], v => this.setKnotValue(i, v)); }); } diff --git a/docs/chapters/bsplines/uniform.js b/docs/chapters/bsplines/uniform.js index 578408f3..2b39520c 100644 --- a/docs/chapters/bsplines/uniform.js +++ b/docs/chapters/bsplines/uniform.js @@ -12,7 +12,7 @@ setup() { knots = new BSpline(this, points).formKnots(!!this.parameters.open); let min=0, max=knots.length-1; knots.forEach((_,i) => { - addSlider(`slide-control`, false, min, max, 0.01, knots[i], v => this.setKnotValue(i, v)); + addSlider(`slide-control`, `!knot ${i+1}`, min, max, 0.01, knots[i], v => this.setKnotValue(i, v)); }); } diff --git a/docs/chapters/catmullconv/catmull-rom.js b/docs/chapters/catmullconv/catmull-rom.js index e377fa72..fab34c05 100644 --- a/docs/chapters/catmullconv/catmull-rom.js +++ b/docs/chapters/catmullconv/catmull-rom.js @@ -21,6 +21,8 @@ transformTension(v) { draw() { clear(); + setStroke(`lightgrey`); + drawGrid(20); const p = points, n = points.length; for (let i=1, e=n-2; i -
+ You'll note there is a convenient "toggle" buttons that lets you toggle between equidistant `t` values, and distance ratio along the polygon formed by the points. Arguably more interesting is that once you have points to abstract a curve, you also get direct control over the time values through sliders for each, because if the time values are our degree of freedom, you should be able to freely manipulate them and see what the effect on your curve is. diff --git a/docs/chapters/curvefitting/curve-fitting.js b/docs/chapters/curvefitting/curve-fitting.js index 6078b57a..c2e37f65 100644 --- a/docs/chapters/curvefitting/curve-fitting.js +++ b/docs/chapters/curvefitting/curve-fitting.js @@ -110,7 +110,7 @@ updateSliders() { const l = points.length-1; if (l >= 2) { points.forEach((_,i) => { - addSlider(`slide-control`, false, 0, 1, 0.01, i/l, v => this.setTvalue(i, v)); + addSlider(`slide-control`, `!t${i}`, 0, 1, 0.01, i/l, v => this.setTvalue(i, v)); }); } this.label = `Using equidistant t values`; diff --git a/docs/chapters/curveintersection/content.en-GB.md b/docs/chapters/curveintersection/content.en-GB.md index 20902dd4..44d10f4b 100644 --- a/docs/chapters/curveintersection/content.en-GB.md +++ b/docs/chapters/curveintersection/content.en-GB.md @@ -17,9 +17,9 @@ The following graphic applies this algorithm to a pair of cubic curves, one step (can you find the configuration that yields the maximum number of intersections between two cubic curves? Nine intersections!) - + Finding self-intersections is effectively the same procedure, except that we're starting with a single curve, so we need to turn that into two separate curves first. This is trivially achieved by splitting at an inflection point, or if there are none, just splitting at `t=0.5` first, and then running the exact same algorithm as above, with all non-overlapping curve pairs getting removed at each iteration, and each successive step homing in on the curve's self-intersection points. diff --git a/docs/chapters/curveintersection/curve-curve.js b/docs/chapters/curveintersection/curve-curve.js index 4a95ebeb..253793a3 100644 --- a/docs/chapters/curveintersection/curve-curve.js +++ b/docs/chapters/curveintersection/curve-curve.js @@ -4,7 +4,7 @@ setup() { setPanelCount(3); this.pairReset(); this.setupEventListening(); - setSlider(`.slide-control`, `epsilon`, 1.0, v => this.reset(v)); + setSlider(`.slide-control`, `threshold`, 1.0, v => this.reset(v)); } pairReset() { @@ -52,7 +52,7 @@ draw() { this.drawIteration(); setFill(`black`); - let information = `Initial curves, threshold = ${this.epsilon}px` + let information = `Initial curves, threshold = ${this.threshold}px` if (this.step) { information = `Curve collection at iteration ${this.step}`; } @@ -72,7 +72,7 @@ drawIteration() { const pairs = this.pairs; this.pairs = []; pairs.forEach(pair => { - if(pair[0].length() < this.epsilon && pair[1].length() < this.epsilon) + if(pair[0].length() < this.threshold && pair[1].length() < this.threshold) return this.finals.push(pair); // split two curves into four curves diff --git a/docs/chapters/pointvectors/content.en-GB.md b/docs/chapters/pointvectors/content.en-GB.md index 8be2cf24..ad74fa2b 100644 --- a/docs/chapters/pointvectors/content.en-GB.md +++ b/docs/chapters/pointvectors/content.en-GB.md @@ -73,6 +73,6 @@ treated as a sequence of three (elementary) shear operations. When we combine th The following two graphics show the tangent and normal along a quadratic and cubic curve, with the direction vector coloured blue, and the normal vector coloured red (the markers are spaced out evenly as *t*-intervals, not spaced equidistant).
- - + +
diff --git a/docs/chapters/pointvectors/cubic.js b/docs/chapters/pointvectors/pointvectors.js similarity index 58% rename from docs/chapters/pointvectors/cubic.js rename to docs/chapters/pointvectors/pointvectors.js index 150369ae..f80499e8 100644 --- a/docs/chapters/pointvectors/cubic.js +++ b/docs/chapters/pointvectors/pointvectors.js @@ -1,7 +1,16 @@ let curve; setup() { - curve = Bezier.defaultCubic(this); + const type = this.type = this.parameters.type ?? `quadratic`; + if (type === `quadratic`) { + curve = Bezier.defaultQuadratic(this); + } else { + curve = Bezier.defaultCubic(this); + curve.points[0].x = 30; + curve.points[0].y = 230; + curve.points[1].x = 75; + curve.points[1].y = 50; + } setMovable(curve.points); } @@ -15,7 +24,7 @@ draw() { for(let i=0; i<=10; i++) { let t = i/10.0; let p = curve.get(t); - let d = this.getDerivative(t, pts); + let d = this.type === `quadratic` ? this.getQuadraticDerivative(t, pts) : this.getCubicDerivative(t, pts); let m = sqrt(d.x*d.x + d.y*d.y); d = { x: d.x/m, y: d.y/m }; @@ -27,9 +36,6 @@ draw() { setStroke(`red`); line(p.x, p.y, p.x + n.x*f, p.y + n.y*f); - setStroke(`purple`); - line(p.x, p.y, p.x - n.x*f, p.y - n.y*f); - setStroke(`black`); circle(p.x, p.y, 3); } @@ -37,7 +43,25 @@ draw() { curve.drawPoints(); } -getDerivative(t, points) { +getQuadraticDerivative(t, points) { + let mt = (1 - t), d = [ + { + x: 2 * (points[1].x - points[0].x), + y: 2 * (points[1].y - points[0].y) + }, + { + x: 2 * (points[2].x - points[1].x), + y: 2 * (points[2].y - points[1].y) + } + ]; + + return { + x: mt * d[0].x + t * d[1].x, + y: mt * d[0].y + t * d[1].y + }; +} + +getCubicDerivative(t, points) { let mt = (1 - t), a = mt*mt, b = mt*t, c = t*t, d = [ { x: 3 * (points[1].x - points[0].x), diff --git a/docs/chapters/pointvectors/quadratic.js b/docs/chapters/pointvectors/quadratic.js deleted file mode 100644 index 4c8b64d4..00000000 --- a/docs/chapters/pointvectors/quadratic.js +++ /dev/null @@ -1,61 +0,0 @@ -let curve; - -setup() { - curve = Bezier.defaultQuadratic(this); - setMovable(curve.points); -} - -draw() { - clear(); - curve.drawSkeleton(); - - const pts = curve.points; - const f = 15; - - for(let i=0; i<=10; i++) { - let t = i/10.0; - let p = curve.get(t); - let d = this.getDerivative(t, pts); - - let m = sqrt(d.x*d.x + d.y*d.y); - d = { x: d.x/m, y: d.y/m }; - let n = this.getNormal(t, d); - - setStroke(`blue`); - line(p.x, p.y, p.x + d.x*f, p.y + d.y*f); - - setStroke(`red`); - line(p.x, p.y, p.x + n.x*f, p.y + n.y*f); - - setStroke(`purple`); - line(p.x, p.y, p.x - n.x*f, p.y - n.y*f); - - setStroke(`black`); - circle(p.x, p.y, 3); - } - - curve.drawPoints(); -} - -getDerivative(t, points) { - let mt = (1 - t), d = [ - { - x: 2 * (points[1].x - points[0].x), - y: 2 * (points[1].y - points[0].y) - }, - { - x: 2 * (points[2].x - points[1].x), - y: 2 * (points[2].y - points[1].y) - } - ]; - - return { - x: mt * d[0].x + t * d[1].x, - y: mt * d[0].y + t * d[1].y - }; -} - -getNormal(t, d) { - const q = sqrt(d.x * d.x + d.y * d.y); - return { x: -d.y / q, y: d.x / q }; -} diff --git a/docs/chapters/pointvectors3d/content.en-GB.md b/docs/chapters/pointvectors3d/content.en-GB.md index 46aa1514..4b52497b 100644 --- a/docs/chapters/pointvectors3d/content.en-GB.md +++ b/docs/chapters/pointvectors3d/content.en-GB.md @@ -28,7 +28,7 @@ And then we're done, we found "the" normal vector for a 3D curve. Let's see what -However, if you've played with that graphic a bit, you might have noticed something odd. The normal seems to "suddenly twist around" around between t=0.5 and t=0.9... Why is doing that? +However, if you've played with that graphic a bit, you might have noticed something odd. The normal seems to "suddenly twist around the curve" between t=0.65 and t=0.75... Why is it doing that? As it turns out, it's doing that because that's how the maths works, and that's the problem with Frenet normals: while they are "mathematically correct", they are "practically problematic", and so for any kind of graphics work what we really want is a way to compute normals that just... look good. diff --git a/docs/chapters/polybezier/poly.js b/docs/chapters/polybezier/poly.js index a174f3c1..eb37c9ab 100644 --- a/docs/chapters/polybezier/poly.js +++ b/docs/chapters/polybezier/poly.js @@ -76,14 +76,14 @@ movePointsQuadratic(i, link) { let pl = points[(l+i-1)%l]; let pr = points[(l+i+1)%l]; let ppr = points[(l+i+3)%l]; - pl.x += this.currentPoint.diff.x; - pl.y += this.currentPoint.diff.y; - pr.x += this.currentPoint.diff.x; - pr.y += this.currentPoint.diff.y; - ppl.x -= this.currentPoint.diff.x; - ppl.y -= this.currentPoint.diff.y; - ppr.x -= this.currentPoint.diff.x; - ppr.y -= this.currentPoint.diff.y; + pl.x += this.cursor.diff.x; + pl.y += this.cursor.diff.y; + pr.x += this.cursor.diff.x; + pr.y += this.cursor.diff.y; + ppl.x -= this.cursor.diff.x; + ppl.y -= this.cursor.diff.y; + ppr.x -= this.cursor.diff.x; + ppr.y -= this.cursor.diff.y; this.problem = points[(l+i+4)%l]; if (ppr.y === this.problem.y) { @@ -129,11 +129,12 @@ movePointsCubic(i, link) { const l = points.length; if (link === `conventional` && i%3 === 0) { let left = points[(l+i-1)%l]; - left.x += this.currentPoint.diff.x; - left.y += this.currentPoint.diff.y; + left.x += this.cursor.diff.x; + left.y += this.cursor.diff.y; + let right = points[(l+i+1)%l]; - right.x += this.currentPoint.diff.x; - right.y += this.currentPoint.diff.y; + right.x += this.cursor.diff.x; + right.y += this.cursor.diff.y; } if (i%3 > 0) { diff --git a/docs/chapters/projections/content.en-GB.md b/docs/chapters/projections/content.en-GB.md index 7b8ad96c..8d181ea8 100644 --- a/docs/chapters/projections/content.en-GB.md +++ b/docs/chapters/projections/content.en-GB.md @@ -24,4 +24,4 @@ This makes the interval we check smaller and smaller at each iteration, and we c So, let's see that in action: in this case, I'm going to arbitrarily say that if we're going to run the loop until the interval is smaller than 0.001, and show you what that means for projecting your mouse cursor or finger tip onto a rather complex Bézier curve (which, of course, you can reshape as you like). Also shown are the original three points that our coarse check finds. - + diff --git a/docs/chapters/projections/project.js b/docs/chapters/projections/project.js index f2d71fe4..ba659ef3 100644 --- a/docs/chapters/projections/project.js +++ b/docs/chapters/projections/project.js @@ -2,16 +2,16 @@ let curve; setup() { curve = new Bezier(this, [ - {x:248,y:188}, - {x:218,y:294}, - {x:45,y:290}, - {x:12,y:236}, - {x:14,y:82}, - {x:186,y:177}, - {x:221,y:90}, - {x:18,y:156}, - {x:34,y:57}, - {x:198,y:18} + {x:288,y:218}, + {x:258,y:334}, + {x:85,y:330}, + {x:52,y:276}, + {x:54,y:122}, + {x:216,y:217}, + {x:261,y:130}, + {x:58,y:196}, + {x:84,y:97}, + {x:238,y:58} ]); this.cursor.x = 280; diff --git a/docs/chapters/reordering/reorder.js b/docs/chapters/reordering/reorder.js index e2e12dec..3bf5c265 100644 --- a/docs/chapters/reordering/reorder.js +++ b/docs/chapters/reordering/reorder.js @@ -23,6 +23,8 @@ bindButtons() { draw() { clear(); + setStroke(`lightgrey`); + drawGrid(20); this.drawCurve(); } @@ -31,6 +33,7 @@ drawCurve() { // And the canvas only does 2nd and 3rd - we use de Casteljau's algorithm: start(); noFill(); + setStroke(`black`); for(let t=0; t<=1; t+=0.01) { let q = JSON.parse(JSON.stringify(points)); while(q.length > 1) { @@ -113,9 +116,9 @@ lower() { // And then we map our k-order list of coordinates // to an n-order list of coordinates, instead: const V = Mi.multiply(Mt); - const x = new Matrix(pts.map(p => [p.x])); + const x = new Matrix(points.map(p => [p.x])); const nx = V.multiply(x); - const y = new Matrix(pts.map(p => [p.y])); + const y = new Matrix(points.map(p => [p.y])); const ny = V.multiply(y); points = nx.data.map((x,i) => ({ diff --git a/docs/chapters/weightcontrol/content.en-GB.md b/docs/chapters/weightcontrol/content.en-GB.md index 18c8cce6..f7c41dd5 100644 --- a/docs/chapters/weightcontrol/content.en-GB.md +++ b/docs/chapters/weightcontrol/content.en-GB.md @@ -23,10 +23,10 @@ This does something unexpected: it turns our polynomial into something that _isn But the best way to show what this does is to do literally that: let's look at the effect of "rationalising" our Bézier curves using an interactive graphic for a rationalised curves. The following graphic shows the Bézier curve from the previous section, "enriched" with ratio factors for each coordinate. The closer to zero we set one or more terms, the less relative influence the associated coordinate exerts on the curve (and of course the higher we set them, the more influence they have). Try to change the values and see how it affects what gets drawn: - ratio 1 1.0
- ratio 2 1.0
- ratio 3 1.0
- ratio 4 1.0 + + + +
You can think of the ratio values as each coordinate's "gravity": the higher the gravity, the closer to that coordinate the curve will want to be. You'll also notice that if you simply increase or decrease all the ratios by the same amount, nothing changes... much like with gravity, if the relative strengths stay the same, nothing really changes. The values define each coordinate's influence _relative to all other points_. diff --git a/docs/chapters/weightcontrol/rational.js b/docs/chapters/weightcontrol/rational.js index 23a2f30e..3814c902 100644 --- a/docs/chapters/weightcontrol/rational.js +++ b/docs/chapters/weightcontrol/rational.js @@ -1,24 +1,17 @@ -let curve; +let curve, ratios=[1, 1, 1, 1]; setup() { curve = Bezier.defaultCubic(this); setMovable(curve.points); + curve.points.forEach((p,i) => { + setSlider(`.ratio-${i+1}`, `!ratio-${i+1}`, 1, v => this.setRatio(i,v)) + }); +} - const inputs = findAll(`input[type=range]`); - if (inputs) { - const ratios = inputs.map(i => parseFloat(i.value)); - curve.setRatios(ratios); - - inputs.forEach((input,pos) => { - const span = input.nextSibling; - input.listen(`input`, evt => { - const value = parseFloat(evt.target.value); - span.textContent = ratios[pos] = value; - curve.update(); - this.redraw(); - }); - }) - } +setRatio(i, v) { + ratios[i] = v; + curve.setRatios(ratios); + redraw(); } draw() { diff --git a/docs/images/chapters/arclength/0d7138b99f5986332a050a8479eefa57.png b/docs/images/chapters/arclength/0d7138b99f5986332a050a8479eefa57.png deleted file mode 100644 index 124e2dbdd1a6a40749356ebad1c4eac25a38e4c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10248 zcmdsdWmHvN*zKV^q$TAbAtizc97+z|aA=WE2?;6bPAPpU>6Y#WN$FHlknZk|Z}E+B z|KDHt$Hl>5xc6Rbul=ki<}>FCQ&Ez}!=}WBKp=RsG7<;~1c~_Z7ZV*^AuU+02Y=9w z<)tMc50C#cTJpa^AkQGO5@PCZDSQ7uzgN6^z&M<0;dn=qnOGrVRT*T;HeiPtv>PNP zWA=3nw=$>t!xIKwmb}X7$}$E9^Gj$}WgOhoEVaT^_MOwgLG;huS^eRbbPv0OjTHwv zr~QVFX4uC0_9wfIv`%8|AUGksS8KTn|1D-LfjUzlp^{1xA)H^#434>k8iz$6Nc{iP z#X#r|Bv7U)gn$kzB0~G&!w0vcWwiO9UO14^-@oB2-I19^MG>^Z?ispuA5}Co%u?cM z(o|STD)GfIt&!Uk9>~eamT#{<@!Ky#j7^lYGBO}cOu|N{rh)Msx^Q`U93ff)yZL4@ zO--^i5wCDC$?{~0F4voVBzbvxg;W?G3VenUr<| z(D9yM4spTF;M*;?x1NE)A0<>q9Z$DR!sxuUAzpW-al;Qod~d7F-^$6Y4GazqwZ}3% zxxBj|Jl!_?0#@&|^;;5mD;FaUt6<95#AIoE8(X{+KarP>V(7bb>G><(7vGH0(5~to z&3H6Ral3M4zbzgd5GX1t;(wJ-cR!SiiaDNd@d$a!V{SN{BA{LOktT{-0Nv|uJ0hp{ zzyJPwu}H zls_`d2?;kMywK1VPd2h<7u!4S*W{r4|C$Ko2bRG0YV>*i;?wb3@r&Z2ca(nyp%r4e zZ-o?Ta!9?OGuoZIqN}#H2>tTqnA+dMk~EhJrp)Mo;9AfBe%t`#lA)lMxim{xkW zHW=dD9qAX(fh76#w(r08-oWuMZy}~;q%Bz6JJumnWd_fnP$WvqcfI{YsajfE%{rBp zz844b%1cJO+Al4ww%gm6Jlx#7+j=dZxix2T$4Z`ZhxFDcr;Bt94PnDG2{SVtMn^}D zX=J+=+ttcV`wp~g2Pw5msV!(WiaVkC#ugp z^Ks6Ts}qaq>FErIm2T}yQ=Cig+nrp*JRKC6%`eI&dhA`aDS(w89#g>Q^;f5 zs}dL#WHkOm)$Mfi$qqlSln*77qseToEf`MDY4Gz)Fdh{=o`9>SwzhkvC)&u&EJ!|q zQ%qbuz&XcitT(VX=wxHWWGqXP-~E*3`y1PS7(Vm*P;$smubYm^NwT1zpyCzv2=MY| zX5}=)+7KMyCFYPe=$kT46Sv z7vjUEfl;T6k}GZ;Jx`Cu+1{3XAoHQ~{K`g5lxp z%&gyNwtqJh=KfSLfVArT^;^K#k%<(MJHgWT0wJNH)@vfx3`GpY8J6mZ^P3Mdm3+H< zcU-Qeyd52!;yOBLzD`~p+H$bSn7@643O(0npO!YrQ8Xrki&td2HphlXC-wsIsMf2Z z5cI6X&`;Rd$BR3HPots+GRhVrovFhdKjDbO;q096`8!~80_sc>>$m5#h}U+d5fvsD z6;V)!?d{0Ltp?&EO@Wn(B8%dc&YJo9RI|;CSGah+8p$0UMGObx?I%^`fR80rSdJl|?(mVcc<7c# zb)@+FLxqH0+ZGncpXQE;_7TQm#bQ-dRPZ~ql0}d|^uxl(EoTsPw6yy6_V&IRr)P>! zGr8#z2X{9Y_AV|`5)vfi6S)s4c3)pxPugGx!2?68d>X{f;5lhcO@dNiDE!0%(5s@L z&X=AdP$+b9V8UTK12wA;34Ynhl@y$j}0aBfyMB+pYMi^WlNj%ePvXbR0fOvT2#a~ zH#aw0sKGX=YAUCqLKsCW9DaG}7FL$rAIQZ>m@yaBL_jO#KRDQ9@0`j^PJT+pEYfO8 zMYiyom&#5nP8^m|=_y)^>ppI zHDAVH(9aL1h@@tr{{)Cd3HJA?7B~4R#Dk}^99FW3ZHfxQ_%K=q=@Ba+?<{qNaq$a` z(VrL;dEE?`S5|g*N6r)JGK0OPeDVb6mG`ZurFES-jU?yb_qE6>3xcKj7F{A8I&dGm z&Mv*@?nah^?<4IFi(|G?r&OZwECHLAoOv=LiEtg&A08NVhb-L_r-HC*gGIf6$~TO3 zFyGQWQx)>-Cnqa$$6UIPl$b^h{q-5u2rPVV>4dc0eu=VJzXcOSb*QVJu^xgsxVb(JZG0(%>YCM_*3Ddnp~yT)zxcG5J@p*WB@9b>NRytPbWH)K+!>DXg4@AVq;?$rbPD#ddB(tBNuB| zAg86Bl2d=4sIxP0+MRwP=(=C*C;}$eaM_(kLP0@E{Qeynv#WP@ma4tIT_de8tv_&F z$H<7@KOo?PI)VV)&vM?G1a4!OdjilaEFvsS>|}lDmF4KON!3tPH+Od^3(Jq+MG&wi z*b_`tOl<5dRas$fU?58?tL4L`PSSah_X{;Vufl)ViHG2eOG=`}$9E3=lU|jc@oF*+ z!$3wsVe?cP&E=G-aT9vRspRzcE2CH<_b+0L;ZUW633)oK$J-@2dHNm6d?Q@;ixQKnm<*mGbZYsW z9ksSuGY>Ru<9jo-iTlngMqtu;}#tT@jc07d8^oIBjWqgyCxMmW;f7M*zkP2pEiKW}dfv zzV~3*g=qnd`X7kfb^_7C&hxziBw%yOzg5hHCO!AakC-Q$@CCO~ht2cnUGxkLsr`ZK z2TPqH_3mfSi;LesPAw%Vi5Ed;D-nRs>V(Q(Fn_!@U}Uz2j2FrDIP|sUC~CD0)*)mx z{{<$!fntU1H}mNlHk$9>H6A8a5v6ND7uV{i4KeZJ zmfAD6qU+DeyeQxKFiQ1HW-1jG{g{<~zrXj8k;YKbKtrfm*Y2hX`<*&vpl_@Pm2w_l z@z}3O4aEzaV#dU4o+fTr+v0d$qnes)iXL2_;bayh1w>NuO|oMa)LmvvDZ&*7DJKO& zN&5TU!x*HYpcNnj_P||is%P(B>Rjp__8x%Y#B#rSwFCSQwc2VT9JoHp<%0JtrPsCg z;^mRdq)sSFUteE$d%#k8)h830pk7Q7$n;DD1Cu%4@rm`JaoRXe2)?aUH0?u3t*s#N zeN$9A$mwZghCI0%wLoQ%Gc6SD_*lf~VxN#-@a5wKF<%2FZEVS*Oy;~IKBd=iL5cfR z*qI|g(>jyow6(ug3ypZ%E{|~ z|C+Sks$Azp=jaP~!O&r_5<^o7@(E}S1A>W(DF9$DwG=^DUk%!hn77Z`CQHQ1>+)CR zWcH3e3;B*bI9AnNbe-=ZEgl6z|7ALs6RZ=Cp@Y!HBWBF)R|l*l7S5QlTu`!WgAFV|D9bOoO(+W?oK`SFhR!HySS$`f~ z2|Y$Kzneh+y!2{kPc%!Nor#GuR8*7>Fax=FO4~UdV!NQaAD!>%-kwbvkp5F#RWUSt zCM2|ZOq#RL%1$hjPCyWyH2@*Hay{SGY4*G#B4+-*#wPPmh@`Sb;;*kD{W^i8Bic$uSS+ z%H8$=!FsnN_DDI*4XZPxPoR$mi~cUf%xyD3=ED!W$8~mgetdC(MiNM@#>cA$grua; zN`)l8&&Rlp_U}t0V-eIjj-R+b`kNR^c#of6sWOsKRE-wBJST)2- zk7;}Rd!o>1&K6gw39X1i=h}cndCgquVeziT{eQ{zE_-&AafB6xCtLnKk;y?hIjym=4iN)F61W{5 zo&quS(bCzc8&{htV-nO>!rU)BmYA5CrRQ3bqdezhYA#|`u|)HF0;`DduiCZPpt`2ew! zhekxK7&`=_00ip?5HJa;^_g6J3~VLm(Ur?>X1Lwl+}^T~I9A9Ull~tlIyo5+kVmxr z`F?Os4R0Wv{`_EJWCAKnLqbN@(b_{B_JotN5t5K} zfd}%tj`8(CfKQg{1x%GakoGLgq5(|6W!#17v^^dM)}S1gt8jXH%H_QMx>#2_pCu+R z;UygdH#hP?JO{{|<0i&8vzZ|w%t~oOZ<*8MeQ5-nmzKGyICN`G|MxB%F$V|7U|I_* z6<=e7H7RP_-A$j2!Ywfl8M`rf;FGa%Vc+mD8UbA%RNyLwUrVjb_U~$Vf!f_@IeqG7 zXgT8~w<-eBtt?v7_MP|S86jp@L!tXtM-WQyz<^&aqn>9a{e=RyQ`FP~#`&L+@~Cqw$lOcV$;~_+9rYZDy7Oc6VLBYU{PwA1+c-P@D$Fj=cpy z0O?sK_t?}yxF1T-XpIa1@$s4owNO1JkHvjI44aQSsWRvI^|z*!@lUv2?ufG7PZf34*SwN;1hgrj z71UZK5v@4RzgX?qUW|+rjv~U(SjvtevZ<=tc z0vij9@3%k7)8$4S*Jo;^N$JBoa@xeRy@5R_BqS1cc$6$qb{k?cj(5HUbo1eJ(xSLo zB3`VptE#N!gxTw}qOsZ%&hAJm4sJcwSfypf>2H^6ql1IE+0xO$`T6-dS{#39MZLeo z#1IAs2ZLfM6O?!>qWjZR0C1iDU0o7nMG3OQ!^7I;hDd*Ftb2e#NR1IpprlLL+jCJ< zQ>&<`v_bt9!otGZ|KuybvYQtICMh7P()z2Gryv$V#sP3OrREdUj@ddpkQ{>nYalKw z8|F+6XZ=;I;3h;{Yct~y-agml8m)m_umKV`V5BktZUadc!I-CI`Fmm_2t;5?N{apU zse$3NEn;hTh9@*K@)wv3L~YKyK_7R$_wS#PU{`$pM6ttyU=+L&1`%EU`NZ7vx9SH8 zbgq}6ct!vC!Gem)-uWm0Dd3eNGctn8tEusEaBv8FGDneRzB<_O|Uc3E6M7 zW=_5EU%w(O4tL6m0Pf1^&dE}Mw9U+*6&B)EczHl}SQO06S^`^Ji8V|9N?9l~a7$YC z2llMAcbc%_)8Y4&=q70Q7`ynzCRLw9nKw}8{xKW3`#X zB`_oe@YU!EFAV}}Yu_~4Q$NA>t0e!2gQXLc@bV#|#bX3C>0>vh4Xm^yfFHcrwEqXA&|sM458pQ#q_@6 zAQ~PviTV1q4W<-{iHeMhHq-@zp~7xKgoU+#&^IQA@>>HplJ8h{&oh=yzQJ@+xosTD zXDkwi84UVAJ;PBjqTU8YNijIenfplMKjlUj5by*KVf*=wZO(im+>u!WT~TL`1-6K{ zXY}G?fckTZ(!SN+oM~UA>~ha5eRjQT6k`(~3mWOJ5CWYSr1QZs+c4PuW z;|8M?K=Q&@rW3k+IJ`OVF`kU7>uC{u;SlqRb-u;Z8<=5w}9YGca`Xl|4zPgE^`=V19}jnu8K zA!(IO+RWtTwS8l5>xrHinXP`2k<9?xyI62FxxZ}y-7RUJVlt;AU9@x%d^JHqq=v1L z#U1pbgj60x*VlVvO?6m6Cc;BQJGwty-ypv$%7Cn{t$~=t8c4u^0wl&`uJAG;HaxJG zr@`Hwjg5`r`E%5zrKLx@_1iaMpyn{2pQZ6TAnP@`1OW`bHjpq@qRUrN_KolZgO(X$ zu%iR{#fujzYH9(Qne-hUa8;FYu2psyandA?*6hk|2`l z8#=At!pqCchf@X?TxR{Q{BB$%4GjVYExVwj?&vh3w6Vo78O>;yk(JHdnT>H*W?Jwq zDVck3IFg16oCsa3tUJ>{lnpeiv@Py-k$+*O&7#l{SLA&Uz>55IsAWxuV?{`K28L(_3mDJiMT z^VxX7av`T1oLZP=s)Xh%r$4H8G78P;W@cvE@9=v9v52`0+upL=mWjCu!5Ap%-wMC@ z*1x*Gz6?|>z|_Ib&6z4ID<$^r#p&aRCJ{v7BO zgdJF{#BfYzz^Txu07@y)-v9sY#R5)Z0|SH0>+AkON9#&_+2W?!oL9sNF8gy~iHQ`G zuU6B`iSqLDIz+s#)m`coj*gC=Twh+w{A#rRx(3QgM-q<(cI(wT)ngb3iQZpkbG>|7 zwtBBsrjG?KCsX<;f4#k5X#ULLWN-h2%fsEhaTK`8bg>Q(z3yK56>hvQJRS6gc3{=xa5GHH|o*rcQDGiy^bGx}GrROh^;`a$=F zp`f5(f3~ghzQvssbh*>Dwz_?HoSdA!BO?~%<=9Owd;Y+=e*gY$zcEaclb`>nHMu?9 z3j_6Ytjs`kuHh2~JhR+X;yDSn{6|1}0x31Tmzym)zi|&00*dtLUu zz~Lf6Zf|b^`eit70b571wY3HM2mHrDU=5&6TiQtX=?3vV*63_a@${(}Xs%2hp4*}%z=Ad=_1*qB zHcQ}ZvXjeRh<~*#_dn$xnm{1~VC+$V2TJE#OG}nZ&#{FbvveP@+2V$V8ND#DRcv~i zX3-nQx>Kffo}gQt>c1e96-_Q`t^$*oERYIeBTBN<{=P`GCpk#C-PX}1JJd&xfwcBWswc8 zto`&04aLmK$$9&Xux(<36mX3aptU+aIg!UMtQWJJtM>zr4$R-)(}N)*B0~D+2sjRC zVuL`vW8mW>9~&FvcUVS!Wc`b@%9h*wP-K*pIP1g|fzuz%3qNOKf_LZZIl9EUOlnv+V9eM``C6eFRj<)*vR09o<$9(Xu zzJ6No3h=UiQVE^7AvJfwxcIm@G+W!fukUMS$Z}H!KB0r772P09#Ky+@HMt%vFSZAe zdLQJb`(WTxv(!Zu#%qkNH2j_9oxw1uO7D;BtF@htNle6)l$2y)Wrc!$0B0sR8Ww*4 zCbIoo?N?gL$tzid;$PFINnu5AUV0YMnKOQ1(-K2jkdVBI0k?q2!(*-b8v72 zv|k3sfF@q^2Z|acIy$=Le6zsd;NWA+MnOUGR$3av+}zylcoi#6)F&!aJR}SFndMX| z&7%PK<;xdrS9pbLwv?EG0Uh`X=~nN%L!kZS2(}Dunn}Pqw0?isc zxO9Ja<95FL6y$52<3ykt9=ZupP*Q3(&V{cRSPI7F<>ms&X`q=@cUrr6J1JSrVXIaTXF}2sk40sD%po+*9W(rLtbN7udLOEo9KZoLG_$Kt%C--}1wp zw^1RW9}f%*!}?oi7v17<5l`@LT^4a}4T>vBMSy;VJf6G(#{t0Rg60UKp`jtU>((m8D^Lt&tE-ooCGBF7NCddTt4?LYTscg5A?VZJk zhx?nCAiE!JPq2YF6$9sRAd72j8Xv1wYZa<%YAOJ0U}|pO(bfj(iKZ*#5;tQ=4nH@M z94J;$S0@3uL~fFi1Uoi48RyfdPb{q7pEZV7jwF8CfhsweDp>b>P4l&~*=#{I$g0nH zc&b)+wrhX!EqDgtkaI2qHR6#R0i7T+WOKen5Tuk403hOb11evlv3lIc=}DUn6mB1p z7J$0;kq&ZMc=!Cc`2J)>6bOD;YHEMJegOUm4t}(4{mDmy=rua|<>oS;o}E34E4Xwb z&HY=sk(9jH>+9>A;|0XPL%AGRWx#P6WMINarOx~AOsiP84j&+{dXI~bxl|S04AN0u zpeT(2by-_iH{n)AS4U?Flsy#$qHrwzt#lN17|7*t;NtP|@myS7zQMs#4Ofk>2l!M} zRG?6ZDJtTDy11sFHsSK`?O4nmV1W4D4xf#WkGHKH0d=*5Qn=P_x(M_R8zbqRfB!aW zJ_VVCl%uLLvo0tI?TyVe1n_i#A;ALX2}w<*d1Oe8I#7X|W`Q;ZBy+q+=Z65Q4+_E% zADBJ%Ap7)~?R!4cY+qLwDyR)WGE0Z3w~FQ|Bq0O;cx^XN?c(CX_2vya1f19)nVg(_ z)D=N<>?Wk&(4%#J%T`orrg838TI+1~NB(7N?M=b!v~n9>jm+I-#Dro3Mp9A|1@P0y zBO&zS!R1j5n#YZF*;!em^$sRq=tR?;Ng9|YFiI-aZ)ZW>90q-fOs=g$PI^E93TYVX nxRog!lRhpp_W$BU+|k3w-e#DlU+7P8v=1UHsU%SfH}wA>pw)W2 diff --git a/docs/images/chapters/arclength/475547c773a7279dc037c9ced2c8c6dc.png b/docs/images/chapters/arclength/475547c773a7279dc037c9ced2c8c6dc.png deleted file mode 100644 index f3cff42aeb0b1c3c9cb80d11fcb2bf16a84b4084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10590 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

DoJMgBX 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 diff --git a/docs/images/chapters/arclength/4b5d220d02b08f6c9aa19389255ef8bb.png b/docs/images/chapters/arclength/4b5d220d02b08f6c9aa19389255ef8bb.png new file mode 100644 index 0000000000000000000000000000000000000000..48b1078dfc665724900e18ec1908dfcce64c288c GIT binary patch literal 10668 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 B?#loG literal 0 HcmV?d00001 diff --git a/docs/images/chapters/arclength/4bffba7dda2a3556cf5b2ae7392083c6.png b/docs/images/chapters/arclength/4bffba7dda2a3556cf5b2ae7392083c6.png new file mode 100644 index 0000000000000000000000000000000000000000..a672359daca2f8ee542e0896356ef9643a260c90 GIT binary patch literal 10293 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 OLZrn%iWP}`^8bHikF}ft literal 0 HcmV?d00001 diff --git a/docs/images/chapters/arclength/580c33f599b70de44b17c546098508aa.png b/docs/images/chapters/arclength/580c33f599b70de44b17c546098508aa.png deleted file mode 100644 index 5064860a90607fdf97fde1268460f74b296fbc75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9830 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 KQnkXP@c#jc=8$m! diff --git a/docs/images/chapters/arclength/dc74a2f2da19470b8d721ece5f3ce268.png b/docs/images/chapters/arclength/dc74a2f2da19470b8d721ece5f3ce268.png new file mode 100644 index 0000000000000000000000000000000000000000..ec30941df59a97cf7b44ba7f2867decfc4927f0b GIT binary patch literal 9933 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 diff --git a/docs/images/chapters/bsplines/984c86b3b357c799aaab5a5fbd48d599.png b/docs/images/chapters/bsplines/6ba59877389e2c856234403ecbd953f9.png similarity index 100% rename from docs/images/chapters/bsplines/984c86b3b357c799aaab5a5fbd48d599.png rename to docs/images/chapters/bsplines/6ba59877389e2c856234403ecbd953f9.png diff --git a/docs/images/chapters/bsplines/4c71f82901edc1a0acae31cf5be12c65.png b/docs/images/chapters/bsplines/9c4bbb753918e3cb8cbc5a770a2af9ee.png similarity index 100% rename from docs/images/chapters/bsplines/4c71f82901edc1a0acae31cf5be12c65.png rename to docs/images/chapters/bsplines/9c4bbb753918e3cb8cbc5a770a2af9ee.png diff --git a/docs/images/chapters/bsplines/84bd623b9d3d8bf01a656f49c17079b8.png b/docs/images/chapters/bsplines/bd03680e4661ae7f4d687b2f229d2495.png similarity index 100% rename from docs/images/chapters/bsplines/84bd623b9d3d8bf01a656f49c17079b8.png rename to docs/images/chapters/bsplines/bd03680e4661ae7f4d687b2f229d2495.png diff --git a/docs/images/chapters/bsplines/d9a99344a5de4b5be77824f8f8caa707.png b/docs/images/chapters/bsplines/d9a99344a5de4b5be77824f8f8caa707.png new file mode 100644 index 0000000000000000000000000000000000000000..c955ec202bae7de6bfe0d1e65e6e4421247452cd GIT binary patch literal 20950 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 BU={!X literal 0 HcmV?d00001 diff --git a/docs/images/chapters/bsplines/9915d887443459415a7bfb57bea1b898.png b/docs/images/chapters/bsplines/dda4911d5148032e005a02ef33b78978.png similarity index 100% rename from docs/images/chapters/bsplines/9915d887443459415a7bfb57bea1b898.png rename to docs/images/chapters/bsplines/dda4911d5148032e005a02ef33b78978.png diff --git a/docs/images/chapters/catmullconv/aa46749b9469341d9249ca452390d875.png b/docs/images/chapters/catmullconv/aa46749b9469341d9249ca452390d875.png deleted file mode 100644 index cb6a47d3044db81bb91d484fb8bf97da27f84e09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6622 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 SpJ6|201!1D)pBL4;Qs-T4K{ZG diff --git a/docs/images/chapters/catmullconv/e1e640b29dd07f905c1555438511cad9.png b/docs/images/chapters/catmullconv/e1e640b29dd07f905c1555438511cad9.png new file mode 100644 index 0000000000000000000000000000000000000000..8080e3574b1b9a92a302e2df81e20edfa8410b40 GIT binary patch literal 7096 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 E4^J{i-2eap literal 0 HcmV?d00001 diff --git a/docs/images/chapters/pointvectors/44d454f380ae84dbe4661bd67c406edc.png b/docs/images/chapters/pointvectors/44d454f380ae84dbe4661bd67c406edc.png deleted file mode 100644 index 074d9bbbc340f366939093717e62d414c5c55b4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10037 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 T-5OM`!brTA5iJ(h`u0BnCYHKz diff --git a/docs/images/chapters/pointvectors/f4d72cc162d4cbcc6d6a459fced01cfb.png b/docs/images/chapters/pointvectors/f4d72cc162d4cbcc6d6a459fced01cfb.png new file mode 100644 index 0000000000000000000000000000000000000000..de58b6e3677d6a2996f9a6bf9a6336ca8320b7f7 GIT binary patch literal 8726 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 KREm{M1O5w-f7Pr2 literal 0 HcmV?d00001 diff --git a/docs/images/chapters/weightcontrol/0ef06657f0540938686b9b35b249a22b.png b/docs/images/chapters/weightcontrol/be18e8119472af796329f3e2159bdf94.png similarity index 100% rename from docs/images/chapters/weightcontrol/0ef06657f0540938686b9b35b249a22b.png rename to docs/images/chapters/weightcontrol/be18e8119472af796329f3e2159bdf94.png diff --git a/docs/images/favicon.png b/docs/images/favicon.png deleted file mode 100644 index 7c2353e8fc92ec9f035c3bca3981ff8b020f5955..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15466 zcmeI3e{2)y8OM*&RUuo`&}M^NLh0@ZMF+@Asv7l1H2t$k^*xvK+ zyh&a~TKCWNS~~ll_j$k1d++Cc-pBXP`-|qLW!F`Huacsu>q3pe7WjKByzZ#D7Je^3 zF?Iz0%t|z_G$^X-9qXF0Q!uN=>9(PEJ9s!PYJOO)Cly6ZwA<3(O zX^Vg^Rjaq39olQRsY<=Q-5qAbi2&$U8`mX4>$;{kdEIJRQ0$BRmAcYZi%)!VyGGa)ieDwT4ioDMzN#c+ZkFf7mT zJPmu$MxSO%X<9RG%LOUK2?9e-stHroHJcSzis-#&z1?mNRQ%-U6;Big(u_PiNRdfP z35Ij9%oL(<7%z**Csi6|!&>+x`I${RpwZTs089%o^xmWl8rA~Mylt|FP~>8qL~k;d z<)g?9h=Dki81Uh_NgpB6t(&^htxqxUqI=5On`*SQIOC>Zd8U+sv^s^%^5kUMRLHH6 z59Xg3NCL^!lWn>l^XIaxx$yM1K)}i>kL}KORa5kovB1ZmlG1vYqJf}f0>7oCSr^Um zZ5%7|yvXu2>k(PDEJ&^=5+e+AUy)2{I#I^;MdRp-8tt1_lv2;}F~VUnq#359$siQ; z!?`1-X+@E}PIsLrA}dm1pt4{S2D&$?!n!2I%KBJy zQL=N9yt2EFr(NEtLc86r2raNK4;>Ypu&TIuLGU^YLrfB8!cdK>0kf&EEX!c7Wh+lB zSTnx0;E1W&3X+hL2Cz0}y}htAizTO6Q7lb%gNu@E)gHfWr7uu?%(&LlV-=NonL62W zP6t6QewlpgF;d+?!=-;NRJPaDK@2@=rlcfT(gibQIy*BLb-WA>?_;c59aH}Y3t>oW z|J!Al&aV2uScXy-%iWUJ1r$G1NZ>-l^j0pnp5u2`VYg1)i9SUZqk1wfnSM1cbpa-! zb@`Z5V`)rZsRjk~n4S#l3h=`^Fj;e%%KCE>VU>UxD`j^l=VKfdie@zp zVjV#h)_KFKS58PVt3e%;3Rjj1z2(9(M_!mqg|gSO>>kgx!k0eyzR46{I45lXVwL5;;Jki;RG5yx0!+mG{3kMt%ip?ZE|Bvn4&hq6QjR`*OgNgHBduQKm8p= zonJ*!_3#8~&Fijf0)M5b8UG9gm$aq-{MD0hy}XaD8NSz%s#&wk6}6hdz|?B4U{ zvd^B=56wR`$9wz_+Q5bZd28^?nSXk_;rWB3O}m>fOKG{!c_`DkH1pWTnbgxeLYcXD9Tes-I2pM5#C}enBi>v!yYpb*%Lfi`IvT5M z9iI2-wF|%dNb_f=c%XgP$jPx)^TLN0SImBW^!%mOXEv=Js_p+x(+fv_+_`1>_Kr-; zOEt @jRUZF=E+f98%*;v=Tzz2>L>c1!KWv4{67Hw3FkZ;rlp)5kr7?;HJB73tlM z&pUP>d-(K)XEsN6)DG`{z-~XftM$Wle?8i;`16n6 zTzY<1_%Jm)@ZjkSd**Iy9NO8t>iWUW!!lR>DCBv^2_KyZS4aDuzL1`=F@1$Pe)0RjYf2=4Cg?lzt8{O6x@ zr_Q-^YpP~fQMIMt)!nOCFMSpv3UVJ%kqD6>5D2QIgs2h(0)-0xkP)E4H!^QUg~5k0 za}f~*VPhLbQY9Hyb`E9uii*fN!Am+Gu8uc=4vp@hHrGC4ek67HUfL&XZ419j0sfzsxNxPY3I z261p+$+Ee%?)?lewHUt~=mkY%{jC}z<&m>1+>DZXB)2>GHcgC+4WgD;>r~#5hB%*` zf;||hQ>N~`DmsQ;HdZ*6R#HI0(83^o<4JO5+rqa7t=AorOC7(-y}c7jhK7lS-o_fU zqNn>yp;$fMS(4s4Cbvp&c#hfgozEG{$t}wPnoPQY+j#kBmRnBdTW)6eLxJ{vwoNT3 z^4*BSo~0giH!gEM<$PbU$LXYJQ|@<7@^!STnkD8nlVLe5qxH)eh}t+TND+Fd5e8we zSw=HzpD7uXpToAZJWw4PVl__?(-*(4JxU(7W7DMj;+OmG-*rEc1!a;J$sd0vMq8!+ zJY8LtI32zW4jIu-LciteuFlnYo0AgR!!QoQk1`r6G?I zxxjl;J~v)Kz}nbJpVZCT%Epn`ji3A;d-N&gw*WXVr1^mjs1by)= z#*T&#=5|izwl<`HDe4>8Iy>=`gO&cr7Od_5P1eToUu*&lV{+5CV`5=s{=21r1{xXu zdz_uKgVjHi8yPYgTNzs$+c-Ibu`K@{YiDNbWb0^V`#+HW_s{>!1c0@&vj3jrzg>&9 z^}nZZbP{s`+xQnl{@c-xD(-g1OiIR%w$2WQ#$qmDnQ#8?#*SCS!C2qP)vaV%)rdW z%gp>ALuGA^%uU??yP@oCyd2=k|1uOvjgh{S{{QP>BST&jTL)`>uxE2?eN$s5I~!AS z(tmT3_aAKrCI+ix`>)?i0=4%aDvqE0e^!70tXo!=SJKAON#DlMSW=Xq959N}+}wzl znTN-SlbM@?!O##0nF$9wD+9L)rwIcKyD>AnF&DD|GY8jyJ}+u(==@h4{yzU7H^a!* z5YYI)*J*5Qtk1#1VZdNu#Kpex<jKbrYp&%2r#1ET*M zaruwg9c@jVT=gA{g-ikO{!b*5>3>?kqrS`ke)a!nr}-bt`tMf%zew=^$JPIfIfiEX zHm1fv=Q5H1-4D}W?erfhXeKa_wB#+GWhUs&2DT1NIL+%t;4Bf z3xQ}wNs0=oxTPL`c6Y=1cy(2{cjV-X7bA#8ilO>7ssauc8tH2V_rXe?pu*@&ADbP7 zq40HI?(Arg@^jG~F5e~MfQ_KwZ|j$OJg-Me3pvCR8jbRC7JeB9A7 zUie$<U2C3i|wJ7362oy9g6l^*I#tIR%JS@Tq>Q`!L*qgvsY$#|i zk(Ce#R5RI$=oiQ`h8wxy7h42AOwv}a{~w0CI>Ep`$P4Bvy~RO-NJvXdOG@tUY{8-k z2Rl-?`e-*H;k*zDgpJ>yC{+IN?bXZoUfd8IJiM)q4I@+2TIu^aR9`;K6{bJ^t3f1R zC{~$#5J?lH@^~FKdSfW1vm25jdNURJ^R>1l+;)1~F|_RuqF-9<>c8ZF&0ihMgE+j! z30>_7`ryi;qjuC(wlH6=+X6nr%fuk#Ll<)_fW5cs8kq=}e_}Sn2q(mqapBr@Qf7?H zLVyfq2#^R4NhhrADE1Bq6|4Cba=!w@Ng<*iI#$}g8cRw`)6vscn;GQfC^dBFYOz-a z1O%9yn?vD{;rUG>K?D`QP7=RIILC&9YPAU1*=hZmo143_v0=5`{CKrM5ERnc2^w)gcCIbWz1sa@^PCy$h z3ptq@oPr<(LHM}cPT8eWqPsDB(gGU`3qs1q7E4K@t|lsH8mpQT7Z>m}@aKa8DfgGe9#_%jEqO$`W7%h zxC|d3e|lnKAe~<;OW|Oyrk{;P+UpkmFU^2SLOyxz@3Nv&h`xHCWMpN{P}@;JB{D->Sh_PWpC{(b0q!>lW;UOT7rhC zgHiMO(7R~nQ^iV|Zg+TwxEmNFk1MuHYS<>}FD(ehuaE7LIw?Mw3>#yhsncU%V;gmq zB6w`V3Pt^83eCA&P;3gdcbgGX8a0_PP$xc^*-Mm|FZ!{oG*&{s$oVN;Fj5<%eM(Op z#2_LvT4EOZXH4kQrc)ASww|#tY;P=DVvjO$ZJ3}S4XI>s1gZl%0#r7QJ$|#ie9Whw zeT2jeCy2aPBMuZMVgfQDQC6w$M+oz~WRGr1zlV#}3fBOHtbU{uWK9NUFDdB24&(2^ zerblHU-&S=rDig#!6>oCnbCm@q0tnDD{e$McY{iM!K-s})_KG(8uGg$wc#OP7KQbt zQ*{|5(1W@NV#hzDK;BBONgaoX zLLLQfXN)kZPiLui{0?m)kN^4O(JldCluB$Q)1YVy4P z_KIiBiW7bgE;+yD`N?w&7cgz}PuytE2Y5{tnw9ZSzHa0K_NU}g6gapqk{0(ydOLOe z*j)-IM@s+MS(+a;WTZfzNlEFa-KsFJ;Q8R?{E{ij-hF-*SjNZYKb0?rb@Md)_#6^gt1l%CPi4wiF|*iBDDPZ zdhttl^p~i3xSS6i8+~mXr7A}+APxNljeM9FWmj-Q7?x8dtM|g?&38r5K%(!OD$RmFhuipLKkU3t^IY7boA=_ZK;p~*@~S=iWIHGb68^td{htu*YpQ}*=s z_Wt-07Xl2U_HU=RJUsOgXk6q0DEa4qX!ZjceyiRq3i+ z8Wz8WqK2KVzhIYb&}Izk(6608bb0sm)f;?LC0ek#9!h&xAe(}Rk011!f`{j}vgfts z#;Bd|ddQ-U&wgpG4G~xVbI$dL4;KVmr$xB-^tvt_&j+HUByyp zC@GDN;K|C$0&P^Pdc4$>a@>YbuRgM{P@-Dw%$qiA^=tkxkwJzaqFbZN8gdcc;tmK$$7L1E|MjX&3^v6jV>*%BjX92&) z+1VKt6?JfM5Y7*ZA76GHN301**e4T9$L%4Gl);i7pJVzpT~V&;L)5oW#683pf?SW z@nD3uPowRy^Q{t%VlF1BMe&khg)F&mr@i^`&CLX;XJ8}t#`2K&WF%~b^eo=q-rgz~ z$aQ6S^~F%yHlD&I+lCXc7;F!vCBk`LA3e@5KLt`z7*ul8{(XgRu0H_vLl-B-7b|2} zuYHr~DBpOuR}6IJP1et!Kb!B5-pL)gQ|GD{6Z3mq%vPC>X7u&-wLF|5^OCUh^4{Ga zx5!IL3D-_oT>2wohl{_tt13hDxNcUIu(CSnA@Ld5Ee$^%jXJB`=Wi^o9+h zB|7KUS)BJKBvCR7n7|6=ZCi|EU|B$n6SDwx4wx)8CZ^rszB_`5NxQD~R$+H{H@*1a z<;#~|f#yaLt&x#32;|Yh**}&ak6eK(&%FtzY@??DyD0a0qwEX}EoV~{TM0s$G~PIk-hQSQ84Or*#Hxp$ z*PbZ*oHAzY$-u}YorfU!-heaVf2=cN)j&^Q@?+;$r0XobInQ_wr$mH^iivG*ZdRUw za4CalDwW&b0Qklb1vU64j~dCo+PPvCS|GP_F&llc)aJ=cKaG+1QK_k^uMcKp*_hyI zXva1rb7umY!bO&Z6u;vqctUojO6LPniM*fhm!&DNYUd*;0t>z(@9U9A?=)R66_=J8 zd*}N8;iSXO>;vHn+c00pt&`8)c*afYDo_W^#(!{zw7r;+ zqGOHm%SuWfF2?1P`l#g7=@a@j0-TPQbQlw~=<&RafoD)(e?DkJPT5s%efrnFnVY|* zp&=0P=93+FcX!{U%qxFhmrY&i!q*jLlUz225>&>{&BcJ~%Wx4dh^7{5U@n~8Yi#5* z>gGt2al0H;))G;voV6;M6%fJzXFfnDk)B&nP$hM9P&J&`HO9{Gaxl~82k-f7Z(7%9 z@s~A`sh=_HEOmxg`!%0BLve8MMoRUJ~w(|9Ky=R>+(&U?Ni;a$zm6eLhMA66MbhkA`pMK~s`T4<0 zzcaB<{pF9bLcqa^&AirBRICIFy->N}=a?>ViDpeRWMyOqhK3lKn6|Y(=g{m0k$5vF z$&?iFJHz>s^0~gzZFEyC7-!i=1fJJLNpSuy{wKGuk+*;EcJcHb3?D~~RG!53xJ8Y` zX9M4JE3;fi*7CZ=BVS*?r*nT&1S)K^f_|^2t0aNPK0W3ct6wdThqhmnp2%f(eS23C zSCPG5ns;k5$&NeJd;R(T7Q~aq<>eqGx|H!bUF))6?*`K5?xL)M(~p}_nNCbALr=V>6I99ZT)5VS=(0k_^H=ztP z+%fT6wud^uo$4R2=IvQ6b(EblRDL?k;%N?|JPGHK!@4_Q3u5@I&_3=KWZ*Gqb|&co z?+S2y^VKLnSEi%Iq}OA9Ma9Ut%Ao(Ja-XN$?c3x>kfrblfo+8!+WYpJf6vEd*tFiG zhMZ$k*T)y|m~~J?RV;_^kP9&!DeLiiBAnR}e*qe((v6YJ!};0*7TFXOb`B1(MHXXd zAq-$k*?fU{|9pRC{LR(utvh6_${2a6U_olH&;7+_%&aZ3oWqSj0%Qs3Q z#{g{L8D34H=nD-+QvGvw#+vMMyX%pfl+;%;r=rXxD=YMJRIii0`Hh|{nTy6C2+xpN zldcJY?}IAei13+7g959sxV-sK!b)cdwhTiUDMFfDkZOq^oaRc;rx1EN4Mj!FGY8W^Zi=*Uxzia`)a%3z?$B)jYzN+euq#R=V~GyLWs5`RMnC#UK~n;!X%TWzz5 zV77)q6T_u7tqITFyo66akIp5~z%i0Be}FSfUTREA=1=KC35vitEfOij&*kY`a-=J-ix7~g4QS0ffNaavkhlh3pFP$Mob zu6Pb+SNg_25{?)LCnx!&Z;e&t9UeK%o|4Qak+b%}&gJs+lPj?0se`?}y>1)PA6koZ z-k)51C+DZhQ9IJCN*5~7R3JlpU;swVhlFEWZ~%`fHfDhlKjHSIwRjA>57qXjpFx zcO?J1;?e+Y03{Y8Ythg48GY?~hpzG301C-eOqfdO;&roXAZUaUTYc0S8=n5apVPC& z=lf9wDZRrrMWi2QnGoVv{?y=t$`5@<5+dqL+G)Vzfmf(9H%9*Qy|yn2Y$Tc)Jk<6Z zQu9E<-HDf*j~*<>Oj~emGlGHXn6W2t?1Y)Sy|Z|c_F)H+rp=ZU<|8x#Wj&q|vt+S- z3QW-w6kbRBYGvB`F8C#R%(Ws}`)1l71Rr5|Vjh5rQ7N8G4On(v{;ZrY0|i-_<~JR7 zYahfHj;D~MV!2Vm!^O>NXIZsJ#*~+cX>^fgcVmvqB_i-6EYj&_Yl`nPy20L|qh0So zbFAe(fAd2xIoXq>_@egLWRk;|4NigDfiL>Ey(mN-G$*KRU zHm?^ZJE5RBkt7>(M~oa?5y=_bvM@!DvXy&}RQ`7z2wXiM0 z950LL`=iMBXfY%)ku!~;cCg^p@~GAvQf>k(nL&vdG-P5*JhKv+7fPN6 zX(;_gUX1PQY4HS>x-N-meupGYUo;nj4@j zxh;o#dj*ePtIYEs(X1~uc}BzVjs89jv!xp339eX3V)t{MNzSbu+kw6UK_#HQ%qs7ub zg@3RK8yqbOIf@N^>I|j9QVnMQsY)tVi%Rsy*#SE33$+QGS8V@H3%~<_a?pE zspZr8Oov|Orf1b*g9wwFI>^zJK}-?E492n|Zv)?S1Aj=@^RTA9UD%||dj1#4jt|Wp z1C@%1O~owf8xYd5>UO)CfQ^l`Hw zG>>C>(#S|iiO#nj*zwG5d#|#&yfL;^e{sertVo_jNo4x?)E&QPQe~AV)N3+3oT~{! zC)pa91St;?N34jUTWz`4YkNJZN#&g_c^-?kXeeib2xMbx>l=xH_h`0Qoj}r{NpqSy z3k%Eh-E@l`&kq+Xo95%@dnaC<@=r|&;{IgKhY-k$9XIzPf@-N|mw8sU`Q2Yq-x$~p zKbYEA8g57|0&_w~MpR~e&@VI<>-iou6oT^siuOpv??z@JSBtum&-nY#@7*xCDfh>UFfd^Zv z+FvX1{>_{9yRLTSEiy}-FXDS6A}_?YHG?*DFZ)xn{Ngih>qz{Dhrz)Ytjux z%yVylKZrt2s$NQ_07-LN*Zl#MHAq$wduM~kJFzbs*-Qpbs>V1hrxNQ&#>UQocGd zBoP2-ncf$>wPoUT5{TY-iI+Fc#^mIbU5Xl!GH~1F5t<0Ur`o6{|uU*Jnf?jZkj_w8Y`Kyue2q90|;X{>?Yy z;p)Ggc0m~o3mY3ItZuw$pWOAW5sw}R%pg)l0%ZAum>-#Ssxlo|dL#chsk|TVz2>eU zQ$q6jViaf+`*+H9CsXJ)aX*h zzKrPZ>=Y$Q87|WeGVIALb!Nch=0fpcj91`Mw(gvSEuhCAy_6ZfiCR3j=vEsnl?UFd9J~51-1pf5gz5)s( zfY^{liah#YnTeQ}y%#f<6k&XFZ${{`k>W&A)Ce~3+E-##GDS^84c>y|BqOJPnggUJ z<{i>2f$IXo^vCFI^_Bva^ZIOV7329Bcux5YFYOA6y6_@{TS*%wDscKY9Y zY=q(&2-G6J9GE|i!+1F>C+82E6jgsues>+Xocz3wAZJzbF?+n>Bt*+gV*Jfr$QCg- z>XVQgH}@NMPTz6K>!U$w;opbkC8p4Z?s3~2{#&!Z2fkWP>y3~u_wnLHvkKgz1_WTN z{3Z|w89tE2siv0yeRow_R#*rsyr3kYetdS2pU#VJ`A9@y$QNopmOxQGllkR23-Jb-`%K z$_~cSsez*0`T04>?g%PQ+z$yM=RoV zSrK@%GyTC*PG6xt@#B64&K#ZpA|>Rdai^%UTx zCo<8Q+tau>W|Q#isy~(LdNw_8H06;UrY0^@St-kWd^QsHoOq+@UW+N>GioQY7{Z;k zsMkACiYYGpJoEFuZ8Ku!KkdZs9f+Kw+fhZ|ELJN&T5f3pg-@&y|Lh+{MMWJ!=)eqQ z+2kq}8WsuEsRpj`SbU*8rB!GC8qEmaB)I~S-~MfSGmY-&AZh4xbE0o#)_zI@5{E#= zM&PqoYaVu>3xspEflWpbzr*WdEG#Jz9l8a@RC;j2g!sy$3gLt5114;T{ciD*$re?! zc0cI079iu07FZKSg!FEf1%k%7&4HIY)5qc-DhNe{{0L=)O_U|k28G$YXLMrNMph`r zE-E-440TYiNG5kFhBK()QR;5fm=#20mOd&%i3E8d!uGPWte)bAAVci9U;T=S$vv=o zz#SC~ds3sp0RDL9V>Kya7M* z6IRMO1rGBu3W}VOiqN9>ZYO&B`m4mQ3#(4Nh`zz!z5#EVh}VfG#ypY2P4B8Yo#mc? z+!*GWYR)59M9UBMoL`Sw44WKLwQ1!2{h9&!+rHW2X{wP_I;0vB8`@il9mRc>L`o-^W(A4qK&JG$rfFCqc2>YVvhLkrN{7G$do#@%s9hQ zC-4t|*ml?k!VL5nb?pM;2YTpuO6jC?87VZ?0o!b`f9n`}-^p4!*RaSg@@Z8x0NPRkH#f zPcT7x-J;zk?Lb<;E6M)y4*Y%-$Qfq;;&fgUeecr-5^+tRm=gMl(LP8?g=#ZWBapv+ zD@h)$4Kkp=e!0w4@NjS_C@aUuc6`QT`}Khg7ueH!Am%Yx0m3Yw@0=zAtE<^JzQ?7e zhQBI4q42jt9a^*Y*g}TwkcjxsyRh42+E$MCtgHNn3c+B88PoA&r{h>;=|&w!YOA`+ zsPhGLVNan5echtX(cvFL)E_FXB$^D_7%Y7C9=LZ`FP@ZBvOd=3Jhe5-DSp=}4v3G> zjec``cC|aceX%>PsHhlAEx!cp7D!*qVsrwIiiZ=oy9W-EQHa=6=Y zz;mM;CL%W0Yy*$jD@TXkKWLEd_Oqqy!PDkVs96|pwT#Rx9s1G2q6tRVF3wc3>L-;J0F6ri1E*s-M(mhP|SNuz@$&jKSH1n2uGw@~hu{iN6F__I~^*q~H=sl%Hiey;j%$k;Q&H&2?*g+i}T(`wOYw z0D*eNN_X7sCjqiOehNc*dU4=>g0x_VT*ygwCZqzNW7*HnR^K+@$U);l;@g`8^_9ei zH#9hc+9 z$d1Pj*}0vO=4|>93GVvyo)EB4)@qfM$WJKjV2M6XS#kDsb`nTSdC}^8Qc!?sXhbCv zI67UXP!3_>LpCJR!;RKHt_ul9y_ z%W0^ z$1JJdh)wO)z-HOH+u`xSMfy2*8X8y;<{MvI(GR51Zet55Ur7>dI8$U4^OS6QQ ziq%Hq@bLmCYK`+@1NOAVr&8TlF|1 z#Hb?c;2Gb|VH1faj@i*fBA~AHSN!^ROkF#_$A=VBEQv%XPBwh;59gg0myYw)KVPr~ zg!EhB-j-Ilt6DOP9%ZrXe{F-@U$vEJWW|p=JZL|hkd3{DA}aKbrIw@CZk%zCW885| zzbSR9WM_nAmZ&OLm8Ps;{ zj%Ov$^AZvdV#gwCMyPpZn$IaGLcVku_^Xq+-)2s`hSHD-Wfvg<fdPr7_W{>42SnSbwoskC)f7`5$Bo&6}+$)U5xslCT0ocF$6vlYK|J5#wV1| z=`^g&aU4&&s1ih+tVc5YcoTS-^q*EOLT5Cy2`yo@!}89w6qli8=X|C3y1Y8Q>7YT6 zH|&U5GsPQ1kqlvdo6Kd4FzI6OaP!8?7t=sn$Y?T&isHG?E6VszNrAdzrQ8ZJ0}C-wz*(;u7M z6TFj5FW!#V%U@sOn^bKq)N2_Qn0*+Qr;_<{v?xTo*%;y*a2BxfyVTO9v7{k!V`!gv zb~Y-eUCr9GYqm;33;BFID2ryYEw+zm{qZ_u+kaz$XSz4Kwp(r#oQXCXC(*L((C)iH zbqdGd?&o(Uzw)W-N-#s|)K)qX)$1^z`IO^eej|5%?^?1RON^3YA*9?MZs@UxM?G)? zLMV~v#aF3W3MRFuEFL<-;{U;vLn)dt9T5 zm>2m`WA~sXT%!#}YUcSmZXal9VAk~T<2bR)8?jb6TsT+FhJTa0j`>I%`l~@kXnLWF zdSV(r?VS>E>X*Hd!|(!nbad*k6LU0T`8bT&jz)8$V%NWY!*j!;>NV1SP;PB9pz5FT;I5kHP-tXUG6F8Ir8$GYvtIbyt12#u?F4X=gnfP1L(=ohAL;G3f z?ziA93>E?rq%ti0B(Z)*ZRFfo60|ghqg}JRJ2C;wt7BLH?)7w8o0=}TT>6eoR&$ON zyF>Fi_b*xmF5omfJ|gfT(qUl<=Ct|D9=g=d51JyIn8sbAXr@C1#o@Gn<2W6C6SZgY zdgNGel%Kg`DE5Af(bL;t64WTLabv$T3KO8RjS4r5hzS)rT1CzNNQLbsx11yqbvY5# z8hcqO)B3Wn$DkfDz5v1 z>~)@Z`E%ED6tz$wmyC=*i(zIaY25;`9}IkE7F0ZgU-Rb<%IXVr1B6$W=LdL?OW%g$Ks{Gp$IQ3S!8GEptGB&~sv|hv>E7yK zVDgbk?#zzssBK3w%wQMl1acBezn#N%dVIWV8%P2-eg&yH{Hkj-=j3uaDuu{mLK#o< zTZUt`nKFLBug|YnTcIQ*p}Gs9YGcM;V76gH04+r=B9K7tOo_k}E9gW)5zB?NCbEna zpg-Ig(im4G;~?D(`()<5NOvP2*bdlXj3X%f9vDP1T_z-nXi41+SdFfxgjJ|=XO4U& zYOyea;SLR{GWj|P$G1J^i~@}7;XD}~@=^1u|myw%s%bA%H~E)HTw4a!(%K9X@7_F>sItO`8u-qiou>_1rz${cOQmiKqc zN2flZb$%RrEDSUKm{`#0{IJEgSr{=U$OtS<}FS_bj-5UQ=N8{y~b=eS>Thn`b|~%9!N$ z8|B>P_s^C(7u2EDulL9Bk(Z+XV3pQ|QOp<85zJ7l-&{Y&P=tKDmz0sA@VpMpCP&~@ zw`=Jfy)XM5g(pD&3D2T+CHhU47S~KOF%43uf!k3%M*lhf=BC{$G(iNjxsoTb&JJtx zzRSY|rK3W7@C7rDX=Q6Ve}x{@wm#L3#0Ikp4%E)dxx9DPi-LlVt3#n6Mhe7JYn`fc zbGZmf9UPBhkL$p6{x%c8ZgFmVXet@AazktHrwR z3E@InHm&V5EhOUMEAIxi0X`OWXXl#e*UERC;D~_zX+OrpUpBK0TNY`hWc1c4JlHX@ z`hRdn%=8{TxV`xvUdQ%Cibx`=sEKI297uxcPpGAqlric0wph7a>)h~0hJwcvZ^EK? zaI=AFK)xLgR4zeLid$7j2nx7Lrg9@MK24{Zv&P9EoC~_mO(Vr20loqkQp%T1M6Wk$ zC9-JJLMZD?5iJc}LuIp+A~5~;fjG`7^r43hhU4&5i#(isl&T-wxRzVrM7qrim~*B; zkp{o0>=g|}{{B+8s*Jhxu#u3XYP#P(5Og>1CJ9fY$x5daU~89?cA z`cp496PWd(&;FpH;T1edOj56VE-y3iR=58CG`fHywHe_}+PQtF3|l;)bi{f-)73VEOd~=(N0j^& zYbnz)%h1iBQXK$c@rS#rq!Ti8VdEK5^Xvki&YTaE-afuY&5IHgQq-$zE64!8xM6pz zKOzS1WLwZ2VQ4w$!9v1sGZQzNR)qU&zdqP7{QI&+z2MMLEH^AZnov+z05!%1#>fmW zXpp|GTf8?|k2GMlaJz00eoMie$54S7iK^0}ZzgOdmd$ zOOGZQs&k((QU4s61D%~6*H0}gh}bI=g&4&IlaA?aW%QQs2@QCJfMb_^x0##uBYRjR ztX&c-02)a0*6{VX&MjV*>!MXUH$WM5tPaLmZb($9uk1}KSde`onBTvS$p5*Y%$D_i ze0OEyCCWXVp z@7qEcHDX^F-QmW<@NK@MAecAeUl!4DanoHbEG?(Ybp<}(U4WRqQe7s7LNbOmsl?~` zNjjeX_UZoEI(&q|UQyCe*~h2Q-nA)<0J1fl@eIIK{^#!Gh()?c$>?cPO`fVV@$)Re zZ?I`#7_pnHOBiwgB8#?gQ=;+&C99Rjg$BGjCcDagu}H=p=Yi-4q|%kk17|1rSD zVAX%azIiGr7xDat;Jd3SJ6SNl|J*R0g=%zhN^*ZaKL6`QnpU1tKqUk5w-okBQ{u-X zY*6GH&zEPSr8UrL*)MDOON(u)6C{kkOKmQ?E`!>p&6cw-DVo}6R(fM`2b9_b%YrY; zrV1I2dd;6w_!t_bO%e^I&x?D@&0-^k)>nz7hWM+Du)=|;$mPosHu^`-LD z2lVC+4LqTTi^vQNV6Lo#4X1i-IKQlY*((!E`RWEffI?e}yw?}b8I?)rn~kNAl#~RZ z%&#%95Cq>DfWxl%rRYXUe!G)?uC=g80jp>-!7=B{C%Tz0nc^C ziCFS%Tt0JL=+md*`7~R8_pzgM?5f#;)nf!msk9=2OT*`>5)Iz6M+Kkf`DKHv;{v=F zRceY9SfFZp1;Fb0G=EI0R;5hyFBn{e2V};j6eo0K}J(z<1Yg)t;ghFp$X}A zeqW4aiO?HEw$q{#`LZnknAbQ2t$A=2TA68kd1wo#a(kUhK8h&UQe0=YNE1&R zH*ul7{w60GOMM+*a1kHY$)#>xI}c1t3#bNx!h5~;(^iV@dvI`vn`uw|ObQx^$ap7R zc=Sw6x(zOeUt!=?XmLR&;s;YxQ;_NRINRuZZyYddMTL-EUw;e0ZoDABudIv>0rp~h za}!)ZfF;1A)T%ZcO>rNA`nQT86}S=Du?jdC z2m?Ps;+0uc0&t{OX8*jv8w(52#xZ5a?$NXa5W;`k1gzKzffFEC0P6Xmh+V2`$xfIi zS1`R#L`c~9f&Dc=&>E1+j`OAsd9F3WzgG9jKM~lM{?)AWG%4`MrBSVNbMU8+&qdsI zLW}M4`-j&qhjW`ekd})vX?9uAebM2`LxBGNhV*<95N{UxyqID;=JIYEpU3mc3jL`y z73le9Pz1lWEt=lnK2L;P=gka+4$|e|8PJ}9CmUJs#c&P4_pk>yDHOR zkK2=8N6cLb&XhqTR`VLoIH}1xOSQ+j8t3hy$?0h>z%DK>%Nos`QL{>Q(8F>D5%g@g z;!No>U?Gg)O_M8C<>KN3*kH&4_vB;?dZuj|5yc4r@Uc&V75awyN)C9p}q4KVwi zeZXZrDxf)57yz^Z-iza5yF$N1eGT;50NAyD%R9d| zjL!81FaIQJs99gkKmG3VYB*tCptL7J2-<1@AoNf(7_#;ihO$3iOsAfl*L%SL+LwE$xMxp-_k%6 zQ~VHl20zH{d9`r54jBPeUHF$+ejxzLU82(v@4gAn(3D>V)H8xmUiv;)&sx!`l^MmI zPpav%)B*Iv^NuTQ&ZxSs?lC1)azicV8wf-Y0~QN2 zWV%8j!97hh_{pZ?oli?)JmM%|5e+0KT`RJ z|Nqdj%S=W#84=3L9vyoXlAWv$vLj?1Gb1FGy%mzJY(;q6oG2@Muk0E5T<81!{0pD+ zGk4B?zwX!Td0p4@@yr575gEN6wPw0<$6Wd!B2hU&_xi}SWqna~JBQ-n)0vU{`KgFV zP^V4Z-#_)Ths^O@$5>U?$Tq9|!IiV06E<7^g|0hX1B1SJ-?~rO5R^z*Hn-K4UgsGJ zs6<_%V!q_#qwspGG*Hp@{UKw#C;fu0j+W&3q7PQnu@R&D>vL6=4A`vZ{)_wX0jQtK zfHNG72}%+6SXzF=vI?1_>5!3@b5k@^QMRU0{%zt8 zYv8Gy;V#aKz;KZecp@X~Rxbe*;zU)>bI_>GHEc zjEtYGdhigBjP3a)28LD|T}m(M?Uj6#r&u$^J$_2vqbk0>2EXEcJ?4icVAO*#Ogr9j}zTvd6ztplk&{u@tR{1>&;VRB@_>?QYsb*t zm?DFn<*4Bg-nRw!m8Vku%}H$u;)i*9NfH#?+QF;=7)2C9kc1=)7*&5l7IZ%^MhHnvpJZ=;n@6raoV0%IPDLIHUn7( zPrgq2Sc8v;wY9as|JfI(@e;FIY81OwdD7-zc9`J&;{V>57Q#jUJzUX(rK$?kj3A?*s)w7Sf}Cqe`Q5(d^JdlI-hD-npL{6m16D;i>tN98C5#bBCKh;@ zN38e?cSB)W8dunKf{ij?E7=`w*H_CaQEcVml(`%!E?$*Idj_Gxh;nC|FXB^Gal@pu7K{w1{ql zwT>+>1>0e2$HL6`&`_1*u%KBAxbseT`v(UHd9;!+sX;X_K5dY{2!R~}ukqT@aJ}c+ z7vFt{%@zBUfK%AveCDZuZ>%1VKS$#K+ptwzr9`gWEV;`YPQf|}#XSPRGw`r5%K3R~ zXlPI>FU-$x6-QhE@Iu{i{QHMfEVs+_%!}q3OaU(#`E)YF2lF4bApL5ta$n7yRHh95 z>0mp_q5gWXkO9FPWo0jhJ<|0Fg?g_}oe?6)N7_DQ<6 zRQ7xY%fn#4u4*K_-1frslm3V1eu;KRyjhP@^?8^86*e|z7)yv)j$#aeSXKq%kpWX$zz4 zGn?E!N-EQoBe&{c@0R!m<`Bbg`AbTh+&3p>YXbw{m0nh|w_gEYAys`7?A=L8Nua|r z(e+rwStRkd(d(iM-IFUqWOKuTZ(swnFR-!(6b?wG5I0(cT9H zgC0~SJQV0M)jfqy;wX;8b#_h7PM0S3HyRy%;i|0HR9|`@&AgE9&a-Efq_e1XUx1tv z_=CWcS#uLT-)>4l9Be6=X?>e1c5S$nbK>G>qzIC)h#oDEZ%4Mere@Z#-F{UroeLcA z?g#6}Hn~KEF&F;T1bu)0-H2FkQ$t-Hw)|1pv4FD1%PK1q=HVe4McSvRSZ9L=f*Akn z-F~GlO&~TFz-B7R58XPcbn@rXS-MJ96E@WJCx~b& z+dpW0janU|sM0goh@)~)9N1`~rW!D0N^dsk=VD#u@H((cJw*e>2I2rqi!ds; zB8YO9vTlC~p%{MYB-P`MkAV;mAp)^~1p#33gS&UZLpXp3Ck8kANG%n zm_t^!v91mR)8c585+XquNHfJ26ckLWoTP@l@(Re$%X96Uz`2B{qD7=Z~(%hdk7vW zI2KOlNj6r}l__7v|Tk*4Z@US3D4k${~L7 zedVbh%>AS!6e?obB0#J7!9vgY6$WxFtG*yn#8yb3olD&v*s^8a3^%7( zH%w6uEC?H0TlRb6?(=F~_Z#jM8v-4APQI>=W(+tXA!mi*4BFYbvAsTk+GvK@OFB*N z(o`S?t3UGZ;T=t~y_Gux76QKWRNF&^z|!SlQDaxM0+;YE5CY-g{!SJkcBs1DN|duE zUlPXR)Pt0wgqRq!oL^FMqGXZc1DQ*4AepvtaHeP&yNOPUD6l4)X{Nn*y?%AM2s3&< zhuX>>jkc^CSXf#rHLt(ouNkHkq;ty{EMRR`a5#3n@3*-HfT(t=xZBAjRRvy#~T1U~@A^iSsYM?M@UDsb+#A0~($>88XLUvP(1YSuMZ-#BIc<&ix=lNz ztWzHy9XnN7VcMrgtrClB2wutvxnDFr`q)0hd>>#KYxCw-%R&hYvoW>TW`D~6t^$Ci zVj?#c)@A{9vKZcqrXY*6kkj?(as|Asmg)HX9SbMKEe*x`SMhZ8Qg z63Xj5c_QGbyPTsOy){PWd_S+yVrEI*!QndNG6OnRF3uM1h~dFr@mHH zKw4hq$B$7$3<%*l7E5q2Hstr)Rmwuagfk&$_CwKzUwHZ7k!nYGi1Z&sZJG~nuu1V^ zPg||mOyS;hB1KA^%oO?a!AKwgs7g%vN$h>0Q=Tdvl2=~UkG>N&Q8M6K!fBEoz=~vh zij|d>xx!g^m||BKf-cI9pq5|iO{G-6%tV9zafDPZ@-|sPlR0`e)mXG7^T^9M) zHrp1xwz_&Zh}SUOun2l;=$}jkgV1eJ$;HmNPA66Z@q-E9T3>$>qY`pK4oXn?2v0n+ zwz3L1+kdd9_}SzJDZ>5i#B;GI;AABqu7&%otpNn0l6wcbQwdxepUE> zJy(e59dK-fGke1_qO*Hw} zKMOl5ss95dYMtNlt%t#oC;_ML9Qha|b=8sU1vSjq`R-ruf>5C0k&yx{I(Rx#udtOr zoQQ(O=H{2$+EKJ9bPOv;KmBxwe^2$ZWjz*d^{$7Zu+NT7jEeOECVzv<$prNw1tb@^ z$|56766t5EVm6ML5tcl(|r#%6AXl(O)f!eK_(hCavRhW zSQEg1>KiHf1-f|Su6 zkBR#Pes-GU7n~%RXr%+Qv?OCPUxmxAFBj-QM1VnGi<@jnTx0Mls7)~IN`T-3Rq>9W z-69=D7cZH_pcV4-3mgNuSS2W6ot`|&<0VBv>r~wSN1iIHKkQP&-O)cCKEt}ZAt=~B zX9E1g>dzv8AL0)+AUuS{cRBm~@7MD=Q!P||1y%#w`%rVHh=0~wX|O7>j|gIDveeAb zMDLe~a(PMXr)CvUlN7~|#Sm>7&|(_#APMTEnXjfJ)x9eymw{AtPx+7>P;X$`f3ra& zA_Ms^%{$B&lA|Z7CdE2xYFk{AKOOQ^UK5dN8Q%J>WDw7jFiz{|Igz&; za7NTT@+R8ieLh~OLyUoLwFyh|GjNBR396R7SWd|56g}u@{eE3Uda(FHb!er}fETux zb^J1aP`|(@?qiD6$uf5ODWy^}Pw7eXL8oG;9`;PT^^OI<4Xx?d#+wX6862+8=6MVm zEj`uP@`&3R3gfSM4T{8Qrj(~h?zJt&`ciHksJC`okz2fGj z-(>pF;6FyIq(-RCg${NvA&rj8RCrIv8kgCQtg%js=h;6u2&icF!(4`!Txddw*+@{_ zx|o@bIp?d75qO%edyQw9)M|NPSP9polu`!4C5Fb7XvZu;)s9%`e~_`<&g+bk`y#0w-V+dD}1 z&=0iW?H#!h(ZDtE@(Q0N+Bt^fPVSquxob4uxssU%wZ}Q(okWZ4cp8j0^5|EHoM5RO>;hK@P8TFMW`g+H$kST7*lxF-& zQ|om4=S~Xaqw-SdHV7^$HoWI3V^tyMj=#!#Bq6^0yl|}F^a!i;h)zGxviR*aEx&i) zQs&E0q?7mKj9vuPoA&ox9(dXb3g~8emh#S&=M&H;@ap_5$sLH7+5S;2{3;%4A}{Yz z7px+%*Zb3}-gJ1z@aF-~~> zCt2h%m;J`}thF}Fvs(C}AhF`wHyT<4=8Vm3mX(Akqa+VKx<)OVq4qU3`W{SG()%Op z86p(&y9-PI<0PfHee;%ROwS+YP8#{EUF&DJrO12BSU9p0yY-rqJIkcms!Bq)Hb|9N zY58W+g~(o;ffmR|Z2PN_#BJB#_g|Xgj9a4fT1sCv<{OjS1^;sNW#DU`W``e(NIrUt znPL${PACh}FnHaw*9r=G&oElYNtV(KoxlhpEc z1$^>G-mJ*yQ_LiNv#=lgqpJgkiaBC;=?!y!%i!rGxAV(fiD^=TrXC>i#&@#*aWnBpQjvl8Zz~;xq=$^=kE58IvQxywlo~^gFOOM-U(f}EVnXNB zIhiXe5zOef$xlrcisblqA{N`a9A=B}(G>KM zd$)GWj8)gXVeZSazLcxOH_}~SK)X^f;Wrm8; zap~yP0Md1sdt5hq_ykU-q=}T$+GZysdubJ44hR?rO-d#-eyRtEQLN$q*KXG7pyZu8zo2h&rl<0x z6C0o{deRB(DwC(?INrWCn_Kt67$JM9@NIdD)8qW=NQ`3YTjrCS8tVS!R4K`jihh zA9HvFcLzfm;iR{0HvPOa{YlLUE8efBE%Hb3olsShbxMroDPK{ z#v!3|h@IO`UQxCE%f~X#S#NjEriC&D8N(ARnCDTUtzvt^S}3X9AUKu=nB9^6ZkI9!5@bInl{#B|C_~uj>&S8v3Q=z)f z$+y;7Q=}tA=WUuw zjrY*fcb7^JA);86ZmZZ0zI*-cvQ`|iOqHnusyUi&7bZ*4`oHyb`EJUG?yfF~=&Pu# zl&))>38g0@XuL0`i8q6v841lXR!Mgoh}#044Z(=e`^ND-P|>+uE93x+s*NMld93qG zOdsC6$lAO-o2}{Q^73-SqWjn19;^+!9Bs{1Q>!B|tyoKf3}Rw@-s!If*FpC?nwc@h zR=NK>J&tuU@@D@eOiD}(>s9P^jyq-Htbwdx&dart3(+^cT_5->-VY(q-|#v9^!AWlS)bgH{-t*ry0y zzb@so!&O%SR|nGa>GtPg3rJfS9@rln8-wvi&J=O;VsgY4QLBtateO4+yl zjvEb4Di?xlv*jbEt2wfmvxnD`WpSCWkmS`f8ur-t7X^3HC`@VbEa7<^ z{eiz4VhRS{0tGki>nUZvOu>Qs*Ere;a=D5>}*O(3WTUZSqA1iEqn-D`c5eEPJxUZ9#s{mp1ywkSVCqd1tL}4NoiQN z*BJ2%;szkM7pdgzENBu0h2LNlE&pjx#;aGD3aD%8Z^Faf+ZdPFBcfVw!5^c8EAHl? zk5LeATXF2Awn2}(u+Y{?XK!g;O^s3M@N) Scripts are disabled. Showing fallback image. - + - ratio 1 1.0
- ratio 2 1.0
- ratio 3 1.0
- ratio 4 1.0 + + + +

You can think of the ratio values as each coordinate's "gravity": the higher the gravity, the closer to that coordinate the curve will want to be. You'll also notice that if you simply increase or decrease all the ratios by the same amount, nothing changes... much like with gravity, if the relative strengths stay the same, nothing really changes. The values define each coordinate's influence relative to all other points.

@@ -742,7 +742,7 @@ function drawCurve(points[], t): Scripts are disabled. Showing fallback image. - + @@ -815,16 +815,16 @@ treated as a sequence of three (elementary) shear operations. When we combine th

The following two graphics show the tangent and normal along a quadratic and cubic curve, with the direction vector coloured blue, and the normal vector coloured red (the markers are spaced out evenly as t-intervals, not spaced equidistant).

- + Scripts are disabled. Showing fallback image. - + - + Scripts are disabled. Showing fallback image. - +
@@ -860,7 +860,7 @@ treated as a sequence of three (elementary) shear operations. When we combine th
-

However, if you've played with that graphic a bit, you might have noticed something odd. The normal seems to "suddenly twist around" around between t=0.5 and t=0.9... Why is doing that?

+

However, if you've played with that graphic a bit, you might have noticed something odd. The normal seems to "suddenly twist around the curve" between t=0.65 and t=0.75... Why is it doing that?

As it turns out, it's doing that because that's how the maths works, and that's the problem with Frenet normals: while they are "mathematically correct", they are "practically problematic", and so for any kind of graphics work what we really want is a way to compute normals that just... look good.

Thankfully, Frenet normals are not our only option.

Another option is to take a slightly more algorithmic approach and compute a form of Rotation Minimising Frame (also known as "parallel transport frame" or "Bishop frame") instead, where a "frame" is a set made up of the tangent, the rotational axis, and the normal vector, centered on an on-curve point.

@@ -1359,19 +1359,19 @@ y = curve.get(t).y Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -1412,7 +1412,7 @@ y = curve.get(t).y - + @@ -1421,7 +1421,7 @@ y = curve.get(t).y - + @@ -1588,12 +1588,12 @@ lli = function(line1, line2): Scripts are disabled. Showing fallback image. - + - +

Finding self-intersections is effectively the same procedure, except that we're starting with a single curve, so we need to turn that into two separate curves first. This is trivially achieved by splitting at an inflection point, or if there are none, just splitting at t=0.5 first, and then running the exact same algorithm as above, with all non-overlapping curve pairs getting removed at each iteration, and each successive step homing in on the curve's self-intersection points.

@@ -1724,10 +1724,10 @@ for (coordinate, index) in LUT:

This makes the interval we check smaller and smaller at each iteration, and we can keep running the three steps until the interval becomes so small as to lead to distances that are, for all intents and purposes, the same for all points.

So, let's see that in action: in this case, I'm going to arbitrarily say that if we're going to run the loop until the interval is smaller than 0.001, and show you what that means for projecting your mouse cursor or finger tip onto a rather complex Bézier curve (which, of course, you can reshape as you like). Also shown are the original three points that our coarse check finds.

- + Scripts are disabled. Showing fallback image. - + @@ -1847,11 +1847,11 @@ for (coordinate, index) in LUT: Scripts are disabled. Showing fallback image. - + -
+

You'll note there is a convenient "toggle" buttons that lets you toggle between equidistant t values, and distance ratio along the polygon formed by the points. Arguably more interesting is that once you have points to abstract a curve, you also get direct control over the time values through sliders for each, because if the time values are our degree of freedom, you should be able to freely manipulate them and see what the effect on your curve is.

@@ -1864,7 +1864,7 @@ for (coordinate, index) in LUT: Scripts are disabled. Showing fallback image. - + @@ -1992,13 +1992,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -2010,13 +2010,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -2026,13 +2026,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -2041,13 +2041,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + > @@ -2336,7 +2336,7 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + @@ -2346,6 +2346,14 @@ for p = 1 to points.length-3 (inclusive):
  • for Bézier curves, the curve is defined as an interpolation of points, but:
  • for B-Splines, the curve is defined as an interpolation of curves.
  • +

    In fact, let's look at that again, but this time with the base curves shown, too. Each consecutive four points defined one curve:

    + + + Scripts are disabled. Showing fallback image. + + + +

    In order to make this interpolation of curves work, the maths is necessarily more complex than the maths for Bézier curves, so let's have a look at how things work.

    How to compute a B-Spline curve: some maths

    Given a B-Spline of degree d and thus order k=d+1 (so a quadratic B-Spline is degree 2 and order 3, a cubic B-Spline is degree 3 and order 4, etc) and n control points P0 through Pn-1, we can compute a point on the curve for some value t in the interval [0,1] (where 0 is the start of the curve, and 1 the end, just like for Bézier curves), by evaluating the following function:

    @@ -2379,7 +2387,7 @@ Doing so for a degree d B-Spline with n control point Scripts are disabled. Showing fallback image. - + @@ -2421,7 +2429,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + @@ -2434,7 +2442,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + @@ -2447,7 +2455,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + @@ -2461,7 +2469,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + diff --git a/docs/ja-JP/index.html b/docs/ja-JP/index.html index a128be1c..2eaf155d 100644 --- a/docs/ja-JP/index.html +++ b/docs/ja-JP/index.html @@ -409,13 +409,13 @@ function Bezier(3,t,w[]): Scripts are disabled. Showing fallback image. - + - ratio 1 1.0
    - ratio 2 1.0
    - ratio 3 1.0
    - ratio 4 1.0 + + + +

    You can think of the ratio values as each coordinate's "gravity": the higher the gravity, the closer to that coordinate the curve will want to be. You'll also notice that if you simply increase or decrease all the ratios by the same amount, nothing changes... much like with gravity, if the relative strengths stay the same, nothing really changes. The values define each coordinate's influence relative to all other points.

    @@ -738,7 +738,7 @@ function drawCurve(points[], t): Scripts are disabled. Showing fallback image. - + @@ -811,16 +811,16 @@ treated as a sequence of three (elementary) shear operations. When we combine th

    The following two graphics show the tangent and normal along a quadratic and cubic curve, with the direction vector coloured blue, and the normal vector coloured red (the markers are spaced out evenly as t-intervals, not spaced equidistant).

    - + Scripts are disabled. Showing fallback image. - + - + Scripts are disabled. Showing fallback image. - +
    @@ -856,7 +856,7 @@ treated as a sequence of three (elementary) shear operations. When we combine th
    -

    However, if you've played with that graphic a bit, you might have noticed something odd. The normal seems to "suddenly twist around" around between t=0.5 and t=0.9... Why is doing that?

    +

    However, if you've played with that graphic a bit, you might have noticed something odd. The normal seems to "suddenly twist around the curve" between t=0.65 and t=0.75... Why is it doing that?

    As it turns out, it's doing that because that's how the maths works, and that's the problem with Frenet normals: while they are "mathematically correct", they are "practically problematic", and so for any kind of graphics work what we really want is a way to compute normals that just... look good.

    Thankfully, Frenet normals are not our only option.

    Another option is to take a slightly more algorithmic approach and compute a form of Rotation Minimising Frame (also known as "parallel transport frame" or "Bishop frame") instead, where a "frame" is a set made up of the tangent, the rotational axis, and the normal vector, centered on an on-curve point.

    @@ -1355,19 +1355,19 @@ y = curve.get(t).y Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -1408,7 +1408,7 @@ y = curve.get(t).y - +
    @@ -1417,7 +1417,7 @@ y = curve.get(t).y - + @@ -1584,12 +1584,12 @@ lli = function(line1, line2): Scripts are disabled. Showing fallback image. - + - +

    Finding self-intersections is effectively the same procedure, except that we're starting with a single curve, so we need to turn that into two separate curves first. This is trivially achieved by splitting at an inflection point, or if there are none, just splitting at t=0.5 first, and then running the exact same algorithm as above, with all non-overlapping curve pairs getting removed at each iteration, and each successive step homing in on the curve's self-intersection points.

    @@ -1720,10 +1720,10 @@ for (coordinate, index) in LUT:

    This makes the interval we check smaller and smaller at each iteration, and we can keep running the three steps until the interval becomes so small as to lead to distances that are, for all intents and purposes, the same for all points.

    So, let's see that in action: in this case, I'm going to arbitrarily say that if we're going to run the loop until the interval is smaller than 0.001, and show you what that means for projecting your mouse cursor or finger tip onto a rather complex Bézier curve (which, of course, you can reshape as you like). Also shown are the original three points that our coarse check finds.

    - + Scripts are disabled. Showing fallback image. - + @@ -1843,11 +1843,11 @@ for (coordinate, index) in LUT: Scripts are disabled. Showing fallback image. - + -
    +

    You'll note there is a convenient "toggle" buttons that lets you toggle between equidistant t values, and distance ratio along the polygon formed by the points. Arguably more interesting is that once you have points to abstract a curve, you also get direct control over the time values through sliders for each, because if the time values are our degree of freedom, you should be able to freely manipulate them and see what the effect on your curve is.

    @@ -1860,7 +1860,7 @@ for (coordinate, index) in LUT: Scripts are disabled. Showing fallback image. - + @@ -1988,13 +1988,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -2006,13 +2006,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -2022,13 +2022,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -2037,13 +2037,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + > @@ -2332,7 +2332,7 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + @@ -2342,6 +2342,14 @@ for p = 1 to points.length-3 (inclusive):
  • for Bézier curves, the curve is defined as an interpolation of points, but:
  • for B-Splines, the curve is defined as an interpolation of curves.
  • +

    In fact, let's look at that again, but this time with the base curves shown, too. Each consecutive four points defined one curve:

    + + + Scripts are disabled. Showing fallback image. + + + +

    In order to make this interpolation of curves work, the maths is necessarily more complex than the maths for Bézier curves, so let's have a look at how things work.

    How to compute a B-Spline curve: some maths

    Given a B-Spline of degree d and thus order k=d+1 (so a quadratic B-Spline is degree 2 and order 3, a cubic B-Spline is degree 3 and order 4, etc) and n control points P0 through Pn-1, we can compute a point on the curve for some value t in the interval [0,1] (where 0 is the start of the curve, and 1 the end, just like for Bézier curves), by evaluating the following function:

    @@ -2375,7 +2383,7 @@ Doing so for a degree d B-Spline with n control point Scripts are disabled. Showing fallback image. - + @@ -2417,7 +2425,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + @@ -2430,7 +2438,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + @@ -2443,7 +2451,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + @@ -2457,7 +2465,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + diff --git a/docs/js/custom-element/api/graphics-api.js b/docs/js/custom-element/api/graphics-api.js index 49060fec..7f1d7ca9 100644 --- a/docs/js/custom-element/api/graphics-api.js +++ b/docs/js/custom-element/api/graphics-api.js @@ -207,8 +207,32 @@ class GraphicsAPI extends BaseAPI { throw new Error(`this.${propname} already exists: cannot bind slider.`); } + let propLabel = propname.replace(`!`, ``); + propname = propLabel === propname ? propname : false; + let slider = typeof qs === `string` ? this.find(qs) : qs; + // relocate this slider + let ui = (() => { + if (!this.element) { + return { update: (v) => {} }; + } + let wrapper = create(`div`); + wrapper.classList.add(`slider-wrapper`); + let label = create(`label`); + label.classList.add(`slider-label`); + label.innerHTML = propLabel; + wrapper.append(label); + slider.parentNode.replaceChild(wrapper, slider); + slider.setAttribute(`class`, `slider`); + wrapper.append(slider); + let valueField = create(`label`); + valueField.classList.add(`slider-value`); + valueField.textContent; + wrapper.append(valueField); + return { update: (v) => (valueField.textContent = v) }; + })(); + if (!slider) { console.warn(`Warning: no slider found for query selector "${qs}"`); if (propname) this[propname] = initial; @@ -217,6 +241,7 @@ class GraphicsAPI extends BaseAPI { const updateProperty = (evt) => { let value = parseFloat(slider.value); + ui.update(value); try { let checked = transform ? transform(value) ?? value : value; if (propname) this[propname] = checked; @@ -225,6 +250,7 @@ class GraphicsAPI extends BaseAPI { evt.preventDefault(); evt.stopPropagation(); } + ui.update(e.value); slider.value = e.value; slider.setAttribute(`value`, e.value); } @@ -242,7 +268,7 @@ class GraphicsAPI extends BaseAPI { * remove all sliders from this element */ removeSliders() { - this.findAll(`input[type=range]`).forEach((s) => { + this.findAll(`.slider-wrapper`).forEach((s) => { s.parentNode.removeChild(s); }); } diff --git a/docs/js/custom-element/lib/create.js b/docs/js/custom-element/lib/create.js index b08bf864..48a6162e 100644 --- a/docs/js/custom-element/lib/create.js +++ b/docs/js/custom-element/lib/create.js @@ -1,14 +1,27 @@ import { enrich } from "./enrich.js"; -function create(element) { +const noop = () => {}; + +function create(tag) { if (typeof document !== `undefined`) { - return enrich(document.createElement(element)); + return enrich(document.createElement(tag)); } - return { - name: element, - tag: element.toUpperCase(), + const element = { + name: tag, + tag: tag.toUpperCase(), + append: noop, + appendChild: noop, + replaceChild: noop, + removeChild: noop, + classList: { + add: noop, + remove: noop, + }, + children: [], }; + + return element; } export { create }; diff --git a/docs/placeholder-style.css b/docs/placeholder-style.css index 71d4f6cf..762cb841 100644 --- a/docs/placeholder-style.css +++ b/docs/placeholder-style.css @@ -1,153 +1,193 @@ :root[lang="en-GB"] { - font-family: 'Museo', 'Helvetica Neue', 'Helvetica', Arial, sans-serif; - font-size: 18px; + font-family: "Museo", "Helvetica Neue", "Helvetica", Arial, sans-serif; + font-size: 18px; } :root[lang="ja-JP"] { - font-family: 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', 'Osaka', 'メイリオ', 'Meiryo', 'MS Pゴシック', 'MS PGothic', 'Helvetica Neue', 'Helvetica', Arial, sans-serif; - font-size: 16px; + font-family: "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", + "メイリオ", "Meiryo", "MS Pゴシック", "MS PGothic", "Helvetica Neue", + "Helvetica", Arial, sans-serif; + font-size: 16px; } :root[lang="zh-CN"] { - font-family: '华文细黑', 'STXihei', 'PingFang TC', '微软雅黑体', 'Microsoft YaHei New', '微软雅黑', 'Microsoft Yahei', '宋体', 'SimSun', 'Helvetica Neue', 'Helvetica', Arial, sans-serif; - font-size: 17.2px; + font-family: "华文细黑", "STXihei", "PingFang TC", "微软雅黑体", + "Microsoft YaHei New", "微软雅黑", "Microsoft Yahei", "宋体", "SimSun", + "Helvetica Neue", "Helvetica", Arial, sans-serif; + font-size: 17.2px; } h1 { - background: black; - color: white; - padding: 0.2em 0.5em; + background: black; + color: white; + padding: 0.2em 0.5em; } label[for="changelogtoggle"] { - display: inline-block; - cursor: pointer; - color: #2929b3; - margin-left: 2em; + display: inline-block; + cursor: pointer; + color: #2929b3; + margin-left: 2em; } #changelogtoggle { - display: none; + display: none; } #changelogtoggle:not(:checked) ~ * { - display: none; + display: none; } - #chapters { - counter-reset: section; + counter-reset: section; } #chapters section h1:before { - counter-increment: section; - content: "§" counter(section); - margin-right: 1em; + counter-increment: section; + content: "§" counter(section); + margin-right: 1em; } #chapters section > h1 > a { - text-decoration: none; - color: inherit; + text-decoration: none; + color: inherit; } graphics-element { - background: #e8e8e8; + background: #e8e8e8; } div.print { - opacity: 0.2; - padding-left: 2em; + opacity: 0.2; + padding-left: 2em; } div.print:before { - content: "PRINT-ONLY:"; - position: relative; - left: -2em; + content: "PRINT-ONLY:"; + position: relative; + left: -2em; } div.print:after { - content: "END-PRINT-ONLY"; - position: relative; - left: -2em; + content: "END-PRINT-ONLY"; + position: relative; + left: -2em; } div.howtocode { - position: relative; - border: 1px solid black; - background: rgb(246, 255, 255); - margin: 1em; - padding: 1em 1em 0 1em; + position: relative; + border: 1px solid black; + background: rgb(246, 255, 255); + margin: 1em; + padding: 1em 1em 0 1em; } div.howtocode h3 { - box-sizing: border-box; - position: relative; - width: calc(100% + 2em - 4px); - left: calc(-1em + 2px); - background: black; - color: white; - padding: 0.2em; - margin: 0 auto; - margin-top: -1em; + box-sizing: border-box; + position: relative; + width: calc(100% + 2em - 4px); + left: calc(-1em + 2px); + background: black; + color: white; + padding: 0.2em; + margin: 0 auto; + margin-top: -1em; } div.note { - position: relative; - border: 1px solid black; - background: rgb(255, 255, 246); - margin: 1em; - padding: 1em 1em 0 1em; + position: relative; + border: 1px solid black; + background: rgb(255, 255, 246); + margin: 1em; + padding: 1em 1em 0 1em; } div.note:before { - display: inline-block; - content: "Note"; - border: 1px solid black; - border-radius: 0.5em; - background: orange; - padding: 0.2em 0.5em; - position: absolute; - top: -0.5em; - left: -1em; + display: inline-block; + content: "Note"; + border: 1px solid black; + border-radius: 0.5em; + background: orange; + padding: 0.2em 0.5em; + position: absolute; + top: -0.5em; + left: -1em; } img.LaTeX.SVG { - margin-left: 2em; + margin-left: 2em; } img.LaTeX.SVG + img.LaTeX.SVG { - margin-top: 1em; - margin-left: 1em; + margin-top: 1em; + margin-left: 1em; } pre { - display: inline-block; - margin-left: 1em; - background-color: lightyellow; - padding: 0.5em; - border: 1px dotted gray; + display: inline-block; + margin-left: 1em; + background-color: lightyellow; + padding: 0.5em; + border: 1px dotted gray; } code { - position: relative; - font-family: monospace; - font-size: 0.9rem; + position: relative; + font-family: monospace; + font-size: 0.9rem; } p code { - color: #ff6000; - font-weight: bold; - font-family: monospace; - font-size: 1.2em; - letter-spacing: -2px; + color: #ff6000; + font-weight: bold; + font-family: monospace; + font-size: 1.2em; + letter-spacing: -2px; } -.slide-control { - display: block; - width: 100%; +.slider-wrapper { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + font-size: 90%; + background: white; + margin: -0.5em; + margin-left: -0.25em; + margin-right: -0.25em; + border: 1px solid black; + border-width: 0 1px; +} + +graphics-element .slider-wrapper:first-of-type { + clear: both; + border-top: 1px solid black; + margin-top: 0.1em; + padding-top: 2px; +} + +graphics-element .slider-wrapper:last-of-type { + border-bottom: 1px solid black; + margin-bottom: -0.25em; +} + +.slider-wrapper .slider-label { + flex: 0 0 auto; + font-family: Arial; + padding: 0 0.5em; +} + +.slider-wrapper .slider-value { + flex: 0 0 auto; + min-width: 3em; + padding-right: 0.25em; + text-align-last: center; +} + +.slider-wrapper .slider { + flex: 1 1 auto; } .grid { - display: flex; - flex-wrap: wrap; + display: flex; + flex-wrap: wrap; } diff --git a/docs/zh-CN/index.html b/docs/zh-CN/index.html index dad0d8d8..5c9b8582 100644 --- a/docs/zh-CN/index.html +++ b/docs/zh-CN/index.html @@ -403,13 +403,13 @@ function Bezier(3,t,w[]): Scripts are disabled. Showing fallback image. - + - ratio 1 1.0
    - ratio 2 1.0
    - ratio 3 1.0
    - ratio 4 1.0 + + + +

    You can think of the ratio values as each coordinate's "gravity": the higher the gravity, the closer to that coordinate the curve will want to be. You'll also notice that if you simply increase or decrease all the ratios by the same amount, nothing changes... much like with gravity, if the relative strengths stay the same, nothing really changes. The values define each coordinate's influence relative to all other points.

    @@ -732,7 +732,7 @@ function drawCurve(points[], t): Scripts are disabled. Showing fallback image. - + @@ -805,16 +805,16 @@ treated as a sequence of three (elementary) shear operations. When we combine th

    The following two graphics show the tangent and normal along a quadratic and cubic curve, with the direction vector coloured blue, and the normal vector coloured red (the markers are spaced out evenly as t-intervals, not spaced equidistant).

    - + Scripts are disabled. Showing fallback image. - + - + Scripts are disabled. Showing fallback image. - +
    @@ -850,7 +850,7 @@ treated as a sequence of three (elementary) shear operations. When we combine th
    -

    However, if you've played with that graphic a bit, you might have noticed something odd. The normal seems to "suddenly twist around" around between t=0.5 and t=0.9... Why is doing that?

    +

    However, if you've played with that graphic a bit, you might have noticed something odd. The normal seems to "suddenly twist around the curve" between t=0.65 and t=0.75... Why is it doing that?

    As it turns out, it's doing that because that's how the maths works, and that's the problem with Frenet normals: while they are "mathematically correct", they are "practically problematic", and so for any kind of graphics work what we really want is a way to compute normals that just... look good.

    Thankfully, Frenet normals are not our only option.

    Another option is to take a slightly more algorithmic approach and compute a form of Rotation Minimising Frame (also known as "parallel transport frame" or "Bishop frame") instead, where a "frame" is a set made up of the tangent, the rotational axis, and the normal vector, centered on an on-curve point.

    @@ -1349,19 +1349,19 @@ y = curve.get(t).y Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -1402,7 +1402,7 @@ y = curve.get(t).y - +
    @@ -1411,7 +1411,7 @@ y = curve.get(t).y - + @@ -1578,12 +1578,12 @@ lli = function(line1, line2): Scripts are disabled. Showing fallback image. - + - +

    Finding self-intersections is effectively the same procedure, except that we're starting with a single curve, so we need to turn that into two separate curves first. This is trivially achieved by splitting at an inflection point, or if there are none, just splitting at t=0.5 first, and then running the exact same algorithm as above, with all non-overlapping curve pairs getting removed at each iteration, and each successive step homing in on the curve's self-intersection points.

    @@ -1714,10 +1714,10 @@ for (coordinate, index) in LUT:

    This makes the interval we check smaller and smaller at each iteration, and we can keep running the three steps until the interval becomes so small as to lead to distances that are, for all intents and purposes, the same for all points.

    So, let's see that in action: in this case, I'm going to arbitrarily say that if we're going to run the loop until the interval is smaller than 0.001, and show you what that means for projecting your mouse cursor or finger tip onto a rather complex Bézier curve (which, of course, you can reshape as you like). Also shown are the original three points that our coarse check finds.

    - + Scripts are disabled. Showing fallback image. - + @@ -1837,11 +1837,11 @@ for (coordinate, index) in LUT: Scripts are disabled. Showing fallback image. - + -
    +

    You'll note there is a convenient "toggle" buttons that lets you toggle between equidistant t values, and distance ratio along the polygon formed by the points. Arguably more interesting is that once you have points to abstract a curve, you also get direct control over the time values through sliders for each, because if the time values are our degree of freedom, you should be able to freely manipulate them and see what the effect on your curve is.

    @@ -1854,7 +1854,7 @@ for (coordinate, index) in LUT: Scripts are disabled. Showing fallback image. - + @@ -1982,13 +1982,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -2000,13 +2000,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -2016,13 +2016,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + @@ -2031,13 +2031,13 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + Scripts are disabled. Showing fallback image. - + > @@ -2326,7 +2326,7 @@ for p = 1 to points.length-3 (inclusive): Scripts are disabled. Showing fallback image. - + @@ -2336,6 +2336,14 @@ for p = 1 to points.length-3 (inclusive):
  • for Bézier curves, the curve is defined as an interpolation of points, but:
  • for B-Splines, the curve is defined as an interpolation of curves.
  • +

    In fact, let's look at that again, but this time with the base curves shown, too. Each consecutive four points defined one curve:

    + + + Scripts are disabled. Showing fallback image. + + + +

    In order to make this interpolation of curves work, the maths is necessarily more complex than the maths for Bézier curves, so let's have a look at how things work.

    How to compute a B-Spline curve: some maths

    Given a B-Spline of degree d and thus order k=d+1 (so a quadratic B-Spline is degree 2 and order 3, a cubic B-Spline is degree 3 and order 4, etc) and n control points P0 through Pn-1, we can compute a point on the curve for some value t in the interval [0,1] (where 0 is the start of the curve, and 1 the end, just like for Bézier curves), by evaluating the following function:

    @@ -2369,7 +2377,7 @@ Doing so for a degree d B-Spline with n control point Scripts are disabled. Showing fallback image. - + @@ -2411,7 +2419,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + @@ -2424,7 +2432,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + @@ -2437,7 +2445,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - + @@ -2451,7 +2459,7 @@ for(let L = 1; L <= order; L++) { Scripts are disabled. Showing fallback image. - +