UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

39 lines (37 loc) 1.5 kB
/** * 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 };