javascript - 如何创建集中在 JS 特定区域的随机点?

标签 javascript math random dotspatial

这里需要一些概念上的帮助。目前,我有一个随机点函数,可以创建两组散布在 Canvas 上的点(橙色和蓝色)。但我正在寻找一种将点密度集中在屏幕周围随机区域的方法。

代码基本上是这样的:

var createBlueDots = function () {
       for (var i = 0; i <=someRandomNum; i++) {
        context.beginPath();
        var rand_x = Math.random(i) * horz_max;
        var rand_y = Math.random(i) * vertical_max;
        context.arc(rand_x, rand_y, radius, 1, 2*Math.PI);
        context.fillStyle ="#0855A2";
        context.fill();
        context.closePath();   
        }
    }
createBlueDots();

... 当与另一个 OrangeDot 函数结合使用时,它会创建如下内容: image of random dots over a canvas

...但是如何创建一系列集中在屏幕一个或多个区域周围的点?更像这样吗?

concentrated dot area

即使只是概念性提示,我们也将不胜感激。谢谢你。

最佳答案

您可以使用指数函数来确定具有某个随机 Angular 距离来实现此目的。

// dot count
const dots = 500;
// center point
const center = { x: 100, y: 100 };
// max distance from the center
const radius = 150;
// centripetal force, the larger it gets the more concentrated the dots are
const centripetal = 2.5;

const context = document.querySelector('canvas').getContext('2d');

var createBlueDots = function () {
	for (var i = 0; i <= dots; i++) {
		context.beginPath();
		const dist = (Math.random() ** centripetal) * radius;
		const angle = Math.random() * Math.PI * 2;
		var rand_x = dist * Math.cos(angle) + center.x;
		var rand_y = dist * Math.sin(angle) + center.y;
		context.arc(rand_x, rand_y, 2, 1, 2 * Math.PI);
		context.fillStyle = "#0855A2";
		context.fill();
		context.closePath();
	}
}

createBlueDots();
<canvas width="200" height="200"></canvas>

关于javascript - 如何创建集中在 JS 特定区域的随机点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60086570/

相关文章:

javascript - October CMS - 单选按钮 Ajax 连续单击两次导致内容消失

javascript - 无法返回适当的值

c# - 用于从一组数字中确定所有可能的和的非递归算法

javascript - 如何在 Javascript 上测量旋转元素的宽度和高度?

用于生成随机 53 位数字的 C 函数

python - 以(伪)随机顺序从大列表中高效地生成元素

javascript - 将属性添加到数组中 MongoDB 的对象并在响应中发送

javascript - 找出 JS-ASP 中是否存在 URL 参数

javascript - 沿 sin 曲线均匀分布圆圈

创建文件并将其附加到目录中