Javascript 如何在JS中模拟鼠标移动以程序化生成美丽的星系?

Javascript 如何在JS中模拟鼠标移动以程序化生成美丽的星系?,javascript,html5-canvas,shapes,procedural-generation,Javascript,Html5 Canvas,Shapes,Procedural Generation,我正在做一个项目,程序性地生成像这样的星系图像: 该样本是“手工绘制的”(通过挥动光标)。看这支笔: 我希望按程序生成这些类型的图像,但不是一次生成它们我希望使用“绘图”过程来执行生成,即以实现这些视觉结构的模式移动绘图光标。 我目前拥有的鼠标模拟代码直接来自Louis Hoebregts 主要功能依赖于单纯形噪声: const s = 0.001 * (speed / 100); const noiseX = (noise.simplex3(1, 0, a * s) +

我正在做一个项目,程序性地生成像这样的星系图像:

该样本是“手工绘制的”(通过挥动光标)。看这支笔:

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

我目前拥有的鼠标模拟代码直接来自Louis Hoebregts

主要功能依赖于单纯形噪声:

    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);
然而,这种类型的噪音不会产生我想要的视觉效果。分解我脑海中的视觉结构,我们有一个中心加权的斑点和椭圆形的“手臂”。为了实现前者,我认为应该在靠近中心的位置执行更多的“绘制时间”(这会在内部创建明亮的斑点),而较少的“分支”执行更多的椭圆运动,以使后者更具吸引力

我考虑过以某种方式对单纯形噪声进行梯度化,使其更倾向于中心,但我不确定如何在2d空间中实现这一点。我也不确定如何将它与吸引星系“手臂”的东西结合起来

你能提出一个算法来实现这一点吗?
感谢如果您只想生成图像,您可以考虑使用cos生成具有一定数量旋臂的星系,并使用圆半径:

Math.cos(弧度)*半径,Math.sin(弧度)*半径

先让它工作。 你可能想画一些椭圆的东西,而不是一个完整的圆。 在银河系的中心和靠近手臂的地方随机移动的次数更多

  • 步骤1:随机生成星系点
  • 步骤2:混合颜色()
  • 第3步:如果你想要实时性能,请使用WebGL
奖励:如果你想完全超量,你甚至可以尝试使用现实的公式:

我知道这不正是你要找的,但你可以去图书馆看看。是用它建造的。@tommmmmy这确实很酷,但与我的问题无关。这里有一些东西可以适应你的需要。随机贝塞尔步行机: