Skip to content

Instantly share code, notes, and snippets.

@tchaumeny
Last active January 31, 2023 19:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tchaumeny/b2481c3c3697904d14f9a183c6762b38 to your computer and use it in GitHub Desktop.
Save tchaumeny/b2481c3c3697904d14f9a183c6762b38 to your computer and use it in GitHub Desktop.
// See lipsum.dev
import React, { useEffect, useRef, useState } from "react";
const L = 8;
function baseFunc(u, v) {
return (x, y) =>
Math.cos(((2 * x + 1) * u * Math.PI) / 16) *
Math.cos(((2 * y + 1) * v * Math.PI) / 16);
}
function drawBaseFunc(canvas, factor, u, v) {
const ctx = canvas.getContext("2d");
const func = baseFunc(u, v);
const size = factor * L;
const imgData = ctx.createImageData(size, size);
for (var i = 0; i < size; i++) {
for (var j = 0; j < size; j++) {
var pixelIndex = (i + j * size) * 4;
var pixelColor =
128 +
Math.round(128 * func(Math.floor(i / factor), Math.floor(j / factor)));
imgData.data[pixelIndex + 0] = pixelColor;
imgData.data[pixelIndex + 1] = pixelColor;
imgData.data[pixelIndex + 2] = pixelColor;
imgData.data[pixelIndex + 3] = 255;
}
}
ctx.putImageData(imgData, 0, 0);
}
function BaseImage(props) {
const canvasRef = useRef(null);
const size = L * props.factor;
useEffect(() => {
const canvas = canvasRef.current;
drawBaseFunc(canvas, props.factor, props.u, props.v);
});
return (
<div>
<canvas ref={canvasRef} width={size} height={size}></canvas>
</div>
);
}
function CosinusTransform(props) {
const [u, setU] = useState(2);
const [v, setV] = useState(5);
return (
<div>
<BaseImage factor={props.factor} u={u} v={v} />
<div>
<label for="u">u = {u} </label>
<input
id="u"
type="range"
min={0}
max={7}
value={u}
onChange={(e) => setU(e.target.value)}
/>
</div>
<div>
<label for="v">v = {v} </label>
<input
id="v"
type="range"
min={0}
max={7}
value={v}
onChange={(e) => setV(e.target.value)}
/>
</div>
</div>
);
}
export { CosinusTransform }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment