playcanvas
Version:
PlayCanvas WebGL game engine
39 lines (37 loc) • 1.5 kB
JavaScript
/**
* Sampling kernels.
*
* @namespace
* @category Math
*/ class Kernel {
/**
* Generate a set of points distributed in a series of concentric rings around the origin. The
* spacing between points is determined by the number of points in the first ring, and subsequent
* rings maintain this spacing by adjusting their number of points accordingly.
*
* @param {number} numRings - The number of concentric rings to generate.
* @param {number} numPoints - The number of points in the first ring.
* @returns {Array<number>} - An array where each point is represented by two numbers.
*/ static concentric(numRings, numPoints) {
var kernel = [];
// center point
kernel.push(0, 0);
// spacing based on the first ring
var spacing = 2 * Math.PI / numRings / numPoints;
// Generate points for each ring
for(var ring = 1; ring <= numRings; ring++){
var radius = ring / numRings;
var circumference = 2 * Math.PI * radius;
var pointsPerRing = Math.max(1, Math.floor(circumference / spacing));
var angleStep = 2 * Math.PI / pointsPerRing;
for(var point = 0; point < pointsPerRing; point++){
var angle = point * angleStep;
var x = radius * Math.cos(angle);
var y = radius * Math.sin(angle);
kernel.push(x, y);
}
}
return kernel;
}
}
export { Kernel };