let ellipses = [];
for (let i = 0; i < 10000; i++) {
ellipses.push([Math.floor(Math.random() * 100), Math.floor(Math.random() * 100), Math.floor(Math.random() * 100), Math.floor(Math.random() * 100), 200]);
}
function pointsOnEllipse(cx, cy, rx, ry, n) {
const points = Array(n);
const step = Math.PI / (n / 2);
let sin = 0;
let cos = 1;
const a = Math.cos(step);
const b = Math.sin(step);
for (let i = 0; i < n; i++) {
points[i] = { x: cx + rx * cos, y: cy + ry * sin };
const ts = b * cos + a * sin;
const tc = a * cos - b * sin;
sin = ts;
cos = tc;
}
return points;
}
for (let i = 0, n = ellipses.length; i < n; i++) {
const ellipse = ellipses[i];
pointsOnEllipse(ellipse[0], ellipse[1], ellipse[2], ellipse[3], ellipse[4]);
}
function pointsOnEllipse(cx, cy, rx, ry, n) {
const xs = Array(n)
const ys = Array(n)
const step = Math.PI / (n / 2);
let sin = 0;
let cos = 1;
const a = Math.cos(step);
const b = Math.sin(step);
for (let i = 0; i < n; i++) {
xs[i] = cx + rx * cos
ys[i] = cy + ry * sin
const ts = b * cos + a * sin;
const tc = a * cos - b * sin;
sin = ts;
cos = tc;
}
return {xs, ys};
}
for (let i = 0, n = ellipses.length; i < n; i++) {
const ellipse = ellipses[i];
pointsOnEllipse(ellipse[0], ellipse[1], ellipse[2], ellipse[3], ellipse[4]);
}
function pointsOnEllipse(cx, cy, rx, ry, n) {
const xs = new Float32Array(n)
const ys = new Float32Array(n)
const step = Math.PI / (n / 2);
let sin = 0;
let cos = 1;
const a = Math.cos(step);
const b = Math.sin(step);
for (let i = 0; i < n; i++) {
xs[i] = cx + rx * cos
ys[i] = cy + ry * sin
const ts = b * cos + a * sin;
const tc = a * cos - b * sin;
sin = ts;
cos = tc;
}
return {xs, ys};
}
for (let i = 0, n = ellipses.length; i < n; i++) {
const ellipse = ellipses[i];
pointsOnEllipse(ellipse[0], ellipse[1], ellipse[2], ellipse[3], ellipse[4]);
}