メインコンテンツまでスキップ

mod289: Modular 289 Function

Modular Arithmetic for Noise Generation

The mod289 function performs modulo 289 operation, commonly used in procedural noise algorithms. The value 289 (17²) is chosen for its mathematical properties that help create good pseudo-random distributions in noise functions.

Theoretical Foundation

Modular Arithmetic Essence

The mod289 operation implements the mathematical relationship:

mod289(x)=xx289×289\text{mod289}(x) = x - \lfloor \frac{x}{289} \rfloor \times 289

where 289=172289 = 17^2 represents a prime square modulus that creates specific periodicity characteristics unavailable through other modular bases.

Prime Square Modular Systems

The choice of 17217^2 as the modular base creates unique mathematical properties:

Z/289ZZ/172Z\mathbb{Z}/289\mathbb{Z} \cong \mathbb{Z}/17^2\mathbb{Z}

This isomorphism enables the creation of nested periodic structures where the primary period (17) and secondary period (289) interact to generate complex interference patterns.

Ultimate Mathematical Visualization

Modular Pattern Generation

This example demonstrates how mod289 can be used to create repeating patterns with period 289, useful for procedural texture generation and noise algorithms:

ライブエディター
const fragment = () => {
      const p = uv.sub(0.5).mul(12)
      const t = iTime.mul(0.8)

      // Generate dual-scale modular coordinates with phase evolution
      const baseX = mod289(p.x.mul(7).add(t.mul(11)))
      const baseY = mod289(p.y.mul(11).add(t.mul(7)))
      const metaX = mod289(p.x.mul(17).add(t.mul(3)))
      const metaY = mod289(p.y.mul(17).add(t.mul(5)))

      // Create 17-fold crystallographic symmetry matrices
      const angle17 = atan2(baseY.sub(144.5), baseX.sub(144.5)).mul(17)
      const radius17 = baseX.sub(144.5).pow(2).add(baseY.sub(144.5).pow(2)).sqrt()

      // Generate primary crystal lattice with 289-periodic boundaries
      const latticeU = mod289(radius17.mul(17).add(angle17.mul(3)))
      const latticeV = mod289(angle17.mul(17).sub(radius17.mul(5)))

      // Create fractal substructure using nested modular operations
      const fractalA = mod289(latticeU.div(17).floor().mul(17).add(t.mul(23)))
      const fractalB = mod289(latticeV.div(17).floor().mul(17).add(t.mul(19)))

      // Apply crystalline interference with dual symmetry
      const resonanceField = latticeU.div(289).sin().mul(latticeV.div(289).cos())
      const fractalField = fractalA.div(289).cos().mul(fractalB.div(289).sin())

      // Generate phase transition dynamics
      const phaseOrder = resonanceField.add(fractalField).abs()
      const transition = mod289(phaseOrder.mul(289).add(t.mul(17))).div(289)

      // Create catastrophic symmetry breaking
      const symmetryBreak = transition.sub(0.5).abs().mul(2)
      const orderParameter = smoothstep(0.3, 0.7, symmetryBreak)

      // Apply modular chromatic decomposition
      const primeR = mod289(fractalA.mul(7).add(metaX)).div(289)
      const primeG = mod289(fractalB.mul(11).add(metaY)).div(289)
      const primeB = mod289(latticeU.add(latticeV).mul(13)).div(289)

      // Combine crystal phases with order parameter
      const crystal = vec3(primeR, primeG, primeB)
      const amorphous = vec3(primeG, primeB, primeR).mul(0.7)
      const finalPhase = crystal.mix(amorphous, orderParameter)

      // Apply crystalline intensity with 17-symmetry enhancement
      const intensity = phaseOrder.mul(orderParameter.add(0.3))
      const enhancement = mod289(angle17.div(17).floor().mul(17)).div(289)

      return vec4(finalPhase.mul(intensity.add(enhancement.mul(0.4))), 1)

}