javascript - JS中如何模拟鼠标移动程序生成漂亮的星系?

标签 javascript html5-canvas shapes procedural-generation

我正在从事一个程序化生成星系图像的项目,就像这样:

Galaxy

此示例是“手绘”的(通过四处挥动光标)。看这支笔: https://codepen.io/OpherV/pen/JQBKVq?editors=0110

我想按程序生成这些类型的图像,而不是一次生成它们 我希望使用“绘图”过程执行生成,即,以一种模式移动绘图光标实现这些视觉结构。

enter image description here

我目前拥有的鼠标模拟代码直接来自 Louis Hoebregts 的 "Simulating Mouse Movement" article on CSS Tricks .

原理函数依赖于单纯形噪声:

    const s = 0.001 * (speed / 100);
    const noiseX = (noise.simplex3(1, 0, a * s) + 1) / 2;
    const noiseY = (noise.simplex3(11, 0, a * s) + 1) / 2;

    random += randomness / 1000;
    const randX = noise.simplex3(1, 0, random) * window.innerWidth * 0.1;
    const randY = noise.simplex3(3, 0, random) * window.innerHeight * 0.1;
    const x = noiseX * innerWidth + randX;
    const y = noiseY * innerHeight + randY;

    updateMouse(x, y);

但是,这种噪音不会产生我想要的视觉效果。打破我脑海中的视觉结构,我们有一个中心重点的 Blob 和椭圆形的“ ARM ”。为了实现前者,我认为应该在中心附近执行更多的“绘图时间”(这会在内部创建明亮的 Blob ),而较少的“分支”执行更多的椭圆运动来制作后者。

我考虑过以某种方式对 Simplex 噪声进行梯度处理,使其更偏向中心,但我不确定如何在 2d 空间中执行此操作。我也不确定如何继续将它与吸引银河系“ ARM ”的东西结合起来。

你能推荐一个算法来实现这个吗? 谢谢🙏

最佳答案

如果您只想生成图像,您可以考虑使用 cos 和 sin 生成具有一定数量旋臂的星系。 ,玩转圆半径:

Math.cos(radians) * radius, Math.sin(radians) * radius

首先让它工作。 你可能想画一些椭圆形的东西而不是一个完整的圆圈。 更频繁地随机前往星系中心和靠近 ARM 。

奖励:如果你想完全矫枉过正,你甚至可以尝试使用现实的公式: https://arxiv.org/pdf/0908.0892.pdf

关于javascript - JS中如何模拟鼠标移动程序生成漂亮的星系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57547460/

相关文章:

opencv - 在OpenCV中将形状聚合为新形状

javascript - 了解使用 JavaScript 进行电子邮件验证

javascript - npm:在 Electron 应用程序中执行命令时找不到命令

android - 具有自定义形状项目的 RecyclerView

graphics - 非常大的 HTML5 Canvas 圆不精确

javascript - HTML5 Canvas 将圆形变成方形

java - 如何在 Java 中对 Polygon 对象应用变换

javascript - 在输入字段中输入文本时,有没有办法更改 div 的背景?

php - 如何打开另一个窗口并关闭调用它的窗口

javascript - canvas.getContext ('2d' ).arc() 方法是否居中?