438

Hyperbolic Poincaré

Non-Euclidean Poincaré disk projection exhibiting infinite geometric tessellations compressing gracefully toward the boundary circle.

Playground
60 FPS • Canvas 2D
Click + Drag to interact with field
</>

Full Executable Algorithm Code


import type { ArtRenderer, ParameterState, RenderContext, TimeState } from '../../types/engine';
import { hsla } from '../common/color';

// Poincaré disk conformal hyperbolic geometry transformation
export function createHyperbolicTessellation(): ArtRenderer {
  return {
    setup() {},

    render(context: RenderContext, timeState: TimeState, params: ParameterState) {
      const { ctx, width, height } = context;
      const t = timeState.time * Number(params.speed || 0.4);
      const p = Number(params.symmetryP || 7);
      const radius = Math.min(width, height) * 0.44;

      ctx.fillStyle = '#08090d';
      ctx.fillRect(0, 0, width, height);

      const cx = width * 0.5;
      const cy = height * 0.5;

      // Outer boundary of Poincaré disk
      ctx.strokeStyle = 'rgba(56, 189, 248, 0.4)';
      ctx.lineWidth = 1.5;
      ctx.beginPath();
      ctx.arc(cx, cy, radius, 0, Math.PI * 2);
      ctx.stroke();

      // Concentric hyperbolic geodesic arcs
      const layers = 14;
      for (let l = 1; l <= layers; l++) {
        const hypRadius = radius * Math.tanh((l * 0.25) + Math.sin(t) * 0.1);
        const arcCount = p * l;

        for (let i = 0; i < arcCount; i++) {
          const angle = (i / arcCount) * Math.PI * 2 + t * (0.1 / l);
          const arcX = cx + Math.cos(angle) * hypRadius;
          const arcY = cy + Math.sin(angle) * hypRadius;

          const arcR = (radius - hypRadius) * 0.5;
          if (arcR <= 0.5) continue;

          const hue = (l * 25 + i * 10 + t * 20) % 360;
          ctx.strokeStyle = hsla(hue, 85, 60, 0.45);
          ctx.lineWidth = Math.max(0.8, 2.5 - l * 0.15);

          ctx.beginPath();
          ctx.arc(arcX, arcY, arcR, 0, Math.PI * 2);
          ctx.stroke();
        }
      }
    },
  };
}
Edit in Interactive Playground Zero Dependencies • Standalone Canvas 2D
ƒ

Mathematical Formulation

medium
Analytical Equation
ds2=4dx2+dy2(1−(x2+y2))2,d(z1,z2)=2tanh⁡−1∣z1−z21−zˉ1z2∣ds^2 = 4 \frac{dx^2 + dy^2}{(1 - (x^2 + y^2))^2}, \quad d(z_1, z_2) = 2 \tanh^{-1} \left| \frac{z_1 - z_2}{1 - \bar{z}_1 z_2} \right|
Click to expand
Compact Formula
r_hyp = R * tanh(l * 0.25 + 0.1 sin(t)), θ = 2πi / p*l + t/l

Mathematical Tags

#poincare #hyperbolic #non-euclidean #geometry #tessellation #conformal
Author: Math Art Core Target: 60 FPS

Export & Embed: Hyperbolic Poincaré

4K PNG Snapshot

High-resolution single frame render

WebM Video (5s Loop)

60 FPS browser-captured stream

Standalone JS Script

Complete executable Canvas 2D algorithm

HTML Iframe Embed

<iframe src="https://art.fazleyrabbi.xyz/embed/hyperbolic-tessellation" width="500" height="500" frameborder="0" loading="lazy"></iframe>
ESC
↑↓ Navigate ↵ Select
113 Mathematical Artworks
Made by Fazley Rabbi
☕

Support the Project

Keep mathematical creative coding alive & open source

Or via Direct Payoneer ($0 Fee)
Payoneer Customer ID: $0 Fee Direct
24076084

💡 Payoneer app: Go to Pay → Pay to recipient → Enter ID 24076084.

Thank you for supporting generative mathematical animations! ✨