From d326d68bc54663c776e44ff672cba53e3f7967c2 Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Wed, 17 Sep 2025 13:11:28 -0700 Subject: [PATCH] upgrade: riesketcher 0.4.0 --- packages/preview/riesketcher/0.4.0/.gitignore | 2 + packages/preview/riesketcher/0.4.0/LICENSE | 21 +++ packages/preview/riesketcher/0.4.0/README.md | 15 ++ packages/preview/riesketcher/0.4.0/lib.typ | 2 + packages/preview/riesketcher/0.4.0/manual.pdf | Bin 0 -> 71948 bytes packages/preview/riesketcher/0.4.0/manual.typ | 125 ++++++++++++++ .../preview/riesketcher/0.4.0/riesketcher.typ | 160 ++++++++++++++++++ .../preview/riesketcher/0.4.0/trapezoidal.typ | 142 ++++++++++++++++ packages/preview/riesketcher/0.4.0/typst.toml | 10 ++ packages/preview/riesketcher/0.4.0/util.typ | 32 ++++ 10 files changed, 509 insertions(+) create mode 100644 packages/preview/riesketcher/0.4.0/.gitignore create mode 100644 packages/preview/riesketcher/0.4.0/LICENSE create mode 100644 packages/preview/riesketcher/0.4.0/README.md create mode 100644 packages/preview/riesketcher/0.4.0/lib.typ create mode 100644 packages/preview/riesketcher/0.4.0/manual.pdf create mode 100644 packages/preview/riesketcher/0.4.0/manual.typ create mode 100644 packages/preview/riesketcher/0.4.0/riesketcher.typ create mode 100644 packages/preview/riesketcher/0.4.0/trapezoidal.typ create mode 100644 packages/preview/riesketcher/0.4.0/typst.toml create mode 100644 packages/preview/riesketcher/0.4.0/util.typ diff --git a/packages/preview/riesketcher/0.4.0/.gitignore b/packages/preview/riesketcher/0.4.0/.gitignore new file mode 100644 index 0000000000..348a0ebdd4 --- /dev/null +++ b/packages/preview/riesketcher/0.4.0/.gitignore @@ -0,0 +1,2 @@ +*.pdf +!manual.pdf \ No newline at end of file diff --git a/packages/preview/riesketcher/0.4.0/LICENSE b/packages/preview/riesketcher/0.4.0/LICENSE new file mode 100644 index 0000000000..f03920df4e --- /dev/null +++ b/packages/preview/riesketcher/0.4.0/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023-2024 Kainoa Kanter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/preview/riesketcher/0.4.0/README.md b/packages/preview/riesketcher/0.4.0/README.md new file mode 100644 index 0000000000..b48daba8a8 --- /dev/null +++ b/packages/preview/riesketcher/0.4.0/README.md @@ -0,0 +1,15 @@ +# riesketcher + +A package to draw Riemann sums (and their plots) of a function with CeTZ. + +Usage example and docs: [manual.pdf](https://github.com/ThatOneCalculator/riesketcher/blob/main/manual.pdf) + +```typst +#import "@preview/riesketcher:0.4.0": riesketcher +``` + +![Demo](https://github.com/ThatOneCalculator/riesketcher/assets/44733677/4f87b750-e4be-4698-b650-74f4fe56789d) + +![Demo for custom partitions](https://github.com/VincentTam/riesketcher/assets/5748535/3b830cb8-c017-4ed4-9410-7f3bad79edab) + +![Demo for trapezoidal rule](https://github.com/user-attachments/assets/f72b6a96-2c8e-4b95-a4d1-cad89fbb75e0) diff --git a/packages/preview/riesketcher/0.4.0/lib.typ b/packages/preview/riesketcher/0.4.0/lib.typ new file mode 100644 index 0000000000..3aed54db00 --- /dev/null +++ b/packages/preview/riesketcher/0.4.0/lib.typ @@ -0,0 +1,2 @@ +#import "riesketcher.typ": riesketcher +#import "trapezoidal.typ": trapezoidal diff --git a/packages/preview/riesketcher/0.4.0/manual.pdf b/packages/preview/riesketcher/0.4.0/manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..13a7477087f73d47506cdae52f01c313b4e743ae GIT binary patch literal 71948 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

