{
const threeData = data.map((d) => ({ ...d }));
const dummyObj = new THREE.Object3D();
function animate(time) {
if (start === undefined) {
start = time;
}
const elapsed = time - start;
const scale = 0.01;
const t = Math.max(0, Math.min(1, d3.easeQuadInOut(elapsed / duration)));
threeData.forEach((d, i) => {
d.cx = d.sx * (1 - t) + d.x * t;
d.cy = d.sy * (1 - t) + d.y * t;
const normalized = {
x: -4 + (d.cx / width) * 8,
y: 2 + (d.cy / height) * -4
};
dummyObj.position.set(normalized.x, normalized.y, 0);
dummyObj.scale.set(scale, scale, scale);
dummyObj.updateMatrix();
points.setMatrixAt(i, dummyObj.matrix);
});
points.instanceMatrix.needsUpdate = true;
if (elapsed < duration) {
requestAnimationFrame(animate);
}
}
let start;
requestAnimationFrame(animate);
return "THREE JS rendered to Canvas Code";
}