From 7cdc4217f5f020466c4d33f69f07365df163fbf5 Mon Sep 17 00:00:00 2001 From: Pomax Date: Sun, 30 Aug 2020 23:06:34 -0700 Subject: [PATCH] moulding --- .../chapters/curveintersection/curve-curve.js | 5 +- docs/chapters/moulding/content.en-GB.md | 37 ++-- docs/chapters/moulding/decasteljau.js | 34 +++ docs/chapters/moulding/handler.js | 203 ------------------ docs/chapters/moulding/mould-quadratic.js | 110 ---------- docs/chapters/moulding/moulding.js | 199 +++++++++++++++++ docs/chapters/projections/content.en-GB.md | 2 +- .../02d70e27ba678db49a883afcc6264c9a.png | Bin 32599 -> 0 bytes .../3689ed0c15eace45a1f6ae03909ad8ed.png | Bin 0 -> 30413 bytes .../524206c49f317d27d8e07a310b24a7a3.svg | 1 - .../53cf83a9d9f2173d3212ca87f380f071.png | Bin 0 -> 17641 bytes ...g => 7159e1e6eeab38c5aba225fe7553dbe6.svg} | 2 +- .../7f080cfc5764282db126164d6705d83d.png | Bin 18348 -> 0 bytes .../8e99a48e3227c97233c4933b5adcb080.svg | 1 + .../94f61d17f896aebddcf5a7c676aee7d1.svg | 1 - .../9de1da4f061d324415321a5ef688f067.png | Bin 0 -> 20003 bytes .../a0df70324a97e780df772a837c5f1c31.png | Bin 0 -> 20003 bytes .../e787b4456ccf03c0481f1731c5c32add.svg | 1 + .../fbc7d78dd768eec4314eb4b5320f2ce5.png | Bin 0 -> 14173 bytes docs/index.html | 48 +++-- docs/ja-JP/index.html | 48 +++-- docs/js/custom-element/api/graphics-api.js | 4 +- docs/js/custom-element/api/types/bezier.js | 4 +- docs/zh-CN/index.html | 48 +++-- 24 files changed, 369 insertions(+), 379 deletions(-) create mode 100644 docs/chapters/moulding/decasteljau.js delete mode 100644 docs/chapters/moulding/handler.js delete mode 100644 docs/chapters/moulding/mould-quadratic.js create mode 100644 docs/chapters/moulding/moulding.js delete mode 100644 docs/images/chapters/curveintersection/02d70e27ba678db49a883afcc6264c9a.png create mode 100644 docs/images/chapters/curveintersection/3689ed0c15eace45a1f6ae03909ad8ed.png delete mode 100644 docs/images/chapters/moulding/524206c49f317d27d8e07a310b24a7a3.svg create mode 100644 docs/images/chapters/moulding/53cf83a9d9f2173d3212ca87f380f071.png rename docs/images/chapters/moulding/{7bba0a4fd605e023cda922de125b3e32.svg => 7159e1e6eeab38c5aba225fe7553dbe6.svg} (63%) delete mode 100644 docs/images/chapters/moulding/7f080cfc5764282db126164d6705d83d.png create mode 100644 docs/images/chapters/moulding/8e99a48e3227c97233c4933b5adcb080.svg delete mode 100644 docs/images/chapters/moulding/94f61d17f896aebddcf5a7c676aee7d1.svg create mode 100644 docs/images/chapters/moulding/9de1da4f061d324415321a5ef688f067.png create mode 100644 docs/images/chapters/moulding/a0df70324a97e780df772a837c5f1c31.png create mode 100644 docs/images/chapters/moulding/e787b4456ccf03c0481f1731c5c32add.svg create mode 100644 docs/images/chapters/moulding/fbc7d78dd768eec4314eb4b5320f2ce5.png diff --git a/docs/chapters/curveintersection/curve-curve.js b/docs/chapters/curveintersection/curve-curve.js index ae7eb601..6a0a0d0b 100644 --- a/docs/chapters/curveintersection/curve-curve.js +++ b/docs/chapters/curveintersection/curve-curve.js @@ -48,8 +48,7 @@ draw() { // panel 2: the current iteration step nextPanel(); - setStroke(`black`); - line(0,0,0,this.height); + this.drawIteration(); setFill(`black`); let information = `Initial curves, threshold = ${this.epsilon}px` @@ -64,8 +63,6 @@ draw() { // panel 3: intersections nextPanel(); - setStroke(`black`); - line(0,0,0,this.height); this.drawIntersections(); } diff --git a/docs/chapters/moulding/content.en-GB.md b/docs/chapters/moulding/content.en-GB.md index 4ac43422..01e8f446 100644 --- a/docs/chapters/moulding/content.en-GB.md +++ b/docs/chapters/moulding/content.en-GB.md @@ -2,36 +2,47 @@ Armed with knowledge of the "ABC" relation, we can now update a curve interactively, by letting people click anywhere on the curve, find the t-value matching that coordinate, and then letting them drag that point around. With every drag update we'll have a new point "B", which we can combine with the fixed point "C" to find our new point A. Once we have those, we can reconstruct the de Casteljau skeleton and thus construct a new curve with the same start/end points as the original curve, passing through the user-selected point B, with correct new control points. - + -**Click-dragging the curve itself** shows what we're using to compute the new coordinates: while dragging you will see the original point B and its corresponding t-value, the original point C for that t-value, as well as the new point B' based on the mouse cursor. Since we know the t-value for this configuration, we can compute the ABC ratio for this configuration, and we know that our new point A' should like at a distance: +Click-dragging a point on the curve shows what we're using to compute the new coordinates: while dragging you will see the original point `B` and its corresponding t-value, and the original points `A` and `C` for that t-value, in light coloring, as well as the new `A'`, `B'`, and `C'` (although of course the `C` coordinates are the same ones, because that's the defining feature of point `C`) based on where you're dragging point `B` to, in purple. + +Since we know the new point `B'`, and the "new" point `C'` as well as the `t` value, we know our new point A' has to be: \[ - A' = B' - \frac{C - B'}{ratio} = B' + \frac{B' - C}{ratio} + A' = B' - \frac{C - B'}{ratio(t)} = B' + \frac{B' - C}{ratio(t)} \] -For quadratic curves, this means we're done, since the new point A' is equivalent to the new quadratic control point. For cubic curves, we need to do a little more work: +For quadratic curves, this means we're done, since the new point `A'` is equivalent to the new quadratic control point. - +For cubic curves, we need to do a little more work, because while computing a new `A'` is exactly the same as before, we're not quite done once we've done so. For cubic curves, `B` has not just an associated `t` value, but also two associated "side" values. Let's revisit the graphic from the chapter on de Casteljau's algorithm, to see what we mean: -To help understand what's going on, the cubic graphic shows the full de Casteljau construction "hull" when repositioning point B. We compute A' in exactly the same way as before, but we also record the final strut line that forms B in the original curve. Given A', B', and the endpoints e1 and e2 of the strut line relative to B', we can now compute where the new control points should be. Remember that B' lies on line e1--e2 at a distance t, because that's how Bézier curves work. In the same manner, we know the distance A--e1 is only line-interval [0,t] of the full segment, and A--e2 is only line-interval [t,1], so constructing the new control points is fairly easy. + + + -First, we construct the one-level-of-de-Casteljau-up points: +In addition to the `A`, `B`, and `C` values, we also see the points `e1` and `e2`, without which constructing our de Casteljau "strut lines" becomes very difficult indeed; as well as the points `v1` and `v2`, which we can construct when we know our ABC values enriched with `e1` and `e2`: \[ \left \{ \begin{aligned} - v1 &= e1 - \frac{e1 - A'}{t} \\ - v2 &= e2 + \frac{e2 - A'}{1 - t} + v1 &= A' - \frac{A' - e1}{1 - t} \\ + v2 &= A' - \frac{A' - e2}{t} \end{aligned} \right . \] -And then we can compute the new control points: +After which computing the new control points is straight-forward: \[ \left \{ \begin{aligned} - C1' &= v1 + \frac{v1 - start}{t} \\ - C2' &= v2 + \frac{v2 - end}{1 - t} + C1' &= start + \frac{v1 - start}{t} \\ + C2' &= end + \frac{v2 - end}{1 - t} \end{aligned} \right . \] -And that's cubic curve manipulation. +So let's put that into practice: + + + +So that looks pretty good, but you may not like having `e1` and `e2` stay the same distances away from `B'` while moving the point around. An alternative is to scale the distances of `e1` and `e2` to `B'` to match the scaling that `A`--`C` undergoes as `A'`--`C`' - whether this looks better or not depends somewhat on your intention as programmer or user, of course, so the following graphic applies this scaling, but it's up to you to decide whether or not that looks better (or, more appropriately, under which circumstances you might want to apply this scaling vs. when you might not): + + + diff --git a/docs/chapters/moulding/decasteljau.js b/docs/chapters/moulding/decasteljau.js new file mode 100644 index 00000000..632c5b5c --- /dev/null +++ b/docs/chapters/moulding/decasteljau.js @@ -0,0 +1,34 @@ +let curve; + +setup() { + curve = Bezier.defaultCubic(this); + setMovable(curve.points); + setSlider(`.slide-control`, `position`, 0.5); +} + +draw() { + clear(); + const blue = `lightblue`; + const t = this.position; + const {A,B,C,S,E} = curve.getABC(t); + const struts = curve.drawStruts(t, blue, false); + curve.drawSkeleton(blue); + curve.drawCurve(`black`); + setStroke(blue); + line(S.x, S.y, E.x, E.y); + line(A.x, A.y, C.x, C.y); + curve.drawPoints(); + + [A,B,C].forEach(p => circle(p.x, p.y, 3)); + setFill(`black`); + text(`A`, A.x+10, A.y); + text(`B`, B.x+10, B.y); + text(`C`, C.x+10, C.y); + setStroke(`purple`); + + const lbl = [`v1`, `v2`, `e1`, `e2`]; + [struts[4], struts[6], struts[7], struts[8]].forEach((p,i) => { + circle(p.x, p.y, 2); + text(lbl[i], p.x+10, p.y); + }); +} diff --git a/docs/chapters/moulding/handler.js b/docs/chapters/moulding/handler.js deleted file mode 100644 index b3514949..00000000 --- a/docs/chapters/moulding/handler.js +++ /dev/null @@ -1,203 +0,0 @@ -var abs = Math.abs; - -module.exports = { - setupQuadratic: function(api) { - api.setPanelCount(3); - var curve = api.getDefaultQuadratic(); - curve.points[2].x -= 30; - api.setCurve(curve); - }, - - setupCubic: function(api) { - api.setPanelCount(3); - var curve = new api.Bezier([100,230, 30,160, 200,50, 210,160]); - curve.points[2].y -= 20; - api.setCurve(curve); - api.lut = curve.getLUT(100); - }, - - saveCurve: function(evt, api) { - if (!api.t) return; - if (!api.newcurve) return; - api.setCurve(api.newcurve); - api.t = false; - api.redraw(); - }, - - findTValue: function(evt, api) { - var t = api.curve.on({x: evt.offsetX, y: evt.offsetY},7); - if (t < 0.05 || t > 0.95) return false; - return t; - }, - - markQB: function(evt, api) { - api.t = this.findTValue(evt, api); - if(api.t) { - var t = api.t, - t2 = 2*t, - top = t2*t - t2, - bottom = top + 1, - ratio = abs(top/bottom), - curve = api.curve, - A = api.A = curve.points[1], - B = api.B = curve.get(t); - api.C = api.utils.lli4(A, B, curve.points[0], curve.points[2]); - api.ratio = ratio; - this.dragQB(evt, api); - } - }, - - markCB: function(evt, api) { - api.t = this.findTValue(evt, api); - if(api.t) { - var t = api.t, - mt = (1-t), - t3 = t*t*t, - mt3 = mt*mt*mt, - bottom = t3 + mt3, - top = bottom - 1, - ratio = abs(top/bottom), - curve = api.curve, - hull = curve.hull(t), - A = api.A = hull[5], - B = api.B = curve.get(t); - api.db = curve.derivative(t); - api.C = api.utils.lli4(A, B, curve.points[0], curve.points[3]); - api.ratio = ratio; - this.dragCB(evt, api); - } - }, - - drag: function(evt, api) { - if (!api.t) return; - - var newB = api.newB = { - x: evt.offsetX, - y: evt.offsetY - }; - - // now that we know A, B, C and the AB:BC ratio, we can compute the new A' based on the desired B' - api.newA = { - x: newB.x - (api.C.x - newB.x) / api.ratio, - y: newB.y - (api.C.y - newB.y) / api.ratio - }; - }, - - dragQB: function(evt, api) { - if (!api.t) return; - this.drag(evt, api); - api.update = [api.newA]; - }, - - dragCB: function(evt, api) { - if (!api.t) return; - this.drag(evt,api); - - // preserve struts for B when repositioning - var curve = api.curve, - hull = curve.hull(api.t), - B = api.B, - Bl = hull[7], - Br = hull[8], - dbl = { x: Bl.x - B.x, y: Bl.y - B.y }, - dbr = { x: Br.x - B.x, y: Br.y - B.y }, - pts = curve.points, - // find new point on s--c1 - p1 = {x: api.newB.x + dbl.x, y: api.newB.y + dbl.y}, - sc1 = { - x: api.newA.x - (api.newA.x - p1.x)/(1-api.t), - y: api.newA.y - (api.newA.y - p1.y)/(1-api.t) - }, - // find new point on c2--e - p2 = {x: api.newB.x + dbr.x, y: api.newB.y + dbr.y}, - sc2 = { - x: api.newA.x + (p2.x - api.newA.x)/(api.t), - y: api.newA.y + (p2.y - api.newA.y)/(api.t) - }, - // construct new c1` based on the fact that s--sc1 is s--c1 * t - nc1 = { - x: pts[0].x + (sc1.x - pts[0].x)/(api.t), - y: pts[0].y + (sc1.y - pts[0].y)/(api.t) - }, - // construct new c2` based on the fact that e--sc2 is e--c2 * (1-t) - nc2 = { - x: pts[3].x - (pts[3].x - sc2.x)/(1-api.t), - y: pts[3].y - (pts[3].y - sc2.y)/(1-api.t) - }; - - api.p1 = p1; - api.p2 = p2; - api.sc1 = sc1; - api.sc2 = sc2; - api.nc1 = nc1; - api.nc2 = nc2; - - api.update = [nc1, nc2]; - }, - - drawMould: function(api, curve) { - api.reset(); - - api.drawSkeleton(curve); - api.drawCurve(curve); - - var w = api.getPanelWidth(), - h = api.getPanelHeight(), - offset = {x:w, y:0}, - round = api.utils.round; - - api.setColor("black"); - api.drawLine({x:0,y:0},{x:0,y:h}, offset); - api.drawLine({x:w,y:0},{x:w,y:h}, offset); - - if (api.t && api.update) { - api.drawCircle(curve.get(api.t),3); - api.npts = [curve.points[0]].concat(api.update).concat([curve.points.slice(-1)[0]]); - api.newcurve = new api.Bezier(api.npts); - - api.setColor("lightgrey"); - api.drawCurve(api.newcurve); - var newhull = api.drawHull(api.newcurve, api.t, offset); - api.drawLine(api.npts[0], api.npts.slice(-1)[0], offset); - api.drawLine(api.newA, api.newB, offset); - - api.setColor("grey"); - api.drawCircle(api.newA, 3, offset); - api.setColor("blue"); - api.drawCircle(api.B, 3, offset); - api.drawCircle(api.C, 3, offset); - api.drawCircle(api.newB, 3, offset); - api.drawLine(api.B, api.C, offset); - api.drawLine(api.newB, api.C, offset); - - api.setFill("black"); - api.text("A'", api.newA, {x:offset.x + 7, y:offset.y + 1}); - api.text("start", curve.get(0), {x:offset.x + 7, y:offset.y + 1}); - api.text("end", curve.get(1), {x:offset.x + 7, y:offset.y + 1}); - api.setFill("blue"); - api.text("B'", api.newB, {x:offset.x + 7, y:offset.y + 1}); - api.text("B, at t = "+round(api.t,2), api.B, {x:offset.x + 7, y:offset.y + 1}); - api.text("C", api.C, {x:offset.x + 7, y:offset.y + 1}); - - if(curve.order === 3) { - var hull = curve.hull(api.t); - api.drawLine(hull[7], hull[8], offset); - api.drawLine(newhull[7], newhull[8], offset); - api.drawCircle(newhull[7], 3, offset); - api.drawCircle(newhull[8], 3, offset); - api.text("e1", newhull[7], {x:offset.x + 7, y:offset.y + 1}); - api.text("e2", newhull[8], {x:offset.x + 7, y:offset.y + 1}); - } - - offset.x += w; - - api.setColor("lightgrey"); - api.drawSkeleton(api.newcurve, offset); - api.setColor("black"); - api.drawCurve(api.newcurve, offset); - } else { - offset.x += w; - api.drawCurve(curve, offset); - } - } -}; diff --git a/docs/chapters/moulding/mould-quadratic.js b/docs/chapters/moulding/mould-quadratic.js deleted file mode 100644 index 6e79417e..00000000 --- a/docs/chapters/moulding/mould-quadratic.js +++ /dev/null @@ -1,110 +0,0 @@ -let curve; - -setup() { - setPanelCount(3); - curve = Bezier.defaultQuadratic(this); - this.position = {x:0,y:0}; - setMovable(curve.points, [this.position]); -} - -draw() { - clear(); - - curve.drawSkeleton(); - curve.drawCurve(); - curve.drawPoints(); - - if (this.position) { - setColor(`blue`); - let p = this.position.projection; - if (!this.mark) { - p = this.position.projection = curve.project( - this.position.x, - this.position.y - ) - this.position.x = p.x; - this.position.y = p.y; - } - circle(p.x, p.y, 3); - } - - nextPanel(); - setStroke(`black`); - line(0,0,0,this.height); - - curve.drawSkeleton(`lightblue`); - curve.drawCurve(`lightblue`); - curve.points.forEach(p => circle(p.x, p.y, 2)); - - if (this.mark) { - let B = this.mark.B; - setFill(`black`); - text(`t = ${this.mark.t.toFixed(2)}`, B.x + 5, B.y + 10); - - let {A, C, S, E} = curve.getABC(this.mark.t, B); - setColor(`lightblue`); - line(S.x, S.y, E.x, E.y); - line(A.x, A.y, C.x, C.y); - circle(A.x, A.y, 3); - circle(B.x, B.y, 3); - circle(C.x, C.y, 3); - - if (this.currentPoint) { - let {A,B,C,S,E} = curve.getABC(this.mark.t, this.position); - setColor(`purple`); - line(A.x, A.y, C.x, C.y); - line(S.x, S.y, A.x, A.y); - line(E.x, E.y, A.x, A.y); - circle(A.x, A.y, 3); - circle(B.x, B.y, 3); - circle(C.x, C.y, 3); - - this.moulded = new Bezier(this, [S,A,E]); - } - } - - nextPanel(); - setStroke(`black`); - line(0,0,0,this.height); - - if (this.moulded) { - this.moulded.drawSkeleton(`lightblue`); - this.moulded.drawCurve(`black`); - this.moulded.points.forEach(p => circle(p.x, p.y, 2)); - } else { - curve.drawSkeleton(`lightblue`); - curve.drawCurve(`black`); - curve.points.forEach(p => circle(p.x, p.y, 2)); - } -} - -onMouseDown() { - if (this.currentPoint !== this.position) { - this.mark = false; - this.position.projection = false; - } - else if (this.position.projection) { - this.mark = { - B: this.position.projection, - t: this.position.projection.t - }; - } - redraw(); -} - -onMouseMove() { - if (!this.currentPoint && !this.mark) { - this.position.x = this.cursor.x; - this.position.y = this.cursor.y; - } - redraw(); -} - -onMouseUp() { - this.mark = false; - if (this.moulded) { - curve = this.moulded; - resetMovable(curve.points, [this.position]); - } - redraw(); -} diff --git a/docs/chapters/moulding/moulding.js b/docs/chapters/moulding/moulding.js new file mode 100644 index 00000000..2810082d --- /dev/null +++ b/docs/chapters/moulding/moulding.js @@ -0,0 +1,199 @@ +let curve; + +setup() { + setPanelCount(3); + const type = this.type = this.parameters.type ?? `quadratic`; + curve = type === `quadratic` ? Bezier.defaultQuadratic(this) : Bezier.defaultCubic(this); + this.position = {x:0,y:0}; + setMovable(curve.points, [this.position]); +} + +draw() { + clear(); + + curve.drawSkeleton(); + curve.drawCurve(); + curve.drawPoints(); + this.drawPosition(); + + nextPanel(); + + curve.drawSkeleton(`lightblue`); + curve.drawCurve(`lightblue`); + curve.points.forEach(p => circle(p.x, p.y, 2)); + this.drawMark(); + + nextPanel(); + + this.drawResult(); +} + +drawPosition() { + if (!this.position) return; + + setColor(`blue`); + let p = this.position.projection; + if (!this.mark) { + p = this.position.projection = curve.project( + this.position.x, + this.position.y + ) + this.position.x = p.x; + this.position.y = p.y; + } + circle(p.x, p.y, 3); +} + +drawMark() { + if (!this.mark) return; + if (this.type === `quadratic`) { + this.drawQuadraticMark(); + } else { + this.drawCubicMark(); + } +} + +drawQuadraticMark() { + let {B, t} = this.mark; + setFill(`black`); + text(`t = ${t.toFixed(2)}`, B.x + 5, B.y + 10); + + let {A, C, S, E} = curve.getABC(t, B); + setColor(`lightblue`); + line(S.x, S.y, E.x, E.y); + line(A.x, A.y, C.x, C.y); + + const lbl = [`A`, `B`, `C`]; + [A,B,C].forEach((p,i) => { + circle(p.x, p.y, 3); + text(lbl[i], p.x + 10, p.y); + }); + + if (this.currentPoint) { + let {A,B,C,S,E} = curve.getABC(t, this.position); + setColor(`purple`); + line(A.x, A.y, C.x, C.y); + line(S.x, S.y, A.x, A.y); + line(E.x, E.y, A.x, A.y); + [A,B,C].forEach(p => circle(p.x, p.y, 3)); + + noFill(); + circle(B.x, B.y, 5); + this.moulded = new Bezier(this, [S,A,E]); + } +} + +drawCubicMark() { + let {B, t, e1, e2} = this.mark; + let d1 = { x: e1.x - B.x, y: e1.y - B.y}; + let d2 = { x: e2.x - B.x, y: e2.y - B.y}; + setFill(`black`); + text(`t = ${t.toFixed(2)}`, B.x + 5, B.y + 10); + + let {A, C, S, E} = curve.getABC(this.mark.t, B); + let olen = dist(A.x, A.y, C.x, C.y); + setColor(`lightblue`); + line(S.x, S.y, E.x, E.y); + line(A.x, A.y, C.x, C.y); + + const lbl = [`A`, `B`, `C`, `e1`, `e2`]; + [A,B,C,e1,e2].forEach((p,i) => { + circle(p.x, p.y, 3); + text(lbl[i], p.x + 10, p.y); + }); + + if (this.currentPoint) { + let {A,B,C,S,E} = curve.getABC(this.mark.t, this.position); + + let nlen = dist(A.x, A.y, C.x, C.y); + let f = this.parameters.scaling ? nlen/olen : 1; + let e1 = { x: B.x + f * d1.x, y: B.y + f * d1.y }; + let e2 = { x: B.x + f * d2.x, y: B.y + f * d2.y }; + + setColor(`purple`); + line(A.x, A.y, C.x, C.y); + line(e1.x, e1.y, e2.x, e2.y); + + let v1 = { + x: A.x - (A.x - e1.x)/(1-t), + y: A.y - (A.y - e1.y)/(1-t) + }; + + let v2 = { + x: A.x - (A.x - e2.x)/t, + y: A.y - (A.y - e2.y)/t + }; + + let C1 = { + x: S.x + (v1.x - S.x) / t, + y: S.y + (v1.y - S.y) / t + }; + let C2 = { + x: E.x + (v2.x - E.x) / (1-t), + y: E.y + (v2.y - E.y) / (1-t) + }; + + [A,B,C,e1,e2,v1,v2,C1,C2].forEach(p => circle(p.x, p.y, 3)); + + noFill(); + circle(B.x, B.y, 5); + this.moulded = new Bezier(this, [S,C1,C2,E]); + } +} + +drawResult() { + let last = curve; + if (this.moulded) last = this.moulded; + + last.drawSkeleton(`lightblue`); + last.drawCurve(`black`); + last.points.forEach(p => circle(p.x, p.y, 2)); + + if (this.mark) { + let t = this.mark.t; + let B = last.get(t); + circle(B.x, B.y, 3); + setFill(`black`); + text(`t = ${this.mark.t.toFixed(2)}`, B.x + 5, B.y + 10); + } +} + +onMouseDown() { + if (this.currentPoint !== this.position) { + this.mark = false; + this.position.projection = false; + } + else if (this.position.projection) { + let t = this.position.projection.t; + if (this.type === `quadratic`) { + this.mark = { + t, B: this.position.projection, + }; + } else { + let struts = curve.getStrutPoints(t); + this.mark = { + t, B: this.position.projection, + e1: struts[7], + e2: struts[8] + }; + } + } + redraw(); +} + +onMouseMove() { + if (!this.currentPoint && !this.mark) { + this.position.x = this.cursor.x; + this.position.y = this.cursor.y; + } + redraw(); +} + +onMouseUp() { + this.mark = false; + if (this.moulded) { + curve = this.moulded; + resetMovable(curve.points, [this.position]); + } + redraw(); +} diff --git a/docs/chapters/projections/content.en-GB.md b/docs/chapters/projections/content.en-GB.md index 73f42928..0e7c544f 100644 --- a/docs/chapters/projections/content.en-GB.md +++ b/docs/chapters/projections/content.en-GB.md @@ -22,6 +22,6 @@ After this runs, we know that `LUT[i]` is the coordinate on the curve _in our LU 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 Bezier curve (which, of course, you can reshape as you like). Also shown are the original three points that our coarse check finds. +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/images/chapters/curveintersection/02d70e27ba678db49a883afcc6264c9a.png b/docs/images/chapters/curveintersection/02d70e27ba678db49a883afcc6264c9a.png deleted file mode 100644 index 4dc1ed9cd56276e697afbd3dea61e4a877c6cc57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32599 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 _0 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 AO8@`> diff --git a/docs/images/chapters/curveintersection/3689ed0c15eace45a1f6ae03909ad8ed.png b/docs/images/chapters/curveintersection/3689ed0c15eace45a1f6ae03909ad8ed.png new file mode 100644 index 0000000000000000000000000000000000000000..c48f987fe0c01628ca8bb61d863a4049aaaa0a39 GIT binary patch literal 30413 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 k9)lM4|DV5f@egOMtKRnO`_~%dep \ No newline at end of file diff --git a/docs/images/chapters/moulding/53cf83a9d9f2173d3212ca87f380f071.png b/docs/images/chapters/moulding/53cf83a9d9f2173d3212ca87f380f071.png new file mode 100644 index 0000000000000000000000000000000000000000..0da8d01e35f92ed192f4f661655b7692ebd930b3 GIT binary patch literal 17641 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

v;7^&fs6@&Zi2or!Kv) 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 \ No newline at end of file + \ No newline at end of file diff --git a/docs/images/chapters/moulding/7f080cfc5764282db126164d6705d83d.png b/docs/images/chapters/moulding/7f080cfc5764282db126164d6705d83d.png deleted file mode 100644 index 9be106b15ae2f3d7c427b8c8b1b9d33472a3573c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18348 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 y6bkUBgy?7 \ No newline at end of file diff --git a/docs/images/chapters/moulding/94f61d17f896aebddcf5a7c676aee7d1.svg b/docs/images/chapters/moulding/94f61d17f896aebddcf5a7c676aee7d1.svg deleted file mode 100644 index 1d1c2eb2..00000000 --- a/docs/images/chapters/moulding/94f61d17f896aebddcf5a7c676aee7d1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/images/chapters/moulding/9de1da4f061d324415321a5ef688f067.png b/docs/images/chapters/moulding/9de1da4f061d324415321a5ef688f067.png new file mode 100644 index 0000000000000000000000000000000000000000..07b52bf4f9e17c3f84de789d533788631fbe896d GIT binary patch literal 20003 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 NEpWyzCKCR#uc9LX^EKt0+R58QBrC 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 NEp \ No newline at end of file diff --git a/docs/images/chapters/moulding/fbc7d78dd768eec4314eb4b5320f2ce5.png b/docs/images/chapters/moulding/fbc7d78dd768eec4314eb4b5320f2ce5.png new file mode 100644 index 0000000000000000000000000000000000000000..1c0139088788fb94a560f19ec40a0ecf489b2a30 GIT binary patch literal 14173 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 IWfJl~0CZYA8vp(can you find the configuration that yields the maximum number of intersections between two cubic curves? Nine intersections!)

- + Scripts are disabled. Showing fallback image. @@ -1619,7 +1619,7 @@ for (coordinate, index) in LUT:
  • we then check which of these five points is the closest to our original point p, and then repeat step 1 with the points before and after the closest point we just found.
  • 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 Bezier curve (which, of course, you can reshape as you like). Also shown are the original three points that our coarse check finds.

    +

    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.

    @@ -1630,23 +1630,43 @@ for (coordinate, index) in LUT:
    diff --git a/docs/ja-JP/index.html b/docs/ja-JP/index.html index a50667df..c31691cc 100644 --- a/docs/ja-JP/index.html +++ b/docs/ja-JP/index.html @@ -1537,7 +1537,7 @@ lli = function(line1, line2):

    (can you find the configuration that yields the maximum number of intersections between two cubic curves? Nine intersections!)

    - + Scripts are disabled. Showing fallback image. @@ -1616,7 +1616,7 @@ for (coordinate, index) in LUT:
  • we then check which of these five points is the closest to our original point p, and then repeat step 1 with the points before and after the closest point we just found.
  • 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 Bezier curve (which, of course, you can reshape as you like). Also shown are the original three points that our coarse check finds.

    +

    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.

    @@ -1627,23 +1627,43 @@ for (coordinate, index) in LUT:

    Manipulating a curve

    Armed with knowledge of the "ABC" relation, we can now update a curve interactively, by letting people click anywhere on the curve, find the t-value matching that coordinate, and then letting them drag that point around. With every drag update we'll have a new point "B", which we can combine with the fixed point "C" to find our new point A. Once we have those, we can reconstruct the de Casteljau skeleton and thus construct a new curve with the same start/end points as the original curve, passing through the user-selected point B, with correct new control points.

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

    Click-dragging the curve itself shows what we're using to compute the new coordinates: while dragging you will see the original point B and its corresponding t-value, the original point C for that t-value, as well as the new point B' based on the mouse cursor. Since we know the t-value for this configuration, we can compute the ABC ratio for this configuration, and we know that our new point A' should like at a distance:

    - -

    For quadratic curves, this means we're done, since the new point A' is equivalent to the new quadratic control point. For cubic curves, we need to do a little more work:

    - +

    Click-dragging a point on the curve shows what we're using to compute the new coordinates: while dragging you will see the original point B and its corresponding t-value, and the original points A and C for that t-value, in light coloring, as well as the new A', B', and C' (although of course the C coordinates are the same ones, because that's the defining feature of point C) based on where you're dragging point B to, in purple.

    +

    Since we know the new point B', and the "new" point C' as well as the t value, we know our new point A' has to be:

    + +

    For quadratic curves, this means we're done, since the new point A' is equivalent to the new quadratic control point.

    +

    For cubic curves, we need to do a little more work, because while computing a new A' is exactly the same as before, we're not quite done once we've done so. For cubic curves, B has not just an associated t value, but also two associated "side" values. Let's revisit the graphic from the chapter on de Casteljau's algorithm, to see what we mean:

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

    In addition to the A, B, and C values, we also see the points e1 and e2, without which constructing our de Casteljau "strut lines" becomes very difficult indeed; as well as the points v1 and v2, which we can construct when we know our ABC values enriched with e1 and e2:

    + +

    After which computing the new control points is straight-forward:

    + +

    So let's put that into practice:

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

    So that looks pretty good, but you may not like having e1 and e2 stay the same distances away from B' while moving the point around. An alternative is to scale the distances of e1 and e2 to B' to match the scaling that A--C undergoes as A'--C' - whether this looks better or not depends somewhat on your intention as programmer or user, of course, so the following graphic applies this scaling, but it's up to you to decide whether or not that looks better (or, more appropriately, under which circumstances you might want to apply this scaling vs. when you might not):

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

    To help understand what's going on, the cubic graphic shows the full de Casteljau construction "hull" when repositioning point B. We compute A' in exactly the same way as before, but we also record the final strut line that forms B in the original curve. Given A', B', and the endpoints e1 and e2 of the strut line relative to B', we can now compute where the new control points should be. Remember that B' lies on line e1--e2 at a distance t, because that's how Bézier curves work. In the same manner, we know the distance A--e1 is only line-interval [0,t] of the full segment, and A--e2 is only line-interval [t,1], so constructing the new control points is fairly easy.

    -

    First, we construct the one-level-of-de-Casteljau-up points:

    - -

    And then we can compute the new control points:

    - -

    And that's cubic curve manipulation.

    diff --git a/docs/js/custom-element/api/graphics-api.js b/docs/js/custom-element/api/graphics-api.js index bfa9a4f8..57007b89 100644 --- a/docs/js/custom-element/api/graphics-api.js +++ b/docs/js/custom-element/api/graphics-api.js @@ -142,8 +142,10 @@ class GraphicsAPI extends BaseAPI { /** * Multi-panel graphics: set up (0,0) to the next panel's start */ - nextPanel(c) { + nextPanel(color = `black`) { this.translate(this.panelWidth, 0); + this.setStroke(color); + this.line(0, 0, 0, this.height); } /** diff --git a/docs/js/custom-element/api/types/bezier.js b/docs/js/custom-element/api/types/bezier.js index ff3165c0..be10c47f 100644 --- a/docs/js/custom-element/api/types/bezier.js +++ b/docs/js/custom-element/api/types/bezier.js @@ -118,7 +118,7 @@ class Bezier extends Original { return p; } - drawStruts(t, color = `black`) { + drawStruts(t, color = `black`, showpoints = true) { const p = t.forEach ? t : this.getStrutPoints(t); const api = this.api; @@ -134,7 +134,7 @@ class Bezier extends Original { for (let i = 0; i < n; i++) { let pt = p[s + i]; api.vertex(pt.x, pt.y); - api.circle(pt.x, pt.y, 5); + if (showpoints) api.circle(pt.x, pt.y, 5); } api.end(); s += n; diff --git a/docs/zh-CN/index.html b/docs/zh-CN/index.html index b17ada6e..e8862b3b 100644 --- a/docs/zh-CN/index.html +++ b/docs/zh-CN/index.html @@ -1531,7 +1531,7 @@ lli = function(line1, line2):

    (can you find the configuration that yields the maximum number of intersections between two cubic curves? Nine intersections!)

    - + Scripts are disabled. Showing fallback image. @@ -1610,7 +1610,7 @@ for (coordinate, index) in LUT:
  • we then check which of these five points is the closest to our original point p, and then repeat step 1 with the points before and after the closest point we just found.
  • 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 Bezier curve (which, of course, you can reshape as you like). Also shown are the original three points that our coarse check finds.

    +

    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.

    @@ -1621,23 +1621,43 @@ for (coordinate, index) in LUT:

    Manipulating a curve

    Armed with knowledge of the "ABC" relation, we can now update a curve interactively, by letting people click anywhere on the curve, find the t-value matching that coordinate, and then letting them drag that point around. With every drag update we'll have a new point "B", which we can combine with the fixed point "C" to find our new point A. Once we have those, we can reconstruct the de Casteljau skeleton and thus construct a new curve with the same start/end points as the original curve, passing through the user-selected point B, with correct new control points.

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

    Click-dragging the curve itself shows what we're using to compute the new coordinates: while dragging you will see the original point B and its corresponding t-value, the original point C for that t-value, as well as the new point B' based on the mouse cursor. Since we know the t-value for this configuration, we can compute the ABC ratio for this configuration, and we know that our new point A' should like at a distance:

    - -

    For quadratic curves, this means we're done, since the new point A' is equivalent to the new quadratic control point. For cubic curves, we need to do a little more work:

    - +

    Click-dragging a point on the curve shows what we're using to compute the new coordinates: while dragging you will see the original point B and its corresponding t-value, and the original points A and C for that t-value, in light coloring, as well as the new A', B', and C' (although of course the C coordinates are the same ones, because that's the defining feature of point C) based on where you're dragging point B to, in purple.

    +

    Since we know the new point B', and the "new" point C' as well as the t value, we know our new point A' has to be:

    + +

    For quadratic curves, this means we're done, since the new point A' is equivalent to the new quadratic control point.

    +

    For cubic curves, we need to do a little more work, because while computing a new A' is exactly the same as before, we're not quite done once we've done so. For cubic curves, B has not just an associated t value, but also two associated "side" values. Let's revisit the graphic from the chapter on de Casteljau's algorithm, to see what we mean:

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

    In addition to the A, B, and C values, we also see the points e1 and e2, without which constructing our de Casteljau "strut lines" becomes very difficult indeed; as well as the points v1 and v2, which we can construct when we know our ABC values enriched with e1 and e2:

    + +

    After which computing the new control points is straight-forward:

    + +

    So let's put that into practice:

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

    So that looks pretty good, but you may not like having e1 and e2 stay the same distances away from B' while moving the point around. An alternative is to scale the distances of e1 and e2 to B' to match the scaling that A--C undergoes as A'--C' - whether this looks better or not depends somewhat on your intention as programmer or user, of course, so the following graphic applies this scaling, but it's up to you to decide whether or not that looks better (or, more appropriately, under which circumstances you might want to apply this scaling vs. when you might not):

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

    To help understand what's going on, the cubic graphic shows the full de Casteljau construction "hull" when repositioning point B. We compute A' in exactly the same way as before, but we also record the final strut line that forms B in the original curve. Given A', B', and the endpoints e1 and e2 of the strut line relative to B', we can now compute where the new control points should be. Remember that B' lies on line e1--e2 at a distance t, because that's how Bézier curves work. In the same manner, we know the distance A--e1 is only line-interval [0,t] of the full segment, and A--e2 is only line-interval [t,1], so constructing the new control points is fairly easy.

    -

    First, we construct the one-level-of-de-Casteljau-up points:

    - -

    And then we can compute the new control points:

    - -

    And that's cubic curve manipulation.

    Manipulating a curve

    Armed with knowledge of the "ABC" relation, we can now update a curve interactively, by letting people click anywhere on the curve, find the t-value matching that coordinate, and then letting them drag that point around. With every drag update we'll have a new point "B", which we can combine with the fixed point "C" to find our new point A. Once we have those, we can reconstruct the de Casteljau skeleton and thus construct a new curve with the same start/end points as the original curve, passing through the user-selected point B, with correct new control points.

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

    Click-dragging the curve itself shows what we're using to compute the new coordinates: while dragging you will see the original point B and its corresponding t-value, the original point C for that t-value, as well as the new point B' based on the mouse cursor. Since we know the t-value for this configuration, we can compute the ABC ratio for this configuration, and we know that our new point A' should like at a distance:

    - -

    For quadratic curves, this means we're done, since the new point A' is equivalent to the new quadratic control point. For cubic curves, we need to do a little more work:

    - +

    Click-dragging a point on the curve shows what we're using to compute the new coordinates: while dragging you will see the original point B and its corresponding t-value, and the original points A and C for that t-value, in light coloring, as well as the new A', B', and C' (although of course the C coordinates are the same ones, because that's the defining feature of point C) based on where you're dragging point B to, in purple.

    +

    Since we know the new point B', and the "new" point C' as well as the t value, we know our new point A' has to be:

    + +

    For quadratic curves, this means we're done, since the new point A' is equivalent to the new quadratic control point.

    +

    For cubic curves, we need to do a little more work, because while computing a new A' is exactly the same as before, we're not quite done once we've done so. For cubic curves, B has not just an associated t value, but also two associated "side" values. Let's revisit the graphic from the chapter on de Casteljau's algorithm, to see what we mean:

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

    In addition to the A, B, and C values, we also see the points e1 and e2, without which constructing our de Casteljau "strut lines" becomes very difficult indeed; as well as the points v1 and v2, which we can construct when we know our ABC values enriched with e1 and e2:

    + +

    After which computing the new control points is straight-forward:

    + +

    So let's put that into practice:

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

    So that looks pretty good, but you may not like having e1 and e2 stay the same distances away from B' while moving the point around. An alternative is to scale the distances of e1 and e2 to B' to match the scaling that A--C undergoes as A'--C' - whether this looks better or not depends somewhat on your intention as programmer or user, of course, so the following graphic applies this scaling, but it's up to you to decide whether or not that looks better (or, more appropriately, under which circumstances you might want to apply this scaling vs. when you might not):

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

    To help understand what's going on, the cubic graphic shows the full de Casteljau construction "hull" when repositioning point B. We compute A' in exactly the same way as before, but we also record the final strut line that forms B in the original curve. Given A', B', and the endpoints e1 and e2 of the strut line relative to B', we can now compute where the new control points should be. Remember that B' lies on line e1--e2 at a distance t, because that's how Bézier curves work. In the same manner, we know the distance A--e1 is only line-interval [0,t] of the full segment, and A--e2 is only line-interval [t,1], so constructing the new control points is fairly easy.

    -

    First, we construct the one-level-of-de-Casteljau-up points:

    - -

    And then we can compute the new control points:

    - -

    And that's cubic curve manipulation.