p 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

rr*T;9Yv%dfVp9$W3cn0=t~fAH+h}*Bav7N-ytN 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 block({ + table(columns: (50%, 50%), stroke: none, align: (center + horizon, left), + align(left, raw(lang: "typc", it.text)), + eval("canvas({" + it.text + "})", scope: (canvas: canvas, riesketcher: riesketcher, trapezoidal: trapezoidal)) + ) +}) + +== Examples +=== Left-Hand Riemann sum + +```example +riesketcher( + x => calc.pow(x, 3) + 4, + method: "left", + start: -3.1, + end: 3.5, + n: 10, + plot-x-tick-step: 1, +) +``` + +=== Midpoint Riemann sum + +```example +riesketcher( + x => -calc.pow(x, 2) + 9, + method: "mid", + domain: (-4, 4), + start: -3, + end: 3, + n: 6, + plot-x-tick-step: 1, +) +``` + +=== Right-method Riemann sum + +```example +riesketcher( + x => 16 - x * x, + method: "right", + end: 6, + n: 6, + domain: (-1, auto), + plot-x-tick-step: 1, +) +``` + +=== Custom untagged partition (midpoint method) + +```example +riesketcher( + x => 0.17 * calc.pow(x, 3) + + 1.5 * calc.sin(calc.cos(x)), + method: "mid", + partition: (-3, -1.5, -0.75, -0.2, 0.8, 1.5, + 2.3, 3.4), + plot-x-tick-step: 2, +) +``` + +=== Tagged partition + +```example +riesketcher( + x => 0.5 * calc.pow(x, 3) + - 0.9 * calc.cos(x), + partition: (-3.2, -2.1, -1.1, 0.4, 0.9, 1.7, + 2.4, 3.5), + tags: (-2.5, -1.9, -0.35, 0.63, 1.38, 2.06, 3.14), + plot-x-tick-step: 2, +) +``` + +#pagebreak() + +=== Trapezoidal Rule (uniform grid) + +```example +trapezoidal( + x => calc.pow(x, 3) + 4, + start: -3, + end: 3.5, + n: 7, + plot-x-tick-step: 1, + positive-color: rgb("#210aa4") +) +``` + +=== Trapezoidal Rule (non-uniform grid) + +```example +trapezoidal( + x => -calc.pow(x, 3) - 4, + partition: (-3, -0.4, 2, 3.1, 3.5), + plot-x-tick-step: 1, + positive-color: rgb("#210aa4") +) +``` + +#pagebreak() +#set align(left) + +== Method parameters + +#let riesketcher-tidy = tidy.parse-module(read("riesketcher.typ"), name: "riesketcher") +#tidy.show-module(riesketcher-tidy) + +#pagebreak() + +#let trapezoidal-tidy = tidy.parse-module(read("trapezoidal.typ"), name: "trapezoidal") +#tidy.show-module(trapezoidal-tidy) diff --git a/packages/preview/riesketcher/0.4.0/riesketcher.typ b/packages/preview/riesketcher/0.4.0/riesketcher.typ new file mode 100644 index 0000000000..f71eaff127 --- /dev/null +++ b/packages/preview/riesketcher/0.4.0/riesketcher.typ @@ -0,0 +1,160 @@ +#import "@preview/cetz-plot:0.1.2" +#import "util.typ": _validate-partition, _validate-tagged-partition + +/// Draw a Riemann sum of a function, and optionally plot the function. +/// +/// - fn (function): The function to draw a Riemann sum of. +/// - domain (array): Tuple of the domain of `fn`. If a tuple value is `auto`, that +/// value is set to `start`/`end`. +/// - start (number): The starting point for the bars. Used only if `partition` +/// is not a valid array; otherwise, the first value of `partition` is used. +/// - end (number): The ending point for the bars. Used only if `partition` is +/// not a valid array; otherwise, the last value of `partition` is used. +/// - n (number): Number of bars. Used only if `partition` is not a valid array; +/// otherwise, the number of bars is determined by the length of `partition`. +/// - method (string): Determines where the sample points for bar heights are +/// taken (`left`, `mid`/`midpoint`, or `right`). Used only if `tags` is not a +/// valid array; otherwise, bar heights are taken from `tags`. +/// - partition (array, none): (optional) Array of partition points. If valid, it +/// overrides `start`, `end`, and `n`; otherwise, equal partitions are +/// generated from `start`, `end`, and `n`. +/// - tags (array, none): (optional) Array of sample points for bar heights. If +/// valid, it overrides `method`; otherwise, sample points are determined by +/// `method`. +/// - transparency (number): Transparency fill of bars. +/// - dot-radius (number): Radius of dots. +/// - plot (boolean): Whether to add plot of the function. +/// - plot-grid (boolean): Show grid on plot. +/// - plot-x-tick-step (number): X tick step of plot. +/// - plot-y-tick-step (number): Y tick step of plot. +/// - positive-color (color): Color of positive bars. +/// - negative-color (color): Color of negative bars. +/// - plot-line-color (color): Color of plotted line. +/// - size (tuple): The width and height of the plot area, given as a tuple +/// `(width, height)`. Controls the overall size of the rendered Riemann sum +/// and function plot. +#let riesketcher( + fn, + start: 0, + end: 10, + domain: (auto, auto), + n: 10, + partition: none, + tags: none, + method: "left", + transparency: 40%, + dot-radius: 0.15, + plot: true, + plot-grid: false, + plot-x-tick-step: auto, + plot-y-tick-step: auto, + positive-color: color.green, + negative-color: color.red, + plot-line-color: color.blue, + size: (5, 5), +) = { + let delta-x = 0 // store fallback bar width if partition is invalid + + // check if partition is valid + let is-valid-partition = _validate-partition(partition) + if is-valid-partition { + start = partition.at(0) + end = partition.at(-1) + n = partition.len() - 1 + } else { + delta-x = (end - start) / n + partition = range(0, n + 1).map(k => start + delta-x * k) + } + + // Adjust the function domain if set to auto + if domain.at(0) == auto { domain.at(0) = start } + if domain.at(1) == auto { domain.at(1) = end } + + // calculate bar widths + let bar-widths = if is-valid-partition { + range(0, partition.len() - 1).map(k => partition.at(k + 1) - partition.at(k)) + } else { + range(0, n).map(x => delta-x) + } + + // check if tags are valid + let is-valid-tags = _validate-tagged-partition(partition, tags) + + // calculate bar heights + let bar-y = none + if is-valid-tags { + bar-y = tags.zip(tags.map(fn)) + } else { + let horizontal-hand-offset = 0% + if method == "right" { + horizontal-hand-offset = 100% + } + else if method == "mid" or method == "midpoint" { + horizontal-hand-offset = 50% + } + bar-y = range(0, n).map(k => { + let x = partition.at(k) + bar-widths.at(k) * horizontal-hand-offset / 100% + (x, fn(x)) + }) + } + + let col-trans(color, opacity) = { + let space = color.space() + space(..color.components(alpha: false), opacity) + } + + let positive-bar-style = ( + fill: col-trans(positive-color.lighten(70%).darken(8%), transparency), + stroke: col-trans(positive-color.darken(30%), 90%) + 1.1pt + ) + let negative-bar-style = ( + : ..positive-bar-style, + fill: col-trans(negative-color.lighten(70%).darken(8%), transparency), + stroke: col-trans(negative-color.darken(30%), 90%) + 1.1pt + ) + let positive-dot-style = ( + stroke: black, + fill: positive-color + ) + let negative-dot-style = ( + : ..positive-dot-style, + fill: negative-color, + ) + + cetz-plot.plot.plot( + size: size, + x-grid: plot-grid, + y-grid: plot-grid, + x-label: $x$, + y-label: $y$, + axis-style: if plot { "school-book" } else { none }, + x-tick-step: plot-x-tick-step, + y-tick-step: plot-y-tick-step, + { + for k in range(0, n) { + let x = partition.at(k) + let y = bar-y.at(k).at(1) + cetz-plot.plot.add-bar(((x, y),), + bar-width: bar-widths.at(k), + bar-position: "start", + style: if y >= 0 { positive-bar-style } else { negative-bar-style }) + } + + if plot { + cetz-plot.plot.add( + domain: domain, + x => fn(x), + style: (stroke: plot-line-color + 1.5pt)) + } + + for k in range(0, n) { + let (x, y) = bar-y.at(k) + cetz-plot.plot.add(((x, y),), + mark: "o", + style: (stroke: none), + mark-size: dot-radius, + mark-style: if y >= 0 { positive-dot-style } else { negative-dot-style }) + } + } + ) +} diff --git a/packages/preview/riesketcher/0.4.0/trapezoidal.typ b/packages/preview/riesketcher/0.4.0/trapezoidal.typ new file mode 100644 index 0000000000..88dbf56aec --- /dev/null +++ b/packages/preview/riesketcher/0.4.0/trapezoidal.typ @@ -0,0 +1,142 @@ +#import "@preview/cetz-plot:0.1.2" +#import "util.typ": _validate-partition + +/// Illustrate the chained trapezoidal rule of a function, and optionally plot the +/// function. +/// +/// - fn (function): The function to illustrate the chained trapezoidal rule of. +/// - domain (array): Tuple of the domain of `fn`. If a tuple value is `auto`, that +/// value is set to `start`/`end`. +/// - start (number): The starting point for the trapezoids. Used only if +/// `partition` is not a valid array; otherwise, the first value of `partition` +/// is used. +/// - end (number): The ending point for the trapezoids. Used only if `partition` +/// is not a valid array; otherwise, the last value of `partition` is used. +/// - n (number): Number of trapezoids. Used only if `partition` is not a valid +/// array; otherwise, the number of trapezoids is determined by the length of +/// `partition`. +/// - partition (array, none): (optional) Array of partition points. If valid, it +/// overrides `start`, `end`, and `n`; otherwise, equal partitions are generated +/// from `start`, `end`, and `n`. +/// - transparency (number): Transparency fill of trapezoids. +/// - dot-radius (number): Radius of dots. +/// - plot (boolean): Whether to add plot of the function. +/// - plot-grid (boolean): Show grid on plot. +/// - plot-x-tick-step (number): X tick step of plot. +/// - plot-y-tick-step (number): Y tick step of plot. +/// - positive-color (color): Color of positive trapezoids. +/// - negative-color (color): Color of negative trapezoids. +/// - plot-line-color (color): Color of plotted line. +/// - size (tuple): The width and height of the plot area, given as a tuple +/// `(width, height)`. Controls the overall size of the rendered Riemann sum +/// and function plot. +#let trapezoidal( + fn, + start: 0, + end: 10, + domain: (auto, auto), + n: 10, + partition: none, + transparency: 40%, + dot-radius: 0.15, + plot: true, + plot-grid: false, + plot-x-tick-step: auto, + plot-y-tick-step: auto, + positive-color: color.green, + negative-color: color.red, + plot-line-color: color.blue, + size: (5, 5), +) = { + // check if partition is valid + let is-valid-partition = _validate-partition(partition) + if is-valid-partition { + start = partition.at(0) + end = partition.at(-1) + n = partition.len() - 1 + } else { + let delta-x = (end - start) / n + partition = range(0, n + 1).map(k => start + delta-x * k) + } + + // Adjust the function domain if set to auto + if domain.at(0) == auto { domain.at(0) = start } + if domain.at(1) == auto { domain.at(1) = end } + + // calculate data points + let data-points = partition.zip(partition.map(fn)) + + let col-trans(color, opacity) = { + let space = color.space() + space(..color.components(alpha: false), opacity) + } + + let positive-trapezoid-style = ( + fill: col-trans(positive-color.lighten(30%), transparency), + stroke: col-trans(positive-color.darken(30%), 90%) + 1.1pt + ) + let negative-trapezoid-style = ( + : ..positive-trapezoid-style, + fill: col-trans(negative-color.lighten(30%), transparency), + stroke: col-trans(negative-color.darken(30%), 90%) + 1.1pt + ) + let positive-dot-style = ( + stroke: black, + fill: positive-color + ) + let negative-dot-style = ( + : ..positive-dot-style, + fill: negative-color, + ) + + cetz-plot.plot.plot( + size: size, + x-grid: plot-grid, + y-grid: plot-grid, + x-label: $x$, + y-label: $y$, + axis-style: if plot { "school-book" } else { none }, + x-tick-step: plot-x-tick-step, + y-tick-step: plot-y-tick-step, + { + // plot curve + if plot { + cetz-plot.plot.add( + domain: domain, + x => fn(x), + style: (stroke: (paint: plot-line-color, thickness: 1.5pt, dash: "dashed")) + ) + } + + // then plot trapezoids + for k in range(n) { + let (x0, y0) = data-points.at(k) + let (x1, y1) = data-points.at(k + 1) + let subdata = ((x0, y0), (x1, y1)) + if (y0 >= 0 and y1 < 0) or (y0 < 0 and y1 >= 0) { + let x-intersect = x0 + (x1 - x0) * (0 - y0) / (y1 - y0) + subdata.insert(1, (x-intersect, 0)) + } + for p in range(subdata.len() - 1) { + let (xl, yl) = subdata.at(p) + let (xr, yr) = subdata.at(p + 1) + cetz-plot.plot.add(((xl, 0), (xl, yl), (xr, yr), (xr, 0)), + style: if yl > 0 or yr > 0 { positive-trapezoid-style } else { negative-trapezoid-style }, + fill: true + ) + } + } + + // plot dots + for point in data-points { + let (x, y) = point + cetz-plot.plot.add((point,), + mark: "o", + style: (stroke: none), + mark-size: dot-radius, + mark-style: if y >= 0 { positive-dot-style } else { negative-dot-style } + ) + } + } + ) +} diff --git a/packages/preview/riesketcher/0.4.0/typst.toml b/packages/preview/riesketcher/0.4.0/typst.toml new file mode 100644 index 0000000000..36c8d4abbb --- /dev/null +++ b/packages/preview/riesketcher/0.4.0/typst.toml @@ -0,0 +1,10 @@ +[package] +name = "riesketcher" +version = "0.4.0" +entrypoint = "lib.typ" +authors = ["Kainoa Kanter"] +license = "MIT" +description = "A package to draw Riemann sums (and their plots) of a function with CeTZ." +repository = "https://github.com/ThatOneCalculator/riesketcher" +exclude = ["manual.typ", "manual.pdf"] +keywords = ["riemann", "integral", "graph", "calculus", "cetz"] diff --git a/packages/preview/riesketcher/0.4.0/util.typ b/packages/preview/riesketcher/0.4.0/util.typ new file mode 100644 index 0000000000..f81e5b7e6d --- /dev/null +++ b/packages/preview/riesketcher/0.4.0/util.typ @@ -0,0 +1,32 @@ +// check if array has duplicates +#let _check-dup(arr) = { + for i in range(0, arr.len() - 1) { + if arr.at(i) == arr.at(i + 1) { + return true + } + } + return false +} + +#let _is-num(x) = type(x) == int or type(x) == float + +// check if partition is valid +#let _validate-partition(partition) = { + if partition != none and partition.len() > 1 and partition.all(_is-num) { + let sorted-partition = partition.sorted() + return partition == sorted-partition and not _check-dup(partition) + } + return false +} + +// check if a tagged partition is valid +#let _validate-tagged-partition(partition, tags) = { + if _validate-partition(partition) and tags != none and tags.len() > 0 and partition.len() == tags.len() + 1 and tags.all(_is-num) { + let sorted-tags = tags.sorted() + if tags == sorted-tags and not _check-dup(tags) { + let zipped = (partition.zip(tags), partition.at(-1)).flatten() + return zipped == zipped.sorted() + } + } + return false +}