test-canvas/bezier-2.js

38 lines
1.2 KiB
JavaScript
Raw Normal View History

2024-09-26 21:36:06 +00:00
import { lerp, drawCircle, drawLine, drawDashedLine, resizeCanvas, cubicBezier } from "./common.js"
2024-09-26 20:46:28 +00:00
const points = [];
function init() {
const canvas = document.getElementById("canvas");
if (canvas.getContext) {
const ctx = canvas.getContext("2d");
resizeCanvas(ctx); // Init canvas to full window size
canvas.addEventListener("click", (evt) => {
const {clientX, clientY} = evt;
if (points.length < 4) {
const p = {x: clientX, y: clientY};
points.push(p);
drawCircle(ctx, p, 1, 0xFF00FF);
if (points.length == 4) {
const [a, b, c, d] = points;
drawDashedLine(ctx, a, b, 0xFF00FF);
drawDashedLine(ctx, b, c, 0xFF00FF);
drawDashedLine(ctx, c, d, 0xFF00FF);
const curve = cubicBezier(a, b, c, d);
for (let i=0; i < curve.length - 1; ++i) {
drawLine(ctx, curve[i], curve[i+1], 0xFFFFFF);
}
}
}
});
window.addEventListener('resize', () => resizeCanvas(ctx));
}
}
init();