From f7095f5432c01c7c3cd1c4b2db128711b7055f20 Mon Sep 17 00:00:00 2001 From: Peter Occil Date: Sat, 7 Dec 2024 11:29:40 -0500 Subject: [PATCH] Updating GitHub Pages --- CBOR/docs/PeterO.Numbers.EInteger.html | 2 +- CBOR/index.html | 2 +- Encoding/index.html | 2 +- MailLib/docs/PeterO.Mail.NamedAddress.html | 2 +- MailLib/index.html | 2 +- .../api/com.upokecenter.numbers.EInteger.html | 4 +- Numbers/docs/PeterO.Numbers.EInteger.html | 6 +- bernapprox.html | 10 +- bernapprox.md | 8 +- bernoulli.html | 16 +- bernoulli.md | 14 +- bernoulli.py | 2 +- bernoulli.zip | Bin 96676 -> 96679 bytes bernreq.html | 8 +- bernreq.md | 6 +- bernsupp.html | 8 +- bernsupp.md | 6 +- colorgen.html | 12 +- colorgen.md | 10 +- colorutil.zip | Bin 58483 -> 58488 bytes exporand.html | 8 +- exporand.md | 6 +- graphics.md | 8 +- html3dutil/BSplineCurve.html | 4 +- html3dutil/BSplineSurface.html | 2 +- html3dutil/Global.html | 2 +- html3dutil/H3DU.BSplineCurve.html | 4 +- html3dutil/H3DU.Batch3D.html | 8 +- html3dutil/H3DU.LightSource.html | 2 +- html3dutil/H3DU.Material.html | 2 +- html3dutil/H3DU.Math.html | 264 +- html3dutil/H3DU.MathUtil.html | 264 +- html3dutil/H3DU.MatrixStack.html | 2 +- html3dutil/H3DU.MeshBuffer.html | 6 +- html3dutil/H3DU.PbrMaterial.html | 2 +- html3dutil/H3DU.RenderPass.html | 2 +- html3dutil/H3DU.RenderPass3D.html | 2 +- html3dutil/H3DU.Scene3D.html | 4 +- html3dutil/H3DU.Semantic.html | 4 +- html3dutil/H3DU.ShapeGroup.html | 2 +- html3dutil/H3DU.Surface.html | 2 +- html3dutil/H3DU.TextureInfo.html | 2 +- html3dutil/H3DU.Transform.html | 4 +- html3dutil/H3DU.exports.MatrixStack.html | 2 +- html3dutil/MathUtil.html | 318 +- html3dutil/MatrixStack.html | 2 +- html3dutil/MeshBuffer.html | 4 +- html3dutil/Semantic.html | 4 +- html3dutil/ShapeGroup.html | 2 +- html3dutil/Surface.html | 2 +- html3dutil/Transform.html | 4 +- html3dutil/demos/rasterizer.js | 4 +- html3dutil/extras/colormatrixshader.js | 6 +- html3dutil/extras/gradients.js | 8 +- html3dutil/extras/kernelmatrixshader.js | 8 +- html3dutil/extras/matrixstack.js | 2 +- html3dutil/extras/text.js | 4 +- html3dutil/extras_colormatrixshader.html | 8 +- html3dutil/extras_gradients.html | 14 +- html3dutil/extras_kernelmatrixshader.html | 10 +- .../extras_matrixstack.MatrixStack.html | 2 +- html3dutil/index.html | 2 +- html3dutil/tutorial-camera.html | 14 +- html3dutil/tutorial-filters.html | 4 +- html3dutil/tutorial-glmath.html | 12 +- html3dutil/tutorial-matrixdetails.html | 52 +- html3dutil/tutorial-overview.html | 2 +- html3dutil/tutorial-surfaces.html | 2 +- jump.md | 2 +- logconcave.py | 3 +- randextract.html | 4 +- randextract.md | 2 +- randmisc.html | 12 +- randmisc.md | 10 +- randomcommon.html | 4 +- randomcommon.md | 2 +- randomfunc.html | 12 +- randomfunc.md | 10 +- randomgen.zip | Bin 198680 -> 249717 bytes randomgendoc.md | 4770 +++++++++++++++-- randomnotes.html | 6 +- randomnotes.md | 4 +- requestsother.html | 4 +- requestsother.md | 2 +- sampling.html | 4 +- sampling.md | 2 +- sitemap.xml | 162 +- suppcolor.html | 6 +- suppcolor.md | 4 +- usage.md | 2 +- 90 files changed, 5135 insertions(+), 1110 deletions(-) diff --git a/CBOR/docs/PeterO.Numbers.EInteger.html b/CBOR/docs/PeterO.Numbers.EInteger.html index 03037f4f8..abfaa05b4 100755 --- a/CBOR/docs/PeterO.Numbers.EInteger.html +++ b/CBOR/docs/PeterO.Numbers.EInteger.html @@ -1331,7 +1331,7 @@

shiftLeft

int numberBits); -

Returns a big integer with the bits shifted to the left by a number of bits. A value of 1 doubles this value, a value of 2 multiplies it by 4, a value of 3 by 8, a value of 4 by 16, and so on.

+

Returns a big integer with the bits shifted to the left by a number of bits. A value of 1 doubles this value, a value of 2 multiplies it by 4, a value of 3 × by, a value of 4 × by, and so on.

Parameters:

diff --git a/CBOR/index.html b/CBOR/index.html index 1bd8701db..77b5886db 100755 --- a/CBOR/index.html +++ b/CBOR/index.html @@ -136,7 +136,7 @@

Examples

using (var stream = new MemoryStream(byteArray)) { // Read the CBOR object from the stream var cbor = CBORObject.Read(stream); - // The rest of the example follows the one given above. + // The rest of the example follows the one given earlier. }

diff --git a/Encoding/index.html b/Encoding/index.html index 35971e3f9..c59720bf3 100755 --- a/Encoding/index.html +++ b/Encoding/index.html @@ -36,7 +36,7 @@

How to Install

In other Java-based environments, the library can be referred to by its -group ID (com.github.peteroupc), artifact ID (encoding), and version, as given above.

+group ID (com.github.peteroupc), artifact ID (encoding), and version, as given earlier.

Documentation

diff --git a/MailLib/docs/PeterO.Mail.NamedAddress.html b/MailLib/docs/PeterO.Mail.NamedAddress.html index 3f98ef8cb..af7fe6efe 100755 --- a/MailLib/docs/PeterO.Mail.NamedAddress.html +++ b/MailLib/docs/PeterO.Mail.NamedAddress.html @@ -60,7 +60,7 @@

Member Summary

Parameters:

.

diff --git a/MailLib/index.html b/MailLib/index.html index 45c4b6464..a0c60612f 100755 --- a/MailLib/index.html +++ b/MailLib/index.html @@ -42,7 +42,7 @@

How to Install

In other Java-based environments, the library can be referred to by its -group ID (com.upokecenter), artifact ID (maillib), and version, as given above.

+group ID (com.upokecenter), artifact ID (maillib), and version, as given earlier.

Source Code

Source code is available in the project page.

diff --git a/Numbers/api/com.upokecenter.numbers.EInteger.html b/Numbers/api/com.upokecenter.numbers.EInteger.html index cc262117c..57562366f 100755 --- a/Numbers/api/com.upokecenter.numbers.EInteger.html +++ b/Numbers/api/com.upokecenter.numbers.EInteger.html @@ -2543,7 +2543,7 @@

ShiftRight

ShiftLeft

-
public EInteger ShiftLeft(EInteger eshift) Returns an arbitrary-precision integer with the bits shifted to the left by  a number of bits given as an arbitrary-precision integer. A value of 1  doubles this value, a value of 2 multiplies it by 4, a value of 3 by 8, a  value of 4 by 16, and so on.
+
public EInteger ShiftLeft(EInteger eshift) Returns an arbitrary-precision integer with the bits shifted to the left by  a number of bits given as an arbitrary-precision integer. A value of 1  doubles this value, a value of 2 multiplies it by 4, a value of 3 × by, a  value of 4 × by, and so on.
 

Parameters:

@@ -2566,7 +2566,7 @@

ShiftLeft

ShiftLeft

-
public EInteger ShiftLeft(int numberBits) Returns an arbitrary-precision integer with the bits shifted to the left by  a number of bits. A value of 1 doubles this value, a value of 2 multiplies  it by 4, a value of 3 by 8, a value of 4 by 16, and so on.
+
public EInteger ShiftLeft(int numberBits) Returns an arbitrary-precision integer with the bits shifted to the left by  a number of bits. A value of 1 doubles this value, a value of 2 multiplies  it by 4, a value of 3 × by, a value of 4 × by, and so on.
 

Parameters:

diff --git a/Numbers/docs/PeterO.Numbers.EInteger.html b/Numbers/docs/PeterO.Numbers.EInteger.html index 651b213cc..1e1b5584b 100755 --- a/Numbers/docs/PeterO.Numbers.EInteger.html +++ b/Numbers/docs/PeterO.Numbers.EInteger.html @@ -3312,7 +3312,7 @@

Member Summary

int bitCount);
-

Returns an arbitrary-precision integer with the bits shifted to the left by a number of bits. A value of 1 doubles this value, a value of 2 multiplies it by 4, a value of 3 by 8, a value of 4 by 16, and so on.

+

Returns an arbitrary-precision integer with the bits shifted to the left by a number of bits. A value of 1 doubles this value, a value of 2 multiplies it by 4, a value of 3 × by, a value of 4 × by, and so on.

Parameters:

@@ -3978,7 +3978,7 @@

Member Summary

int numberBits);
-

Returns an arbitrary-precision integer with the bits shifted to the left by a number of bits. A value of 1 doubles this value, a value of 2 multiplies it by 4, a value of 3 by 8, a value of 4 by 16, and so on.

+

Returns an arbitrary-precision integer with the bits shifted to the left by a number of bits. A value of 1 doubles this value, a value of 2 multiplies it by 4, a value of 3 × by, a value of 4 × by, and so on.

Parameters:

@@ -3997,7 +3997,7 @@

Member Summary

PeterO.Numbers.EInteger eshift); -

Returns an arbitrary-precision integer with the bits shifted to the left by a number of bits given as an arbitrary-precision integer. A value of 1 doubles this value, a value of 2 multiplies it by 4, a value of 3 by 8, a value of 4 by 16, and so on.

+

Returns an arbitrary-precision integer with the bits shifted to the left by a number of bits given as an arbitrary-precision integer. A value of 1 doubles this value, a value of 2 multiplies it by 4, a value of 3 × by, a value of 4 × by, and so on.

Parameters:

diff --git a/bernapprox.html b/bernapprox.html index 4e3908703..1856e3276 100755 --- a/bernapprox.html +++ b/bernapprox.html @@ -1,4 +1,4 @@ - +
@@ -157,7 +157,7 @@

Approximations on the Closed
  • each of the polynomial’s Bernstein coefficients is not less than 0 or greater than 1 (assuming none of $f$’s values is less than 0 or greater than 1).
  • -

    For some of the polynomials given above, a degree $n$ can be found so that the degree-$n$ polynomial is within $\epsilon$ of $f$, if $f$ is continuous and meets other conditions. In general, to find the degree $n$, solve the error bound’s equation for $n$ and round the solution up to the nearest integer. See the table below, where:

    +

    For some of the polynomials given earlier, a degree $n$ can be found so that the degree-$n$ polynomial is within $\epsilon$ of $f$, if $f$ is continuous and meets other conditions. In general, to find the degree $n$, solve the error bound’s equation for $n$ and round the solution up to the nearest integer. See the table below, where:

    • $M_r$ is not less than the maximum of the absolute value of $f$’s $r$-th derivative.
    • @@ -329,7 +329,7 @@

      Taylor Polynomials for “Smoot
    • $f(0)$ is known as well as $f^{(1)}(0), …, f^{(n)}(0)$.
    • -

      Then the $n$-th Taylor polynomial centered at 0, given below, is within $\epsilon$ of $f$:

      +

      Then the $n$-th Taylor polynomial centered at 0, given later, is within $\epsilon$ of $f$:

      \[P(\lambda) = a_0 \lambda^0 + a_1 \lambda^1 + ... + a_n \lambda^n,\] @@ -879,8 +879,8 @@

      Chebyshev Interpolants


        -
      1. Compute the required degree $n$ as given above, with error tolerance $\epsilon/2$.
      2. -
      3. Compute the values $c_k$ as given above, which relate to $f$’s Chebyshev interpolant of degree $n$. There will be $n$ plus one of these values, labeled $c_0, …, c_n$.
      4. +
      5. Compute the required degree $n$ as given earlier, with error tolerance $\epsilon/2$.
      6. +
      7. Compute the values $c_k$ as given earlier, which relate to $f$’s Chebyshev interpolant of degree $n$. There will be $n$ plus one of these values, labeled $c_0, …, c_n$.
      8. Compute the (n+1)×(n+1) matrix $M$ described in Theorem 1 of Rababah (2003)51.
      9. Multiply the matrix by the transposed vector of values $(c_0, …, c_n)$ to get the polynomial’s Bernstein coefficients $b_0, …, b_n$. (Transposing means turning columns to rows and vice versa.)
      10. (Rounding.) For each $i$, replace the Bernstein coefficient $b_i$ with $\text{floor}(b_i / (\epsilon/2) + 1/2) \cdot (\epsilon/2)$.
      11. diff --git a/bernapprox.md b/bernapprox.md index 5218502f1..30a55f676 100755 --- a/bernapprox.md +++ b/bernapprox.md @@ -93,7 +93,7 @@ The goal is now to find a polynomial of degree $n$, written in Bernstein form, s 1. the polynomial is within $\epsilon$ of $f(\lambda)$, and 2. each of the polynomial's Bernstein coefficients is not less than 0 or greater than 1 (assuming none of $f$'s values is less than 0 or greater than 1). -For some of the polynomials given above, a degree $n$ can be found so that the degree-$n$ polynomial is within $\epsilon$ of $f$, if $f$ is continuous and meets other conditions. In general, to find the degree $n$, solve the error bound's equation for $n$ and round the solution up to the nearest integer. See the table below, where: +For some of the polynomials given earlier, a degree $n$ can be found so that the degree-$n$ polynomial is within $\epsilon$ of $f$, if $f$ is continuous and meets other conditions. In general, to find the degree $n$, solve the error bound's equation for $n$ and round the solution up to the nearest integer. See the table below, where: - $M_r$ is not less than the maximum of the absolute value of $f$'s $r$-th derivative. - $H_r$ is not less than $f$'s $r$-th derivative's Hölder constant (for the given Hölder exponent _α_). @@ -160,7 +160,7 @@ Let $n\ge 0$ be an integer, and let $f^{(i)}$ be the $i$-th derivative of $f(\la 4. $f$'s $(n+1)$-th derivative is continuous and satisfies $\epsilon\ge M_{n+1}/((n+1)!)$, and 5. $f(0)$ is known as well as $f^{(1)}(0), ..., f^{(n)}(0)$. -Then the $n$-th _Taylor polynomial_ centered at 0, given below, is within $\epsilon$ of $f$: +Then the $n$-th _Taylor polynomial_ centered at 0, given later, is within $\epsilon$ of $f$: $$P(\lambda) = a_0 \lambda^0 + a_1 \lambda^1 + ... + a_n \lambda^n,$$ @@ -689,8 +689,8 @@ The following is a method that employs _Chebyshev interpolants_ to compute the B ------------- -1. Compute the required degree $n$ as given above, with error tolerance $\epsilon/2$. -2. Compute the values $c_k$ as given above, which relate to $f$'s Chebyshev interpolant of degree $n$. There will be $n$ plus one of these values, labeled $c_0, ..., c_n$. +1. Compute the required degree $n$ as given earlier, with error tolerance $\epsilon/2$. +2. Compute the values $c_k$ as given earlier, which relate to $f$'s Chebyshev interpolant of degree $n$. There will be $n$ plus one of these values, labeled $c_0, ..., c_n$. 3. Compute the (_n_+1)×(_n_+1) matrix $M$ described in Theorem 1 of Rababah (2003)[^51]. 4. Multiply the matrix by the transposed vector of values $(c_0, ..., c_n)$ to get the polynomial's Bernstein coefficients $b_0, ..., b_n$. (Transposing means turning columns to rows and vice versa.) 5. (Rounding.) For each $i$, replace the Bernstein coefficient $b_i$ with $\text{floor}(b_i / (\epsilon/2) + 1/2) \cdot (\epsilon/2)$. diff --git a/bernoulli.html b/bernoulli.html index ea63985fb..7dd32f9fa 100755 --- a/bernoulli.html +++ b/bernoulli.html @@ -1,4 +1,4 @@ - +
        @@ -420,7 +420,7 @@

        Certain Polynomials

        But a polynomial admits a Bernoulli factory only if it can be written to have Bernstein coefficients that are each 0 or greater and less than 1, and a function admits a Bernoulli factory with a fixed number of coin flips only if it’s a polynomial of that kind (Goyal and Sigman 20127; Qian et al. 20118; see also Wästlund 1999, section 49).

        -

        Goyal and Sigman give an algorithm for simulating these polynomials, which is given below.

        +

        Goyal and Sigman give an algorithm for simulating these polynomials, which is given later.

        1. Flip the input coin n times, and let j be the number of times the coin returned 1 this way.10
        2. @@ -673,7 +673,7 @@

          Certain Power Series

          \[C(\lambda) = \sum_{i\ge m} a_i (g(\lambda))^i, A(\lambda) = f(\lambda) - C(\lambda).\] -

          As an example, if $C$ is a generalized power series described in the section “Certain Alternating Series”, above, then $C$ admits a Bernoulli factory algorithm, namely the general martingale algorithm.

          +

          As an example, if $C$ is a generalized power series described in the section “Certain Alternating Series”, earlier, then $C$ admits a Bernoulli factory algorithm, namely the general martingale algorithm.

    @@ -1338,7 +1338,7 @@

    Certain Converging Series

  • Generate 1 or 0 with equal probability. If 1 was generated this way, go to step 2. Otherwise, return a number that is 0 if s is 0; otherwise, 1 if s is 2; otherwise, either 1 or 0 with equal probability.
  • -

    If a, given above, sums to the base-2 logarithm of the probability rather than that probability, the following algorithm I developed returns 1 with that probability. For simplicity’s sake, even though logarithms for such probabilities are negative, all the a[i] must be 0 or greater (and thus are the negated values of the already negative logarithm approximations) and must form a nowhere decreasing sequence, and all the err[i] must be 0 or greater.

    +

    If a, given earlier, sums to the base-2 logarithm of the probability rather than that probability, the following algorithm I developed returns 1 with that probability. For simplicity’s sake, even though logarithms for such probabilities are negative, all the a[i] must be 0 or greater (and thus are the negated values of the already negative logarithm approximations) and must form a nowhere decreasing sequence, and all the err[i] must be 0 or greater.

    1. Set intinf to floor(max(0, abs(a[0]))). (This is the absolute integer part of the first term in the series, or 0, whichever is greater.)
    2. @@ -2288,7 +2288,7 @@

      1/(1+(m+λ)2)

      1. Let d be the three-item list [1, 2, 1] (for numerator 1). Let e be the three-item list [1+m2, 2*(1+m2+m), 1+m2+2*m+1] (for denominator). Find the highest number in e, then divide each item in d and in e by that number (using rational arithmetic).
      2. -
      3. Run the first algorithm for rational functions in “Bernoulli Factory Algorithms”, with n = 2, and with d and e given above.
      4. +
      5. Run the first algorithm for rational functions in “Bernoulli Factory Algorithms”, with n = 2, and with d and e given earlier.

      @@ -3340,7 +3340,7 @@

      exp(1) − 2

      -

      (Flajolet et al., 2010)1. It can be seen as a triple integral of the function 1/(1 + a * b * c), where a, b, and c are uniform random variates between 0 and 1. This algorithm is given below, but using the two-coin algorithm instead of the even-parity construction32. Here, ζ(x) is the Riemann zeta function.

      +

      (Flajolet et al., 2010)1. It can be seen as a triple integral of the function 1/(1 + a * b * c), where a, b, and c are uniform random variates between 0 and 1. This algorithm is given later, but using the two-coin algorithm instead of the even-parity construction32. Here, ζ(x) is the Riemann zeta function.

      1. Generate three uniform random variates between 0 and 1.
      2. @@ -3712,7 +3712,7 @@

        Algorithm for sin(λ*π/2)

        \(f(\lambda) = \sin(\lambda \pi/2) = 1-g(1-\lambda),\) where—

        -

        \(g(\mu) = 1-\sin((1-\mu) \pi/2)\) \(= \sum_{n\ge 0} \frac{(\mu\pi/2)^{4n+2}}{(4n+2)!} - \frac{(\mu\pi/2)^{4n+4}}{(4n+4)!}\) \(= \sum_{n\ge 0} w_n(\mu) = \sum_{n\ge 0} w_n(1) \frac{w_n(\mu)}{w_n(1)}.\) This is a convex combination of $w_n(1)$ and $\frac{w_n(\mu)}{w_n(1)}$ — to simulate $g(\mu)$, first an integer n is chosen with probability $w_n(1)$ and then a coin that shows heads with probability $\frac{w_n(\mu)}{w_n(1)}$ is flipped. Finally, to simulate $f(\lambda)$, the input coin is “inverted” ($\mu = 1-\lambda$), $g(\mu)$ is simulated using the “inverted” coin, and 1 minus the simulation result is returned.

        As given above, each term $w_n(\mu)$ is a polynomial in $\mu$, and is strictly increasing and equals 1 or less everywhere on the closed unit interval, and $w_n(1)$ is a constant so that $\frac{w_n(\mu)}{w_n(1)}$ remains a polynomial. Each polynomial $\frac{w_n(\mu)}{w_n(1)}$ can be transformed into a polynomial that has the following Bernstein coefficients: \((0, 0, ..., 0, 8/(v-\pi^2), 8(4n+3)/(v-\pi^2), 1),\) +

        \(g(\mu) = 1-\sin((1-\mu) \pi/2)\) \(= \sum_{n\ge 0} \frac{(\mu\pi/2)^{4n+2}}{(4n+2)!} - \frac{(\mu\pi/2)^{4n+4}}{(4n+4)!}\) \(= \sum_{n\ge 0} w_n(\mu) = \sum_{n\ge 0} w_n(1) \frac{w_n(\mu)}{w_n(1)}.\) This is a convex combination of $w_n(1)$ and $\frac{w_n(\mu)}{w_n(1)}$ — to simulate $g(\mu)$, first an integer n is chosen with probability $w_n(1)$ and then a coin that shows heads with probability $\frac{w_n(\mu)}{w_n(1)}$ is flipped. Finally, to simulate $f(\lambda)$, the input coin is “inverted” ($\mu = 1-\lambda$), $g(\mu)$ is simulated using the “inverted” coin, and 1 minus the simulation result is returned.

        As given earlier, each term $w_n(\mu)$ is a polynomial in $\mu$, and is strictly increasing and equals 1 or less everywhere on the closed unit interval, and $w_n(1)$ is a constant so that $\frac{w_n(\mu)}{w_n(1)}$ remains a polynomial. Each polynomial $\frac{w_n(\mu)}{w_n(1)}$ can be transformed into a polynomial that has the following Bernstein coefficients: \((0, 0, ..., 0, 8/(v-\pi^2), 8(4n+3)/(v-\pi^2), 1),\) where the polynomial is of degree $4n+4$ and so has $4n+5$ Bernstein coefficients, and $v = \frac{((4n+4)!)\times 2^{4n+4}}{((4n+2)!)\times 2^{4n+2}} = 16 (n+1) (4n+3)$. These are the Bernstein coefficients used in steps 4 through 7 of the algorithm above. > > 2. sin(λ*π/2) = cos((1−λ)*π/2). @@ -3925,7 +3925,7 @@

        Preparing Rational Functions

        • is 0 or greater for every λ 0 or greater, but not greater than 1,
        • has degree n or less, and
        • -
        • is written in form 1 as given above.
        • +
        • is written in form 1 as given earlier.

        Then the polynomial can be turned into a homogeneous polynomial of degree n (all its terms have degree n) as follows. (Homogeneous polynomials are also known as polynomials in scaled Bernstein form (Farouki and Rajan 1988)18.)

        diff --git a/bernoulli.md b/bernoulli.md index 3417b8328..2adecd8be 100755 --- a/bernoulli.md +++ b/bernoulli.md @@ -276,7 +276,7 @@ where _n_ is the polynomial's _degree_ and _a_[0], _a_[1], ..., _a_\[_n_\] are i But a polynomial admits a Bernoulli factory only if it can be written to have Bernstein coefficients that are each 0 or greater and less than 1, and a function admits a Bernoulli factory with a fixed number of coin flips only if it's a polynomial of that kind (Goyal and Sigman 2012[^7]; Qian et al. 2011[^8]; see also Wästlund 1999, section 4[^9]). -Goyal and Sigman give an algorithm for simulating these polynomials, which is given below. +Goyal and Sigman give an algorithm for simulating these polynomials, which is given later. 1. Flip the input coin _n_ times, and let _j_ be the number of times the coin returned 1 this way.[^10] 2. Return a number that is 1 with probability _a_\[_j_\], or 0 otherwise. @@ -459,7 +459,7 @@ Suppose the following for a generalized power series $f(\lambda)$: $$C(\lambda) = \sum_{i\ge m} a_i (g(\lambda))^i, A(\lambda) = f(\lambda) - C(\lambda).$$ - As an example, if $C$ is a generalized power series described in the section "Certain Alternating Series", above, then $C$ admits a Bernoulli factory algorithm, namely the **general martingale algorithm**. + As an example, if $C$ is a generalized power series described in the section "Certain Alternating Series", earlier, then $C$ admits a Bernoulli factory algorithm, namely the **general martingale algorithm**. In addition, the algorithm will be simpler if each power coefficient $a_i$ is a rational number. @@ -857,7 +857,7 @@ The algorithm follows. 8. Let _bound_ be _lam_+1/(2_k_). If _lamunq_+_ϵ_ ≤ _bound_, set _s_ to 0. Otherwise, if _lamunq_ > _bound_, set _s_ to 2. Otherwise, set _s_ to 1. 9. Generate 1 or 0 with equal probability. If 1 was generated this way, go to step 2. Otherwise, return a number that is 0 if _s_ is 0; otherwise, 1 if _s_ is 2; otherwise, either 1 or 0 with equal probability. -If _a_, given above, sums to the _base-2 logarithm_ of the probability rather than that probability, the following algorithm I developed returns 1 with that probability. For simplicity's sake, even though logarithms for such probabilities are negative, all the _a_\[_i_\] must be 0 or greater (and thus are the negated values of the already negative logarithm approximations) and must form a nowhere decreasing sequence, and all the _err_\[_i_\] must be 0 or greater. +If _a_, given earlier, sums to the _base-2 logarithm_ of the probability rather than that probability, the following algorithm I developed returns 1 with that probability. For simplicity's sake, even though logarithms for such probabilities are negative, all the _a_\[_i_\] must be 0 or greater (and thus are the negated values of the already negative logarithm approximations) and must form a nowhere decreasing sequence, and all the _err_\[_i_\] must be 0 or greater. 1. Set _intinf_ to floor(max(0, abs(_a_\[0\]))). (This is the absolute integer part of the first term in the series, or 0, whichever is greater.) 2. If _intinf_ is greater than 0, generate numbers that are each 1 or 0 with equal probability until the number zero or _intinf_ many numbers were generated this way, whichever comes first. If a zero was generated this way, return 0. @@ -1515,7 +1515,7 @@ This algorithm is a special case of the two-coin algorithm of (Gonçalves et al. This is a rational function (ratio of two polynomials) with variable _λ_, and this rational function admits the following algorithm. In this algorithm, _m_ must be an integer 0 or greater, and _λ_ is the unknown heads probability of a coin. 1. Let _d_ be the three-item list [1, 2, 1] \(for numerator 1). Let _e_ be the three-item list [1+m2, 2\*(1+m2+m), 1+m2+2\*m+1] \(for denominator). Find the highest number in _e_, then divide each item in _d_ and in _e_ by that number (using rational arithmetic). -2. Run the first algorithm for [**rational functions**](https://peteroupc.github.io/bernoulli.html#Certain_Rational_Functions) in "Bernoulli Factory Algorithms", with _n_ = 2, and with _d_ and _e_ given above. +2. Run the first algorithm for [**rational functions**](https://peteroupc.github.io/bernoulli.html#Certain_Rational_Functions) in "Bernoulli Factory Algorithms", with _n_ = 2, and with _d_ and _e_ given earlier. @@ -2219,7 +2219,7 @@ Involves the continued fraction expansion and Bernoulli Factory algorithm 3 for #### _ζ_(3) * 3 / 4 and Other Zeta-Related Constants -(Flajolet et al., 2010\)[^1]. It can be seen as a triple integral of the function 1/(1 + _a_ * _b_ * _c_), where _a_, _b_, and _c_ are uniform random variates between 0 and 1. This algorithm is given below, but using the two-coin algorithm instead of the even-parity construction[^32]. Here, _ζ_(_x_) is the Riemann zeta function. +(Flajolet et al., 2010\)[^1]. It can be seen as a triple integral of the function 1/(1 + _a_ * _b_ * _c_), where _a_, _b_, and _c_ are uniform random variates between 0 and 1. This algorithm is given later, but using the two-coin algorithm instead of the even-parity construction[^32]. Here, _ζ_(_x_) is the Riemann zeta function. 1. Generate three uniform random variates between 0 and 1. 2. Generate 1 or 0 with equal probability. If 1 was generated this way, return 1. @@ -2661,7 +2661,7 @@ The following algorithm returns 1 with probability sin(_λ_\*_π_/2) and $$f(\lambda) = \sin(\lambda \pi/2) = 1-g(1-\lambda),$$ where— -$$g(\mu) = 1-\sin((1-\mu) \pi/2)$$ $$= \sum_{n\ge 0} \frac{(\mu\pi/2)^{4n+2}}{(4n+2)!} - \frac{(\mu\pi/2)^{4n+4}}{(4n+4)!}$$ $$= \sum_{n\ge 0} w_n(\mu) = \sum_{n\ge 0} w_n(1) \frac{w_n(\mu)}{w_n(1)}.$$ This is a [**convex combination**](#Convex_Combinations) of $w_n(1)$ and $\frac{w_n(\mu)}{w_n(1)}$ — to simulate $g(\mu)$, first an integer _n_ is chosen with probability $w_n(1)$ and then a coin that shows heads with probability $\frac{w_n(\mu)}{w_n(1)}$ is flipped. Finally, to simulate $f(\lambda)$, the input coin is "inverted" ($\mu = 1-\lambda$), $g(\mu)$ is simulated using the "inverted" coin, and 1 minus the simulation result is returned.

        As given above, each term $w_n(\mu)$ is a polynomial in $\mu$, and is strictly increasing and equals 1 or less everywhere on the closed unit interval, and $w_n(1)$ is a constant so that $\frac{w_n(\mu)}{w_n(1)}$ remains a polynomial. Each polynomial $\frac{w_n(\mu)}{w_n(1)}$ can be transformed into a polynomial that has the following Bernstein coefficients: $$(0, 0, ..., 0, 8/(v-\pi^2), 8(4n+3)/(v-\pi^2), 1),$$ +$$g(\mu) = 1-\sin((1-\mu) \pi/2)$$ $$= \sum_{n\ge 0} \frac{(\mu\pi/2)^{4n+2}}{(4n+2)!} - \frac{(\mu\pi/2)^{4n+4}}{(4n+4)!}$$ $$= \sum_{n\ge 0} w_n(\mu) = \sum_{n\ge 0} w_n(1) \frac{w_n(\mu)}{w_n(1)}.$$ This is a [**convex combination**](#Convex_Combinations) of $w_n(1)$ and $\frac{w_n(\mu)}{w_n(1)}$ — to simulate $g(\mu)$, first an integer _n_ is chosen with probability $w_n(1)$ and then a coin that shows heads with probability $\frac{w_n(\mu)}{w_n(1)}$ is flipped. Finally, to simulate $f(\lambda)$, the input coin is "inverted" ($\mu = 1-\lambda$), $g(\mu)$ is simulated using the "inverted" coin, and 1 minus the simulation result is returned.

        As given earlier, each term $w_n(\mu)$ is a polynomial in $\mu$, and is strictly increasing and equals 1 or less everywhere on the closed unit interval, and $w_n(1)$ is a constant so that $\frac{w_n(\mu)}{w_n(1)}$ remains a polynomial. Each polynomial $\frac{w_n(\mu)}{w_n(1)}$ can be transformed into a polynomial that has the following Bernstein coefficients: $$(0, 0, ..., 0, 8/(v-\pi^2), 8(4n+3)/(v-\pi^2), 1),$$ where the polynomial is of degree $4n+4$ and so has $4n+5$ Bernstein coefficients, and $v = \frac{((4n+4)!)\times 2^{4n+4}}{((4n+2)!)\times 2^{4n+2}} = 16 (n+1) (4n+3)$. These are the Bernstein coefficients used in steps 4 through 7 of the algorithm above. > > 2. sin(_λ_\*_π_/2) = cos((1−_λ_)\*_π_/2). @@ -2779,7 +2779,7 @@ Suppose a polynomial— - is 0 or greater for every _λ_ 0 or greater, but not greater than 1, - has degree _n_ or less, and -- is written in form 1 as given above. +- is written in form 1 as given earlier. Then the polynomial can be turned into a _homogeneous polynomial_ of degree _n_ (all its terms have degree _n_) as follows. (Homogeneous polynomials are also known as polynomials in _scaled Bernstein form_ (Farouki and Rajan 1988)[^18].) diff --git a/bernoulli.py b/bernoulli.py index 5738801c6..4dc921cd6 100755 --- a/bernoulli.py +++ b/bernoulli.py @@ -1406,7 +1406,7 @@ def append_poly(self, result, poly): (such as int or Python's Fraction). Each term in the polynomial must have the same number of items (except - for the special case given above). For example, the following is not a valid + for the special case given earlier). For example, the following is not a valid way to express this parameter: [[1, 1, 0], [1, 3, 4, 5], [1, 1, 2], [2, 3, 4]] Here, the second term has four items, not three like the rest. diff --git a/bernoulli.zip b/bernoulli.zip index 6a3695703e0eb36beefcf78b2118ceffa801f750..ede792b51a923573dc3293afdad90f694c73bc63 100755 GIT binary patch delta 67860 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 diff --git a/bernreq.html b/bernreq.html index a285005c4..8d64a4812 100755 --- a/bernreq.html +++ b/bernreq.html @@ -1,4 +1,4 @@ - +
        @@ -115,9 +115,9 @@

        A Conjecture on Polynomial App

        whenever $0\le \lambda\le 1$. Then there is $C_0\ge D$ such that for every $C\ge C_0$, the polynomials $(g_n)$ in Bernstein form of degree 2, 4, 8, …, $2^i$, …, defined as $g_n=B_n(W_n(\lambda) - CM/n^{r/2})$, converge from below to $f$ and satisfy: $(g_{2n}-g_{n})$ is a polynomial with non-negative Bernstein coefficients once it’s rewritten to a polynomial in Bernstein form of degree exactly $2n$. (See Note 3 in “**End Notes**”.)

        -

        Equivalently (see also Nacu and Peres (2005)4), there is $C_1>0$ such that the inequality $(PB)$ (see below) holds true for each integer $n\ge 1$ that’s a power of 2 (see “Strategies”, below).

        +

        Equivalently (see also Nacu and Peres (2005)4), there is $C_1>0$ such that the inequality $(PB)$ (see below) holds true for each integer $n\ge 1$ that’s a power of 2 (see “Strategies”, later).

        -

        My goal is to see not just whether this conjecture is true, but also which value of $C_0$ (or $C_1$) suffices for the conjecture, especially for any combination of the special cases mentioned at the end of “Main Question”, above.

        +

        My goal is to see not just whether this conjecture is true, but also which value of $C_0$ (or $C_1$) suffices for the conjecture, especially for any combination of the special cases mentioned at the end of “Main Question”, earlier.

        @@ -130,7 +130,7 @@

        Strategies

      3. For linear combinations of Bernstein polynomials (Butzer (1953)13, Tachev 2022), verify my proof of those error bounds in my Proposition B10.
      4. For the “Lorentz operator” (Holtz et al. 2011)5, find explicit bounds, with no hidden constants, on the approximation error for the operator $Q_{n,r}(f)$ and for the polynomials $(f_n)$ and $(g_n)$ formed with it, and find the hidden constants $\theta_\alpha$, $s$, and $D$ as well as those in Lemmas 15, 17 to 22, 24, and 25 in the paper. Or verify my proof of the order-2 operator’s error bounds in my Proposition B10A. The bounds should have the form $C\cdot\max((\lambda(1-\lambda)/n)^{1/2}, 1/n)^r$, where $C$ is an explicitly given constant depending only on $f$ and $r$.
      5. Let $f:[-1,1]\to [0,1]$ be continuous. Find explicit bounds, with no hidden constants, on the error in approximating $f$ with the following polynomials: The polynomials are similar to Chebyshev interpolants, but evaluate $f$ at rational values of $\lambda$ that converge to Chebyshev or Legendre points (e.g., converging to $\cos(j\pi/n)$ with increasing $n$). The error bounds must be close to those of Chebyshev interpolants (see, e.g., chapters 7, 8, and 12 of Trefethen, Approximation Theory and Approximation Practice, 2013).
      6. -
      7. Find other polynomial operators meeting the requirements of the main question (see “Main Question”, above) and having explicit error bounds, with no hidden constants, especially operators that preserve polynomials of a higher degree than linear functions.
      8. +
      9. Find other polynomial operators meeting the requirements of the main question (see “Main Question”, earlier) and having explicit error bounds, with no hidden constants, especially operators that preserve polynomials of a higher degree than linear functions.
      10. Find a sequence of functions $(W_n(f))$ and an explicit and tight upper bound on $C_1>0$ such that, for each integer $n\ge 1$ that’s a power of 2—

        diff --git a/bernreq.md b/bernreq.md index d49ef115a..7758c0973 100755 --- a/bernreq.md +++ b/bernreq.md @@ -98,9 +98,9 @@ $$\text{abs}(f(\lambda)-B_n(W_n(\lambda))) \le DM/n^{r/2},$$ whenever $0\le \lambda\le 1$. Then there is $C_0\ge D$ such that for every $C\ge C_0$, the polynomials $(g_n)$ in Bernstein form of degree 2, 4, 8, ..., $2^i$, ..., defined as $g_n=B_n(W_n(\lambda) - CM/n^{r/2})$, converge from below to $f$ and satisfy: $(g_{2n}-g_{n})$ is a polynomial with non-negative Bernstein coefficients once it's rewritten to a polynomial in Bernstein form of degree exactly $2n$. (**See Note 3 in "[**End Notes**](#End_Notes)".**) -Equivalently (see also Nacu and Peres (2005)[^4]), there is $C_1>0$ such that the inequality $(PB)$ (see below) holds true for each integer $n\ge 1$ that's a power of 2 (see "Strategies", below). +Equivalently (see also Nacu and Peres (2005)[^4]), there is $C_1>0$ such that the inequality $(PB)$ (see below) holds true for each integer $n\ge 1$ that's a power of 2 (see "Strategies", later). -My goal is to see not just whether this conjecture is true, but also which value of $C_0$ (or $C_1$) suffices for the conjecture, especially for any combination of the special cases mentioned at the end of "[**Main Question**](#Main_Question)", above. +My goal is to see not just whether this conjecture is true, but also which value of $C_0$ (or $C_1$) suffices for the conjecture, especially for any combination of the special cases mentioned at the end of "[**Main Question**](#Main_Question)", earlier. @@ -112,7 +112,7 @@ The following are some strategies for answering these questions: - For linear combinations of Bernstein polynomials (Butzer (1953)[^13], [**Tachev 2022**](https://doi.org/10.3934/mfc.2022061)), verify my proof of those error bounds in [**my Proposition B10**](https://peteroupc.github.io/bernapprox.html#Results_Used_in_Approximations_by_Polynomials). - For the "[**Lorentz operator**](https://link.springer.com/article/10.1007/s00365-010-9108-5)" (Holtz et al. 2011)[^5], find explicit bounds, with no hidden constants, on the approximation error for the operator $Q_{n,r}(f)$ and for the polynomials $(f_n)$ and $(g_n)$ formed with it, and find the hidden constants $\theta_\alpha$, $s$, and $D$ as well as those in Lemmas 15, 17 to 22, 24, and 25 in the paper. Or verify my proof of the order-2 operator's error bounds in [**my Proposition B10A**](https://peteroupc.github.io/bernapprox.html#Results_Used_in_Approximations_by_Polynomials). The bounds should have the form $C\cdot\max((\lambda(1-\lambda)/n)^{1/2}, 1/n)^r$, where $C$ is an explicitly given constant depending only on $f$ and $r$. - Let $f:[-1,1]\to [0,1]$ be continuous. Find explicit bounds, with no hidden constants, on the error in approximating $f$ with the following polynomials: The polynomials are similar to Chebyshev interpolants, but evaluate $f$ at _rational_ values of $\lambda$ that converge to Chebyshev or Legendre points (e.g., converging to $\cos(j\pi/n)$ with increasing $n$). The error bounds must be close to those of Chebyshev interpolants (see, e.g., chapters 7, 8, and 12 of Trefethen, [**_Approximation Theory and Approximation Practice_**](https://www.chebfun.org/ATAP/), 2013). -- Find other polynomial operators meeting the requirements of the main question (see "Main Question", above) and having explicit error bounds, with no hidden constants, especially operators that preserve polynomials of a higher degree than linear functions. +- Find other polynomial operators meeting the requirements of the main question (see "Main Question", earlier) and having explicit error bounds, with no hidden constants, especially operators that preserve polynomials of a higher degree than linear functions. - Find a sequence of functions $(W_n(f))$ and an explicit and tight upper bound on $C_1>0$ such that, for each integer $n\ge 1$ that's a power of 2— $$\text{abs}\left(\left(\sum_{i=0}^k W_n\left(\frac{i}{n}\right)\sigma_{n,k,i}\right)-W_{2n}\left(\frac{k}{2n}\right)\right)=\text{abs}(\mathbb{E}[W_n(X_k/n)] - W_{2n}(\mathbb{E}[X_k/n]))\le \frac{C_1 M}{n^{r/2}},\tag{PB}$$ diff --git a/bernsupp.html b/bernsupp.html index 873f1a18f..bbf867837 100755 --- a/bernsupp.html +++ b/bernsupp.html @@ -1,4 +1,4 @@ - +
        @@ -343,7 +343,7 @@

        Another General Algorithm

        • $\epsilon(f, n)$ as an upper bound on the absolute value of the difference between $f$ and the degree-$n$ polynomial $L_{n}(f)$. $\epsilon(f, n)$ must increase nowhere as $n$ increases, and must converge to 0.
            -
          • For best results, this should be written as $\epsilon(f, n) = C/n^r$, where $C$ is a constant and $r>0$ is a multiple of 1/2, since then it’s easy to find the value of ErrShift(f, n), below. In this case, the algorithm should be limited to functions with a continuous $(2r)$-th derivative or a Lipschitz continuous $(2r-1)$-th derivative (see “Achievable Simulation Rates”, later). (For example, if the error bound is $C/n^2$, the function $f$ should have a continuous fourth derivative or a Lipschitz continuous third derivative.)
          • +
          • For best results, this should be written as $\epsilon(f, n) = C/n^r$, where $C$ is a constant and $r>0$ is a multiple of 1/2, since then it’s easy to find the value of ErrShift(f, n), later. In this case, the algorithm should be limited to functions with a continuous $(2r)$-th derivative or a Lipschitz continuous $(2r-1)$-th derivative (see “Achievable Simulation Rates”, later). (For example, if the error bound is $C/n^2$, the function $f$ should have a continuous fourth derivative or a Lipschitz continuous third derivative.)
          • For examples of error bounds, see “Approximations in Bernstein Form”.
        • @@ -388,7 +388,7 @@

          Another General Algorithm

          Then an algorithm to toss heads with probability equal to $f$ would be:

            -
          1. Generate X at random with the probabilities given above.
          2. +
          3. Generate X at random with the probabilities given earlier.
          4. If X is 0, return 0. Otherwise, if X is 1, find the starting polynomial and its Bernstein coefficients. Otherwise (if X is 2 or greater), find the difference polynomial of order m and its Bernstein coefficients, where m = (X−2) + StartOrder.
          5. Flip the input coin (with probability of heads $\lambda$), $n - 1$ times, where $n$ is the number of Bernstein coefficients in the polynomial found in step 2 (its degree plus one), and let $j$ be the number of heads.
          6. Return 1 with probability equal to the polynomial’s $j$th Bernstein coefficient ($j$ starts at 0), or 0 otherwise (see also Goyal and Sigman 2012 for an algorithm to simulate polynomials).
          7. @@ -404,7 +404,7 @@

            Another General Algorithm

          8. The error bound is $\epsilon(f, n) = M/(8n)$ (Lorentz 1963)8.
          9. The starting polynomial is found as follows. Let c = max($f(0), f(1)$). Then the starting polynomial has two Bernstein coefficients both equal to $c$; StartWidth is equal to ceil($c\cdot 65536$)/65536, and StartOrder is equal to 0.
          10. ErrShift($f,m$) = 0. The reason for 0 is that $f$ is concave, so its Bernstein polynomials naturally “increase” with increasing degree (Temple 1954)9, (Moldovan 1962)10.
          11. -
          12. DiffWidth($f,m$) = $1.01\cdot 3 M/(8\cdot 2^m)$. For the same reason as the previous point, and because the Bernstein polynomials are always “below” $f$, DiffWidth($f,m$) can also equal 1.01 $\cdot \epsilon(f, 2^{m})$ = $1.01\cdot M/(8\cdot 2^m)$. This is what is used to calculate T, below.
          13. +
          14. DiffWidth($f,m$) = $1.01\cdot 3 M/(8\cdot 2^m)$. For the same reason as the previous point, and because the Bernstein polynomials are always “below” $f$, DiffWidth($f,m$) can also equal 1.01 $\cdot \epsilon(f, 2^{m})$ = $1.01\cdot M/(8\cdot 2^m)$. This is what is used to calculate T, later.
          15. T is calculated as StartWidth + $1.01\cdot M/4$.
        diff --git a/bernsupp.md b/bernsupp.md index 28931aa0b..0104d012e 100755 --- a/bernsupp.md +++ b/bernsupp.md @@ -231,7 +231,7 @@ In effect, the algorithm writes $f$ as an infinite sum of polynomials, whose max - In the algorithm, denote: - $\epsilon(f, n)$ as an upper bound on the absolute value of the difference between $f$ and the degree-$n$ polynomial $L_{n}(f)$. $\epsilon(f, n)$ must increase nowhere as $n$ increases, and must converge to 0. - - For best results, this should be written as $\epsilon(f, n) = C/n^r$, where $C$ is a constant and $r>0$ is a multiple of 1/2, since then it's easy to find the value of ErrShift(f, n), below. In this case, the algorithm should be limited to functions with a continuous $(2r)$-th derivative or a Lipschitz continuous $(2r-1)$-th derivative (see "[**Achievable Simulation Rates**](#Achievable_Simulation_Rates)", later). (For example, if the error bound is $C/n^2$, the function $f$ should have a continuous fourth derivative or a Lipschitz continuous third derivative.) + - For best results, this should be written as $\epsilon(f, n) = C/n^r$, where $C$ is a constant and $r>0$ is a multiple of 1/2, since then it's easy to find the value of ErrShift(f, n), later. In this case, the algorithm should be limited to functions with a continuous $(2r)$-th derivative or a Lipschitz continuous $(2r-1)$-th derivative (see "[**Achievable Simulation Rates**](#Achievable_Simulation_Rates)", later). (For example, if the error bound is $C/n^2$, the function $f$ should have a continuous fourth derivative or a Lipschitz continuous third derivative.) - For examples of error bounds, see [**"Approximations in Bernstein Form"**](https://peteroupc.github.io/bernapprox.html). - ErrShift($f, m$) as 1.01 $\cdot\sum_{i\ge m} \epsilon(f, 2^i)$. The factor 1.01 is needed to ensure each difference polynomial is strictly between 0 and 1. - **Example:** If $\epsilon(f, n) = C/n^r$, then ErrShift($f, m)$ = $1.01\cdot C\cdot 2^r/(((2^r)-1)\cdot 2^{rm})$. @@ -255,7 +255,7 @@ In effect, the algorithm writes $f$ as an infinite sum of polynomials, whose max Then an algorithm to toss heads with probability equal to $f$ would be: -1. Generate _X_ at random with the probabilities given above. +1. Generate _X_ at random with the probabilities given earlier. 2. If _X_ is 0, return 0. Otherwise, if _X_ is 1, find the **starting polynomial** and its Bernstein coefficients. Otherwise (if _X_ is 2 or greater), find the **difference polynomial** of order _m_ and its Bernstein coefficients, where _m_ = (_X_−2) + **StartOrder**. 3. Flip the input coin (with probability of heads $\lambda$), $n - 1$ times, where $n$ is the number of Bernstein coefficients in the polynomial found in step 2 (its degree plus one), and let $j$ be the number of heads. 4. Return 1 with probability equal to the polynomial's $j$th Bernstein coefficient ($j$ starts at 0), or 0 otherwise (see also Goyal and Sigman 2012 for an algorithm to simulate polynomials). @@ -268,7 +268,7 @@ If _T_ turns out to be greater than 1 in this algorithm, but still finite, one w > - The error bound is $\epsilon(f, n) = M/(8n)$ (Lorentz 1963)[^8]. > - The **starting polynomial** is found as follows. Let _c_ = max($f(0), f(1)$). Then the starting polynomial has two Bernstein coefficients both equal to $c$; **StartWidth** is equal to ceil($c\cdot 65536$)/65536, and **StartOrder** is equal to 0. > - ErrShift($f,m$) = 0. The reason for 0 is that $f$ is concave, so its Bernstein polynomials naturally "increase" with increasing degree (Temple 1954)[^9], (Moldovan 1962)[^10]. -> - DiffWidth($f,m$) = $1.01\cdot 3 M/(8\cdot 2^m)$. For the same reason as the previous point, and because the Bernstein polynomials are always "below" $f$, DiffWidth($f,m$) can also equal 1.01 $\cdot \epsilon(f, 2^{m})$ = $1.01\cdot M/(8\cdot 2^m)$. This is what is used to calculate _T_, below. +> - DiffWidth($f,m$) = $1.01\cdot 3 M/(8\cdot 2^m)$. For the same reason as the previous point, and because the Bernstein polynomials are always "below" $f$, DiffWidth($f,m$) can also equal 1.01 $\cdot \epsilon(f, 2^{m})$ = $1.01\cdot M/(8\cdot 2^m)$. This is what is used to calculate _T_, later. > - _T_ is calculated as **StartWidth** + $1.01\cdot M/4$. diff --git a/colorgen.html b/colorgen.html index bf27d5263..f4d86a8d5 100755 --- a/colorgen.html +++ b/colorgen.html @@ -1,4 +1,4 @@ - +
        @@ -783,7 +783,7 @@

        CIE XYZ

         

        -
        // Applies a 3&times;3 matrix transformation
        +
        // Applies a 3 &times; 3 matrix transformation
         METHOD Apply3x3Matrix(xyz, xyzmatrix)
             r=xyz[0]*xyzmatrix[0]+xyz[1]*xyzmatrix[1]+xyz[2]*xyzmatrix[2]
             g=xyz[0]*xyzmatrix[3]+xyz[1]*xyzmatrix[4]+xyz[2]*xyzmatrix[5]
        @@ -832,7 +832,7 @@ 

        CIE XYZ

        Notes:

          -
        1. In the pseudocode just given, 3×3 matrices are used to transform a linear RGB color to or from XYZ form (see “Conversion Matrices Between XYZ and RGB”).
        2. +
        3. In the pseudocode just given, 3 × 3 matrices are used to transform a linear RGB color to or from XYZ form (see “Conversion Matrices Between XYZ and RGB”).
        4. XYZTosRGB and XYZTosRGBD50 can return sRGB colors with components less than 0 or greater than 1, to make out-of-range XYZ colors easier to identify. If that is not desired, then the sRGB color can be converted to an in-range one. There are many such gamut mapping conversions; for example, one such conversion involves clamping each component of the sRGB color using the idiom min(max(compo,0), 1), where compo is that component.
        5. XYZ colors that have undergone black point compensation (see also ISO 18619) can be expressed as Lerp3(wpoint, xyz, (1.0 - blackDest) / (1.0 - blackSrc)), where—

          @@ -865,7 +865,7 @@

          Encoding XYZ Through RGB

          Conversion Matrices Between XYZ and RGB

          -

          The following methods calculate a 3×3 matrix to convert from a linear RGB color to XYZ form (RGBToXYZMatrix) and back (XYZToRGBMatrix), given the RGB color space’s red, green, blue, and white points. Each point is expressed as a relative XYZ color with arbitrary X and Z components and a Y component of 1. For example, xr and zr are the red point’s X and Z components, respectively. See brucelindbloom.com for more information.

          +

          The following methods calculate a 3 × 3 matrix to convert from a linear RGB color to XYZ form (RGBToXYZMatrix) and back (XYZToRGBMatrix), given the RGB color space’s red, green, blue, and white points. Each point is expressed as a relative XYZ color with arbitrary X and Z components and a Y component of 1. For example, xr and zr are the red point’s X and Z components, respectively. See brucelindbloom.com for more information.

          METHOD RGBToXYZMatrix(xr,zr,xg,zg,xb,zb,xw,zw)
            s1=(xb*zg - xb*zw - xg*zb + xg*zw + xw*zb - xw*zg)
          @@ -1277,7 +1277,7 @@ 

          Color Schemes and Harmonies

          The following techniques generate new colors that are related to existing colors.

            -
          • Color harmonies28 result by generating several colors that differ in hue (hue angle). For each color harmony given below, the following numbers are added to a hue angle11 to generate the hues for the colors that make up that harmony: +
          • Color harmonies28 result by generating several colors that differ in hue (hue angle). For each color harmony given later, the following numbers are added to a hue angle11 to generate the hues for the colors that make up that harmony:
            • Analogous: 0, Y, -Y, where Y is 2π/3 or less. In general, analogous colors are two, four, or a higher even number of colors spaced at equal hue intervals from a central color.
            • Complementary: 0, π. This is the base hue with its opposite hue.
            • @@ -1526,7 +1526,7 @@

              Blend Modes

              Color Matrices

              -

              A color matrix is a 9-item (3×3) list for transforming a three-component color. The following are examples of color matrices:

              +

              A color matrix is a 9-item (3 × 3) list for transforming a three-component color. The following are examples of color matrices:

              • Sepia. Sepia matrices can have the form [r*sw[0], g*sw[0], b*sw[0], r*sw[1], g*sw[1], b*sw[1], r*sw[2], g*sw[2], b*sw[2]], where r, g, and b are as defined in the section “Luminance Factor (Grayscale)”, and sw is the RGB color for “sepia white” (an arbitrary choice). An example for linear sRGB is: [0.207,0.696,0.07,0.212,0.712,0.072,0.16,0.538,0.054].
              • diff --git a/colorgen.md b/colorgen.md index 7de1a260e..751f1e16f 100755 --- a/colorgen.md +++ b/colorgen.md @@ -665,7 +665,7 @@ Both methods are approximate conversions because the factors in the pseudocode a   - // Applies a 3×3 matrix transformation + // Applies a 3 × 3 matrix transformation METHOD Apply3x3Matrix(xyz, xyzmatrix) r=xyz[0]*xyzmatrix[0]+xyz[1]*xyzmatrix[1]+xyz[2]*xyzmatrix[2] g=xyz[0]*xyzmatrix[3]+xyz[1]*xyzmatrix[4]+xyz[2]*xyzmatrix[5] @@ -711,7 +711,7 @@ Both methods are approximate conversions because the factors in the pseudocode a > **Notes:** > -> 1. In the pseudocode just given, 3×3 matrices are used to transform a linear RGB color to or from XYZ form (see [**"Conversion Matrices Between XYZ and RGB"**](#Conversion_Matrices_Between_XYZ_and_RGB)). +> 1. In the pseudocode just given, 3 × 3 matrices are used to transform a linear RGB color to or from XYZ form (see [**"Conversion Matrices Between XYZ and RGB"**](#Conversion_Matrices_Between_XYZ_and_RGB)). > 2. `XYZTosRGB` and `XYZTosRGBD50` can return sRGB colors with components less than 0 or greater than 1, to make out-of-range XYZ colors easier to identify. If that is not desired, then the sRGB color can be converted to an in-range one. There are many such _gamut mapping_ conversions; for example, one such conversion involves clamping each component of the sRGB color using the idiom `min(max(compo,0), 1)`, where `compo` is that component. > 3. XYZ colors that have undergone **black point compensation** (see also ISO 18619) can be expressed as `Lerp3(wpoint, xyz, (1.0 - blackDest) / (1.0 - blackSrc))`, where— > @@ -736,7 +736,7 @@ The corresponding conversions to XYZ are then the inverse of the conversions jus #### Conversion Matrices Between XYZ and RGB -The following methods calculate a 3×3 matrix to convert from a linear RGB color to XYZ form (`RGBToXYZMatrix`) and back (`XYZToRGBMatrix`), given the RGB color space's red, green, blue, and white points. Each point is expressed as a relative XYZ color with arbitrary X and Z components and a Y component of 1. For example, `xr` and `zr` are the red point's X and Z components, respectively. See [**brucelindbloom.com**](http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html) for more information. +The following methods calculate a 3 × 3 matrix to convert from a linear RGB color to XYZ form (`RGBToXYZMatrix`) and back (`XYZToRGBMatrix`), given the RGB color space's red, green, blue, and white points. Each point is expressed as a relative XYZ color with arbitrary X and Z components and a Y component of 1. For example, `xr` and `zr` are the red point's X and Z components, respectively. See [**brucelindbloom.com**](http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html) for more information. METHOD RGBToXYZMatrix(xr,zr,xg,zg,xb,zb,xw,zw) s1=(xb*zg - xb*zw - xg*zb + xg*zw + xw*zb - xw*zg) @@ -1113,7 +1113,7 @@ Other forms of binarization may classify pixels based at least in part on their The following techniques generate new colors that are related to existing colors. -- **Color harmonies**[^28] result by generating several colors that differ in hue (hue angle). For each color harmony given below, the following numbers are added to a hue angle[^11] to generate the hues for the colors that make up that harmony: +- **Color harmonies**[^28] result by generating several colors that differ in hue (hue angle). For each color harmony given later, the following numbers are added to a hue angle[^11] to generate the hues for the colors that make up that harmony: - **Analogous**: 0, Y, -Y, where Y is 2π/3 or less. In general, _analogous colors_ are two, four, or a higher even number of colors spaced at equal hue intervals from a central color. - **Complementary**: 0, π. This is the base hue with its opposite hue. - **Split complementary**: 0, π - Y, π + Y, where Y is greater than 0 and π/2 or less. The base hue and two hues close to the opposite hue. @@ -1252,7 +1252,7 @@ Binary and ternary raster operations are prevalent in bit block transfers, which ### Color Matrices -A _color matrix_ is a 9-item (3×3) list for transforming a three-component color. The following are examples of color matrices: +A _color matrix_ is a 9-item (3 × 3) list for transforming a three-component color. The following are examples of color matrices: - **Sepia.** Sepia matrices can have the form `[r*sw[0], g*sw[0], b*sw[0], r*sw[1], g*sw[1], b*sw[1], r*sw[2], g*sw[2], b*sw[2]]`, where `r`, `g`, and `b` are as defined in the section "[**Luminance Factor (Grayscale)**](#Luminance_Factor_Grayscale)", and `sw` is the RGB color for "sepia white" (an arbitrary choice). An example for linear sRGB is: `[0.207,0.696,0.07,0.212,0.712,0.072,0.16,0.538,0.054]`. - **Saturate.** `[s+(1-s)*r, (1-s)*g, (1-s)*b, (1-s)*r, s+(1-s)*g,(1-s)*b,(1-s)*r,(1-s)*g,s+(1-s)*b]`, where `s` ranges diff --git a/colorutil.zip b/colorutil.zip index 48a7e3104d43f8f2f9234e56cf886d8d8aa506e0..103bbed9ef30e8a2eaaa70da07e326738dcc3e39 100755 GIT binary patch delta 30004 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 diff --git a/exporand.html b/exporand.html index 134c11089..87e429730 100755 --- a/exporand.html +++ b/exporand.html @@ -1,4 +1,4 @@ - +
                @@ -345,7 +345,7 @@

                Sampling Uniform PSRNs

                Notes:

                  -
                1. Karney (2014, end of sec. 4)1 discusses how even the integer part can be partially sampled rather than generating the whole integer as in step 2 of the algorithm. However, incorporating this suggestion will add a non-trivial amount of complexity to the algorithm given above.
                2. +
                3. Karney (2014, end of sec. 4)1 discusses how even the integer part can be partially sampled rather than generating the whole integer as in step 2 of the algorithm. However, incorporating this suggestion will add a non-trivial amount of complexity to the algorithm given earlier.
                4. The RandUniform algorithm is equivalent to generating the product of a random variate (b) and a uniform random variate between 0 and 1.
                5. If b is a uniform PSRN with a positive sign, an integer part of 0, and an empty fractional part, the RandUniform algorithm is equivalent to generating the product of two uniform random variates between 0 and 1.
                @@ -1853,7 +1853,7 @@

                Uniform Distribution I
                1. See Li and El Gamal (2016)28 and Oberhoff (2018)13 for related work on encoding random points uniformly distributed in a shape.
                2. Rejection sampling on a shape is subject to the “curse of dimensionality”, since typical shapes of high dimension will tend to cover much less volume than their bounding boxes, so that it would take a lot of time on average to accept a high-dimensional box. Moreover, the more volume the shape takes up in the bounding box, the higher the acceptance rate.
                3. -
                4. Devroye (1986, chapter 8, section 3)26 describes grid-based methods to optimize random point generation. In this case, the space is divided into a grid of boxes each with size 1/basek in all dimensions; the result of InShape is calculated for each such box and that box labeled with the result; all boxes labeled NO are discarded; and the algorithm is modified by adding the following after step 2: “2a. Choose a precalculated box uniformly at random, then set c1, …, cN to that box’s coordinates, then set d to k and set S to basek. If a box labeled YES was chosen, follow the substeps in step 5. If a box labeled MAYBE was chosen, multiply S by base and add 1 to d.” (For example, if base is 10, k is 1, N is 2, and d1 = d2 = 1, the space could be divided into a 10×10 grid, made up of 100 boxes each of size (1/10)×(1/10). Then, InShape is precalculated for the box with coordinates ((0, 0), (1, 1)), the box ((0, 1), (1, 2)), and so on [the boxes’ coordinates are stored as just given, but InShape instead uses those coordinates divided by basek, or 101 in this case], each such box is labeled with the result, and boxes labeled NO are discarded. Finally the algorithm above is modified as just given.)
                5. +
                6. Devroye (1986, chapter 8, section 3)26 describes grid-based methods to optimize random point generation. In this case, the space is divided into a grid of boxes each with size 1/basek in all dimensions; the result of InShape is calculated for each such box and that box labeled with the result; all boxes labeled NO are discarded; and the algorithm is modified by adding the following after step 2: “2a. Choose a precalculated box uniformly at random, then set c1, …, cN to that box’s coordinates, then set d to k and set S to basek. If a box labeled YES was chosen, follow the substeps in step 5. If a box labeled MAYBE was chosen, multiply S by base and add 1 to d.” (For example, if base is 10, k is 1, N is 2, and d1 = d2 = 1, the space could be divided into a 10 × 10 grid, made up of 100 boxes each of size (1/10)×(1/10). Then, InShape is precalculated for the box with coordinates ((0, 0), (1, 1)), the box ((0, 1), (1, 2)), and so on [the boxes’ coordinates are stored as just given, but InShape instead uses those coordinates divided by basek, or 101 in this case], each such box is labeled with the result, and boxes labeled NO are discarded. Finally the algorithm above is modified as just given.)
                7. Besides a grid, another useful data structure is a mapped regular paving (Harlow et al. 2012)29, which can be described as a binary tree with nodes each consisting of zero or two child nodes and a marking value. Start with a box that entirely covers the desired shape. Calculate InShape for the box. If it returns YES or NO then mark the box with YES or NO, respectively; otherwise it returns MAYBE, so divide the box along its first widest coordinate into two sub-boxes, set the parent box’s children to those sub-boxes, then repeat this process for each sub-box (or if the nesting level is too deep, instead mark each sub-box with MAYBE). Then, to generate a random point (with a base-2 fractional part), start from the root, then: (1) If the box is marked YES, return a uniform random point between the given coordinates using the RandUniformInRange algorithm; or (2) if the box is marked NO, start over from the root; or (3) if the box is marked MAYBE, get the two child boxes bisected from the box, choose one of them with equal probability, mark the chosen child with the result of InShape for that child, and repeat this process with that child; or (4) the box has two child boxes, so choose one of them with equal probability and repeat this process with that child.
                8. The algorithm can be adapted to return 1 with probability equal to its acceptance rate (which equals the shape’s volume divided by the hyperrectangle’s volume), and return 0 with the opposite probability. In this case, replace steps 5 and 6 with the following: “5. If the result of InShape is YES, return 1.; 6. If the result of InShape is NO, return 0.” (I thank BruceET of the Cross Validated community for leading me to this insight.)
                @@ -1993,7 +1993,7 @@

                Continuous Distributions S
              • If the PSRN is accepted, optionally fill the PSRN with uniform random digits as necessary to give its fractional part n digits (similarly to FillGeometricBag above), where n is a precision parameter, then return the PSRN.
        -

        However, the speed of this algorithm depends crucially on the mode (highest point) of f(λ) with 0 ≤ λ ≤ 1.33 As the mode approaches 0, the average rejection rate increases. Effectively, this step generates a point uniformly at random in a 1×1 area in space. If the mode is close to 0, f will cover only a tiny portion of this area, so that the chance is high that the generated point will fall outside the area of f and have to be rejected.

        +

        However, the speed of this algorithm depends crucially on the mode (highest point) of f(λ) with 0 ≤ λ ≤ 1.33 As the mode approaches 0, the average rejection rate increases. Effectively, this step generates a point uniformly at random in a 1 × 1 area in space. If the mode is close to 0, f will cover only a tiny portion of this area, so that the chance is high that the generated point will fall outside the area of f and have to be rejected.

        The beta distribution’s PDF at (1) fits the requirements of Keane and O’Brien (for alpha and beta both greater than 1), thus it can be simulated by Bernoulli factories and is covered by this general algorithm.

        diff --git a/exporand.md b/exporand.md index a2da24fcb..d355509ee 100755 --- a/exporand.md +++ b/exporand.md @@ -268,7 +268,7 @@ The **RandUniform** algorithm generates a uniformly distributed PSRN (**a**) tha > **Notes:** > -> 1. Karney (2014, end of sec. 4\)[^1] discusses how even the integer part can be partially sampled rather than generating the whole integer as in step 2 of the algorithm. However, incorporating this suggestion will add a non-trivial amount of complexity to the algorithm given above. +> 1. Karney (2014, end of sec. 4\)[^1] discusses how even the integer part can be partially sampled rather than generating the whole integer as in step 2 of the algorithm. However, incorporating this suggestion will add a non-trivial amount of complexity to the algorithm given earlier. > 2. The **RandUniform** algorithm is equivalent to generating the product of a random variate (**b**) and a uniform random variate between 0 and 1. > 3. If **b** is a uniform PSRN with a positive sign, an integer part of 0, and an empty fractional part, the **RandUniform** algorithm is equivalent to generating the product of two uniform random variates between 0 and 1. @@ -1446,7 +1446,7 @@ The sampler's description has the following skeleton. > > 1. See Li and El Gamal (2016)[^28] and Oberhoff (2018)[^13] for related work on encoding random points uniformly distributed in a shape. > 2. Rejection sampling on a shape is subject to the "curse of dimensionality", since typical shapes of high dimension will tend to cover much less volume than their bounding boxes, so that it would take a lot of time on average to accept a high-dimensional box. Moreover, the more volume the shape takes up in the bounding box, the higher the acceptance rate. -> 3. Devroye (1986, chapter 8, section 3)[^26] describes grid-based methods to optimize random point generation. In this case, the space is divided into a grid of boxes each with size 1/_base__k_ in all dimensions; the result of **InShape** is calculated for each such box and that box labeled with the result; all boxes labeled _NO_ are discarded; and the algorithm is modified by adding the following after step 2: "2a. Choose a precalculated box uniformly at random, then set _c1_, ..., _cN_ to that box's coordinates, then set _d_ to _k_ and set _S_ to _base__k_. If a box labeled _YES_ was chosen, follow the substeps in step 5. If a box labeled _MAYBE_ was chosen, multiply _S_ by _base_ and add 1 to _d_." (For example, if _base_ is 10, _k_ is 1, _N_ is 2, and _d1_ = _d2_ = 1, the space could be divided into a 10×10 grid, made up of 100 boxes each of size (1/10)×(1/10). Then, **InShape** is precalculated for the box with coordinates ((0, 0), (1, 1)), the box ((0, 1), (1, 2)), and so on \[the boxes' coordinates are stored as just given, but **InShape** instead uses those coordinates divided by _base__k_, or 101 in this case\], each such box is labeled with the result, and boxes labeled _NO_ are discarded. Finally the algorithm above is modified as just given.) +> 3. Devroye (1986, chapter 8, section 3)[^26] describes grid-based methods to optimize random point generation. In this case, the space is divided into a grid of boxes each with size 1/_base__k_ in all dimensions; the result of **InShape** is calculated for each such box and that box labeled with the result; all boxes labeled _NO_ are discarded; and the algorithm is modified by adding the following after step 2: "2a. Choose a precalculated box uniformly at random, then set _c1_, ..., _cN_ to that box's coordinates, then set _d_ to _k_ and set _S_ to _base__k_. If a box labeled _YES_ was chosen, follow the substeps in step 5. If a box labeled _MAYBE_ was chosen, multiply _S_ by _base_ and add 1 to _d_." (For example, if _base_ is 10, _k_ is 1, _N_ is 2, and _d1_ = _d2_ = 1, the space could be divided into a 10 × 10 grid, made up of 100 boxes each of size (1/10)×(1/10). Then, **InShape** is precalculated for the box with coordinates ((0, 0), (1, 1)), the box ((0, 1), (1, 2)), and so on \[the boxes' coordinates are stored as just given, but **InShape** instead uses those coordinates divided by _base__k_, or 101 in this case\], each such box is labeled with the result, and boxes labeled _NO_ are discarded. Finally the algorithm above is modified as just given.) > 4. Besides a grid, another useful data structure is a _mapped regular paving_ (Harlow et al. 2012)[^29], which can be described as a binary tree with nodes each consisting of zero or two child nodes and a marking value. Start with a box that entirely covers the desired shape. Calculate **InShape** for the box. If it returns _YES_ or _NO_ then mark the box with _YES_ or _NO_, respectively; otherwise it returns _MAYBE_, so divide the box along its first widest coordinate into two sub-boxes, set the parent box's children to those sub-boxes, then repeat this process for each sub-box (or if the nesting level is too deep, instead mark each sub-box with _MAYBE_). Then, to generate a random point (with a base-2 fractional part), start from the root, then: (1) If the box is marked _YES_, return a uniform random point between the given coordinates using the **RandUniformInRange** algorithm; or (2) if the box is marked _NO_, start over from the root; or (3) if the box is marked _MAYBE_, get the two child boxes bisected from the box, choose one of them with equal probability, mark the chosen child with the result of **InShape** for that child, and repeat this process with that child; or (4) the box has two child boxes, so choose one of them with equal probability and repeat this process with that child. > 5. The algorithm can be adapted to return 1 with probability equal to its acceptance rate (which equals the shape's volume divided by the hyperrectangle's volume), and return 0 with the opposite probability. In this case, replace steps 5 and 6 with the following: "5. If the result of **InShape** is _YES_, return 1.; 6. If the result of **InShape** is _NO_, return 0." (I thank BruceET of the Cross Validated community for leading me to this insight.) > @@ -1543,7 +1543,7 @@ The beta sampler in this document shows one case of a general approach to simula and they show that 2 \* _λ_, where 0 ≤ _λ_ < 1/2, is one function that does not admit a Bernoulli factory. _f_(_λ_) can be a constant, including an irrational number; see "[**Algorithms for Specific Constants**](https://peteroupc.github.io/bernoulli.html#Algorithms_for_Specific_Constants)" for ways to simulate constant probabilities. 3. If the PSRN is accepted, optionally fill the PSRN with uniform random digits as necessary to give its fractional part _n_ digits (similarly to **FillGeometricBag** above), where _n_ is a precision parameter, then return the PSRN. -However, the speed of this algorithm depends crucially on the mode (highest point) of _f_(_λ_) with 0 ≤ _λ_ ≤ 1.[^33] As the mode approaches 0, the average rejection rate increases. Effectively, this step generates a point uniformly at random in a 1×1 area in space. If the mode is close to 0, _f_ will cover only a tiny portion of this area, so that the chance is high that the generated point will fall outside the area of _f_ and have to be rejected. +However, the speed of this algorithm depends crucially on the mode (highest point) of _f_(_λ_) with 0 ≤ _λ_ ≤ 1.[^33] As the mode approaches 0, the average rejection rate increases. Effectively, this step generates a point uniformly at random in a 1 × 1 area in space. If the mode is close to 0, _f_ will cover only a tiny portion of this area, so that the chance is high that the generated point will fall outside the area of _f_ and have to be rejected. The beta distribution's PDF at (1) fits the requirements of Keane and O'Brien (for `alpha` and `beta` both greater than 1), thus it can be simulated by Bernoulli factories and is covered by this general algorithm. diff --git a/graphics.md b/graphics.md index 295e81996..59ec3df23 100755 --- a/graphics.md +++ b/graphics.md @@ -34,7 +34,7 @@ Limit 2D graphics to the following: 1. Up to three tile-based 2D layers can be displayed at a time. If 3D graphics are not being displayed, a fourth tile-based 2D layer can also be displayed. Otherwise, a layer for the 3D graphics can be displayed. 2. There are sixteen palettes of 16 colors each (using the color format for vertex colors). -3. Each tile is 8×8 pixels and uses the colors of one of the sixteen palettes just described. +3. Each tile is 8 × 8 pixels and uses the colors of one of the sixteen palettes just described. 4. The 2D and 3D layers may contain transparent pixels. 5. One of the 2D layers can undergo a 2D affine transformation. 6. Separate from layers, 2D sprites can be displayed. No more than 128 sprites may be displayed at a time. Each sprite may be tile-based or bitmap-based and must have a width and height of no more than 64 pixels each. Sprites may contain transparent parts. @@ -42,11 +42,11 @@ Limit 2D graphics to the following: General: - The 3D graphics layer, if any, can be alpha blended with the 2D graphics layers in any order. -- 256×192 screen resolution (256 pixels wide by 192 pixels high) with up to 60 frames per second, or 256×384 screen resolution with up to 30 frames per second. +- 256 × 192 screen resolution (256 pixels wide by 192 pixels high) with up to 60 frames per second, or 256 × 384 screen resolution with up to 30 frames per second. - A game may limit the amount of graphics memory (akin to VRAM) to a certain maximum size, say, 2048 kibibytes. This does not limit the size or number of graphics assets a game can have. - Music: Standard MIDI files (SMF) only. The files should be rendered using a cross-platform open-source software synthesizer (see next section), using either FM or wavetable synthesis.[^1] As much as possible, instruments should match their meanings in the General MIDI System level 1. -A game might use a different resolution than shown. In that case, the maximum allowed number of polygons and vertices and the maximum texture size, sprite size, and sprite count, as well as the maximum graphics memory size, if any, will change in proportion to the new resolution. (For example, if the resolution is 640×480 with up to 60 frames per second, these maximums are multiplied by 6.25 = (640×480) / (256×192). Other resolutions used in classic games include 320×200, 320×240, 640×350, and 512×384; another choice is 160×120.) +A game might use a different resolution than shown. In that case, the maximum allowed number of polygons and vertices and the maximum texture size, sprite size, and sprite count, as well as the maximum graphics memory size, if any, will change in proportion to the new resolution. (For example, if the resolution is 640 × 480 with up to 60 frames per second, these maximums are multiplied by 6.25 = (640 × 480) / (256 × 192). Other resolutions used in classic games include 320 × 200, 320 × 240, 640 × 350, and 512 × 384; another choice is 160 × 120.) These limitations were inspired by the graphics limitations of classic handheld game consoles. @@ -74,7 +74,7 @@ To improve support for MIDI (Musical Instrument Digital Interface) music playbac ## Classic Wallpaper Challenge -See the "[**peteroupc/classic-wallpaper**](https://github.com/peteroupc/classic-wallpaper)" repository for a challenge on creating tileable desktop wallpapers with a limited palette of colors and a limited pixel size — such wallpapers are getting ever harder to find because desktop backgrounds today tend to cover the full computer screen, to employ thousands of colors, and to have a high-definition resolution (1920×1080 or larger). +See the "[**peteroupc/classic-wallpaper**](https://github.com/peteroupc/classic-wallpaper)" repository for a challenge on creating tileable desktop wallpapers with a limited palette of colors and a limited pixel size — such wallpapers are getting ever harder to find because desktop backgrounds today tend to cover the full computer screen, to employ thousands of colors, and to have a high-definition resolution (1920 × 1080 or larger). diff --git a/html3dutil/BSplineCurve.html b/html3dutil/BSplineCurve.html index b2281ac1a..a19c8a410 100755 --- a/html3dutil/BSplineCurve.html +++ b/html3dutil/BSplineCurve.html @@ -149,10 +149,10 @@

        Examples

        curve from one kind to another. The converted curve will generally have the same path as the original curve.

        -
        // "srcBasis" is a 4×4 basis matrix for the source curve type;
        +
        // "srcBasis" is a 4 &times; 4 basis matrix for the source curve type;
         // the control points will initially be of this type of curve.
         // var srcBasis = [ .... ]; // To be supplied or filled in.
        -// "dstBasis" is a 4×4 basis matrix for the destination curve type.
        +// "dstBasis" is a 4 &times; 4 basis matrix for the destination curve type.
         // It's defined here as the B&eacute;zier basis matrix for this example
         var dstBasis =[-1,3,-3,1, 3,-6,3,0, -3,3,0,0, 1,0,0,0];
         // Step 1: Invert the destination basis matrix
        diff --git a/html3dutil/BSplineSurface.html b/html3dutil/BSplineSurface.html
        index dd666d6b6..8c2a8ccc8 100755
        --- a/html3dutil/BSplineSurface.html
        +++ b/html3dutil/BSplineSurface.html
        @@ -209,7 +209,7 @@ 

        Examples

        The following example is a surface evaluator object for a parametric surface with a gradient method. To illustrate how the gradient method is derived -from the vector calculation method, that method is also given below. To +from the vector calculation method, that method is also given later. To derive the normal calculation, first look at the vector function:

        F(u, v) = (cos(u), sin(u), sin(u)*cos(v))

        diff --git a/html3dutil/Global.html b/html3dutil/Global.html index 64c061d9c..08e596a59 100755 --- a/html3dutil/Global.html +++ b/html3dutil/Global.html @@ -178,7 +178,7 @@

        Return Value

        Now, to make a custom color, you choose one value from the red row, one value from the green row, and one value from the blue row. Each value shows the intensity of the "light" that the color ideally reflects. For example, a red value of 00 means that, ideally, "red light" is not reflected, and a red value of FF, fully reflected. If you choose the same value in all three rows, the result is black (if you choose 00), white (if you choose FF) or a shade of gray. This shows that "red light", "green light", and "blue light" are ideally equally reflected. After you choose the three values, combine them by writing the `#`, then the red value, then the green value, then the blue value. For example, if you choose `FF` for red, `A0` for green, and `00` for blue, write the resulting color (orange) like this: `#FFA000`. -- \*\*How do I "darken" an HTML color?\*\* To darken a color (make a \*shade\* of it), consult the table shown in the question _How do I make HTML colors?_, above, and move each component (red, green, and blue) the same number of steps to the left. If you can’t move a component that far to the left, that component becomes 00. For example, to make a "darker" sky blue, start with 00, FF, and FF for red, green, and blue. When we move these components ten steps to the left, we get 00, 60, and 60. The final color becomes #006060. +- \*\*How do I "darken" an HTML color?\*\* To darken a color (make a \*shade\* of it), consult the table shown in the question _How do I make HTML colors?_, earlier, and move each component (red, green, and blue) the same number of steps to the left. If you can’t move a component that far to the left, that component becomes 00. For example, to make a "darker" sky blue, start with 00, FF, and FF for red, green, and blue. When we move these components ten steps to the left, we get 00, 60, and 60. The final color becomes #006060. - \*\*How do I "lighten" an HTML color?\*\* "Lightening" a color (making a \*tint\* of it) is almost the same as "darkening" a color, except we move the same number of steps to the right rather than the left. If you can’t move a component that far to the right, that component becomes FF. For example, to make a "lighter" red, start with FF, 00, and 00 for red, green, and blue. When we move these components ten steps to the right, we get FF, A0, and A0. The final color becomes #FFA0A0. - \*\*How do I "desaturate" an HTML color?\*\* To make a "desaturated" ("washed-out") version (or \*tone\*) of a color, move the color components closer to each other, in about the same proportion. (If they’re exactly the same, the result is a shade of gray.) For example, to make a "washed-out" red, start with FF, 00, and 00 for red, green, and blue. When we move these components closer to each other, we get C0, 40, and 40. The final color becomes #C04040. - \*\*What is RGB notation?\*\* A color in RGB notation contains the same information as an HTML color, except that each value is shown in the familiar base-10 format. For example, the value `rgb(192,64,0)` is the same as the HTML color value `#C04000`. diff --git a/html3dutil/H3DU.BSplineCurve.html b/html3dutil/H3DU.BSplineCurve.html index 3131cccfb..a9b6e71ac 100755 --- a/html3dutil/H3DU.BSplineCurve.html +++ b/html3dutil/H3DU.BSplineCurve.html @@ -149,10 +149,10 @@

        Examples

        curve from one kind to another. The converted curve will generally have the same path as the original curve.

        -
        // "srcBasis" is a 4×4 basis matrix for the source curve type;
        +
        // "srcBasis" is a 4 &times; 4 basis matrix for the source curve type;
         // the control points will initially be of this type of curve.
         // var srcBasis = [ .... ]; // To be supplied or filled in.
        -// "dstBasis" is a 4×4 basis matrix for the destination curve type.
        +// "dstBasis" is a 4 &times; 4 basis matrix for the destination curve type.
         // It's defined here as the B&eacute;zier basis matrix for this example
         var dstBasis =[-1,3,-3,1, 3,-6,3,0, -3,3,0,0, 1,0,0,0];
         // Step 1: Invert the destination basis matrix
        diff --git a/html3dutil/H3DU.Batch3D.html b/html3dutil/H3DU.Batch3D.html
        index 978b4afca..fa59e16be 100755
        --- a/html3dutil/H3DU.Batch3D.html
        +++ b/html3dutil/H3DU.Batch3D.html
        @@ -104,7 +104,7 @@ 

        H3DU.Batch3D#getProjectionMatrix()

        Return Value

        -

        A 4×4 matrix used as the current +

        A 4 × 4 matrix used as the current projection matrix. (Type: Array.<number>)

        @@ -116,7 +116,7 @@

        H3DU.Batch3D#getProjectionViewMatrix()

        Return Value

        -

        A 4×4 matrix used as the current +

        A 4 × 4 matrix used as the current projection-view matrix. (Type: Array.<number>)

        @@ -282,7 +282,7 @@

        H3DU.Batch3D#setProjectionMatrix(mat)

        Parameters

          -
        • mat (Type: Array.<number>)
          A 16-element matrix (4×4).
        • +
        • mat (Type: Array.<number>)
          A 16-element matrix (4 × 4).

        Return Value

        @@ -315,7 +315,7 @@

        H3DU.Batch3D#setViewMatrix(mat)

        Parameters

          -
        • mat (Type: Array.<number>)
          A 4×4 matrix to use as the view matrix.
        • +
        • mat (Type: Array.<number>)
          A 4 × 4 matrix to use as the view matrix.

        Return Value

        diff --git a/html3dutil/H3DU.LightSource.html b/html3dutil/H3DU.LightSource.html index ad8652c37..059b462d3 100755 --- a/html3dutil/H3DU.LightSource.html +++ b/html3dutil/H3DU.LightSource.html @@ -117,7 +117,7 @@

        H3DU.LightSource#setParams(params)

        Parameters

          -
        • params (Type: Object)
          An object whose keys have the possibilities given below, and whose values are those allowed for each key.
          • position - Light position. (See H3DU.LightSource#position.)
          • ambient - Not used in the default shader program.
          • diffuse - A color vector or string giving an additional color to multiply with the diffusion color of each object (which is also called "albedo"). The default is (1, 1, 1, 1) for light index 0 and (0, 0, 0, 0) otherwise.
          • specular - A color vector or string giving the color of specular highlights caused by the light. The default is (1, 1, 1) for light index 0 and (0, 0, 0) otherwise.
          • radius - Radius of the light source. If 0, the light's intensity doesn't change with distance.
          If a value is null or undefined, it is ignored.
        • +
        • params (Type: Object)
          An object whose keys have the possibilities given later, and whose values are those allowed for each key.
          • position - Light position. (See H3DU.LightSource#position.)
          • ambient - Not used in the default shader program.
          • diffuse - A color vector or string giving an additional color to multiply with the diffusion color of each object (which is also called "albedo"). The default is (1, 1, 1, 1) for light index 0 and (0, 0, 0, 0) otherwise.
          • specular - A color vector or string giving the color of specular highlights caused by the light. The default is (1, 1, 1) for light index 0 and (0, 0, 0) otherwise.
          • radius - Radius of the light source. If 0, the light's intensity doesn't change with distance.
          If a value is null or undefined, it is ignored.

        Return Value

        diff --git a/html3dutil/H3DU.Material.html b/html3dutil/H3DU.Material.html index f42913b2c..14b7e814a 100755 --- a/html3dutil/H3DU.Material.html +++ b/html3dutil/H3DU.Material.html @@ -283,7 +283,7 @@

        H3DU.Material#setParams(params)

        Parameters

        Return Value

        diff --git a/html3dutil/H3DU.Math.html b/html3dutil/H3DU.Math.html index 15ae61155..cfd655366 100755 --- a/html3dutil/H3DU.Math.html +++ b/html3dutil/H3DU.Math.html @@ -70,63 +70,63 @@

        Methods

        cubic Bézier curve with end points (0, 0) and (1, 1) and with two configurable control points.
      11. -
      12. mat3copy
        Returns a copy of a 3×3 matrix.
      13. -
      14. mat3identity
        Returns the identity 3×3 matrix (a matrix that keeps +
      15. mat3copy
        Returns a copy of a 3 × 3 matrix.
      16. +
      17. mat3identity
        Returns the identity 3 × 3 matrix (a matrix that keeps vectors unchanged when they are transformed with this matrix).
      18. -
      19. mat3invert
        Finds the inverse of a 3×3 matrix, describing a transformation that undoes the given transformation.
      20. -
      21. mat3multiply
        Multiplies two 3×3 matrices.
      22. -
      23. mat3transform
        Transforms a 3-element vector with a 3×3 matrix and returns +
      24. mat3invert
        Finds the inverse of a 3 × 3 matrix, describing a transformation that undoes the given transformation.
      25. +
      26. mat3multiply
        Multiplies two 3 × 3 matrices.
      27. +
      28. mat3transform
        Transforms a 3-element vector with a 3 × 3 matrix and returns the transformed vector.
      29. -
      30. mat3transpose
        Returns the transpose of a 3×3 matrix.
      31. -
      32. mat3transposeInPlace
        Transposes a 3×3 matrix in place without creating +
      33. mat3transpose
        Returns the transpose of a 3 × 3 matrix.
      34. +
      35. mat3transposeInPlace
        Transposes a 3 × 3 matrix in place without creating a new matrix.
      36. -
      37. mat4copy
        Returns a copy of a 4×4 matrix.
      38. -
      39. mat4frustum
        Returns a 4×4 matrix representing a perspective projection +
      40. mat4copy
        Returns a copy of a 4 × 4 matrix.
      41. +
      42. mat4frustum
        Returns a 4 × 4 matrix representing a perspective projection in the form of a view frustum, or the limits in the "camera"'s view.
      43. -
      44. mat4identity
        Returns the identity 4×4 matrix (a matrix that keeps +
      45. mat4identity
        Returns the identity 4 × 4 matrix (a matrix that keeps vectors unchanged when they are transformed with this matrix).
      46. -
      47. mat4inverseTranspose3
        Returns the transposed result of the inverted 3×3 upper left corner of -the given 4×4 matrix.
      48. -
      49. mat4invert
        Finds the inverse of a 4×4 matrix, describing a transformation that undoes the given transformation.
      50. -
      51. mat4isIdentity
        Returns whether a 4×4 matrix is the identity matrix.
      52. -
      53. mat4lookat
        Returns a 4×4 matrix that represents a camera view, +
      54. mat4inverseTranspose3
        Returns the transposed result of the inverted 3 × 3 upper left corner of +the given 4 × 4 matrix.
      55. +
      56. mat4invert
        Finds the inverse of a 4 × 4 matrix, describing a transformation that undoes the given transformation.
      57. +
      58. mat4isIdentity
        Returns whether a 4 × 4 matrix is the identity matrix.
      59. +
      60. mat4lookat
        Returns a 4 × 4 matrix that represents a camera view, transforming world space coordinates to eye space (or camera space).
      61. -
      62. mat4multiply
        Multiplies two 4×4 matrices.
      63. -
      64. mat4oblique
        Returns a 4×4 view matrix representing an oblique projection, +
      65. mat4multiply
        Multiplies two 4 × 4 matrices.
      66. +
      67. mat4oblique
        Returns a 4 × 4 view matrix representing an oblique projection, when used in conjunction with an orthographic projection.
      68. -
      69. mat4ortho
        Returns a 4×4 matrix representing an orthographic projection.
      70. -
      71. mat4ortho2d
        Returns a 4×4 matrix representing a 2D orthographic projection.
      72. -
      73. mat4ortho2dAspect
        Returns a 4×4 matrix representing a 2D orthographic projection, +
      74. mat4ortho
        Returns a 4 × 4 matrix representing an orthographic projection.
      75. +
      76. mat4ortho2d
        Returns a 4 × 4 matrix representing a 2D orthographic projection.
      77. +
      78. mat4ortho2dAspect
        Returns a 4 × 4 matrix representing a 2D orthographic projection, retaining the view rectangle's aspect ratio.
      79. -
      80. mat4orthoAspect
        Returns a 4×4 matrix representing an orthographic projection, +
      81. mat4orthoAspect
        Returns a 4 × 4 matrix representing an orthographic projection, retaining the view rectangle's aspect ratio.
      82. -
      83. mat4perspective
        Returns a 4×4 matrix representing a perspective projection.
      84. -
      85. mat4perspectiveHorizontal
        Returns a 4×4 matrix representing a perspective projection, +
      86. mat4perspective
        Returns a 4 × 4 matrix representing a perspective projection.
      87. +
      88. mat4perspectiveHorizontal
        Returns a 4 × 4 matrix representing a perspective projection, given an X axis field of view.
      89. -
      90. mat4projectVec3
        Transforms a 3-element vector with a 4×4 matrix and returns +
      91. mat4projectVec3
        Transforms a 3-element vector with a 4 × 4 matrix and returns a perspective-correct version of the vector as a 3D point.
      92. -
      93. mat4rotate
        Multiplies a 4×4 matrix by a rotation transformation that rotates vectors +
      94. mat4rotate
        Multiplies a 4 × 4 matrix by a rotation transformation that rotates vectors by the given rotation angle and around the given axis of rotation, and returns a new matrix.
      95. -
      96. mat4rotated
        Returns a 4×4 matrix representing a rotation transformation that rotates vectors +
      97. mat4rotated
        Returns a 4 × 4 matrix representing a rotation transformation that rotates vectors by the given rotation angle and around the given axis of rotation.
      98. -
      99. mat4scale
        Multiplies a 4×4 matrix by a scaling transformation.
      100. -
      101. mat4scaleInPlace
        Modifies a 4×4 matrix by multiplying it by a +
      102. mat4scale
        Multiplies a 4 × 4 matrix by a scaling transformation.
      103. +
      104. mat4scaleInPlace
        Modifies a 4 × 4 matrix by multiplying it by a scaling transformation.
      105. -
      106. mat4scaled
        Returns a 4×4 matrix representing a scaling transformation.
      107. +
      108. mat4scaled
        Returns a 4 × 4 matrix representing a scaling transformation.
      109. mat4toFrustumPlanes
        Finds the six clipping planes of a view frustum defined -by a 4×4 matrix.
      110. -
      111. mat4toMat3
        Returns the upper-left part of a 4×4 matrix as a new -3×3 matrix.
      112. -
      113. mat4transform
        Transforms a 4-element vector with a 4×4 matrix and returns +by a 4 × 4 matrix.
      114. +
      115. mat4toMat3
        Returns the upper-left part of a 4 × 4 matrix as a new +3 × 3 matrix.
      116. +
      117. mat4transform
        Transforms a 4-element vector with a 4 × 4 matrix and returns the transformed vector.
      118. -
      119. mat4transformVec3
        Transforms a 3-element vector with a 4×4 matrix as though it were +
      120. mat4transformVec3
        Transforms a 3-element vector with a 4 × 4 matrix as though it were an affine transformation matrix (without perspective) and returns the transformed vector.
      121. -
      122. mat4translate
        Multiplies a 4×4 matrix by a translation transformation.
      123. -
      124. mat4translated
        Returns a 4×4 matrix representing a translation.
      125. -
      126. mat4transpose
        Returns the transpose of a 4×4 matrix.
      127. -
      128. mat4transposeInPlace
        Transposes a 4×4 matrix in place without creating +
      129. mat4translate
        Multiplies a 4 × 4 matrix by a translation transformation.
      130. +
      131. mat4translated
        Returns a 4 × 4 matrix representing a translation.
      132. +
      133. mat4transpose
        Returns the transpose of a 4 × 4 matrix.
      134. +
      135. mat4transposeInPlace
        Transposes a 4 × 4 matrix in place without creating a new matrix.
      136. planeFromNormalAndPoint
        Creates a plane from a normal vector and a point on the plane.
      137. planeNormalize
        Normalizes this plane so that its normal is a unit vector, @@ -138,7 +138,7 @@

        Methods

      138. quatDot
        Finds the dot product of two quaternions.
      139. quatFromAxisAngle
        Generates a quaternion from a rotation transformation that rotates vectors by the given rotation angle and around the given axis of rotation,
      140. -
      141. quatFromMat4
        Generates a quaternion from the vector rotation described in a 4×4 matrix.
      142. +
      143. quatFromMat4
        Generates a quaternion from the vector rotation described in a 4 × 4 matrix.
      144. quatFromTaitBryan
        Generates a quaternion from pitch, yaw and roll angles (or Tait–Bryan angles).
      145. quatFromVectors
        Generates a quaternion describing a rotation between two 3-element vectors.
      146. @@ -163,7 +163,7 @@

        Methods

      147. quatToAxisAngle
        Calculates the vector rotation for this quaternion in the form of the angle to rotate the vector by and an axis of rotation to rotate that vector around.
      148. -
      149. quatToMat4
        Generates a 4×4 matrix describing the rotation +
      150. quatToMat4
        Generates a 4 × 4 matrix describing the rotation described by this quaternion.
      151. quatToTaitBryan
        Converts this quaternion to the same version of the rotation in the form of pitch, yaw, and roll angles (or Tait–Bryan angles).
      152. @@ -639,12 +639,12 @@

        Return Value

        (static) H3DU.Math.mat3copy(mat)

        -

        Returns a copy of a 3×3 matrix.

        +

        Returns a copy of a 3 × 3 matrix.

        Parameters

          -
        • mat (Type: Array.<number>)
          A 3×3atrix.
        • +
        • mat (Type: Array.<number>)
          A 3 × 3atrix.

        Return Value

        @@ -655,7 +655,7 @@

        Return Value

        (static) H3DU.Math.mat3identity()

        -

        Returns the identity 3×3 matrix (a matrix that keeps +

        Returns the identity 3 × 3 matrix (a matrix that keeps vectors unchanged when they are transformed with this matrix).

        Return Value

        @@ -666,24 +666,24 @@

        Return Value

        (static) H3DU.Math.mat3invert(m)

        -

        Finds the inverse of a 3×3 matrix, describing a transformation that undoes the given transformation.

        +

        Finds the inverse of a 3 × 3 matrix, describing a transformation that undoes the given transformation.

        Parameters

          -
        • m (Type: Array.<number>)
          A 3×3 matrix.
        • +
        • m (Type: Array.<number>)
          A 3 × 3 matrix.

        Return Value

        -

        The resulting 3×3 matrix. +

        The resulting 3 × 3 matrix. Returns the identity matrix if this matrix's determinant, or overall scaling factor, is 0 or extremely close to 0. (Type: Array.<number>)

        (static) H3DU.Math.mat3multiply(a, b)

        -

        Multiplies two 3×3 matrices. A new matrix is returned. +

        Multiplies two 3 × 3 matrices. A new matrix is returned. The matrices are multiplied such that the transformations they describe happen in reverse order. For example, if the first matrix (input matrix) describes a translation and the second @@ -704,13 +704,13 @@

        Parameters

        Return Value

        -

        The resulting 3×3 matrix. (Type: Array.<number>)

        +

        The resulting 3 × 3 matrix. (Type: Array.<number>)

        (static) H3DU.Math.mat3transform(mat, v, [vy], [vz])

        -

        Transforms a 3-element vector with a 3×3 matrix and returns +

        Transforms a 3-element vector with a 3 × 3 matrix and returns the transformed vector.

        Transforming a vector (v) with a matrix (mat) @@ -723,7 +723,7 @@

        (static) H3DU.Math.mat3transform(mat, v, [vy], [vz])

        Parameters