Python perlin noise loop help

Hi! I’m unable to get my loop to loop :sweat: I was following the video bellow:

the code I followed is shown roughly around the 12 min mark.

def setup():
    size(900,900)


def draw():
    background(0)
    translate(width/2,height/2)
    stroke(255)
    noFill()
    beginShape()
    a = 0
    while a < TWO_PI:
        a += 0.01
        xoff = cos(a) + 1
        yoff = sin(a) + 1
        x = map(noise(xoff,yoff),0,1,100,200) * cos(a)
        y = map(noise(xoff,yoff),0,1,100,200) * sin(a)
        vertex(x,y)
        
    endShape()

If anybody could explain what my mistake is, that’d be greatly appreciated!

Thanks!:pray:

Each time your draw() repeats the values inside it are always the same.

So nothing is animated, just a static image.

However Processing got a global system variable called frameCount which represents how many times draw() has been called back:
Py.Processing.org/reference/frameCount.html

I’ve adapted this Java Mode version to Python Mode to use frameCount for the variables inside draw():

# https://Discourse.Processing.org/t/python-perlin-noise-loop-help/28879/2
# Mod by GoToLoop (2021/Mar/26)

def setup():
    size(400, 400)
    stroke(-1)
    strokeWeight(2)
    noFill()


def draw(a = 0, INC = 5 * DEG_TO_RAD, PHASE = .003, ZOFF = .01, XOFF = 100):
    cx = width  >> 1
    cy = height >> 1

    cyOff = cy - XOFF

    phase = frameCount * PHASE
    zoff  = frameCount * ZOFF

    noiseMax = map(mouseX, 0, width, 1, 5)

    clear()
    translate(cx, cy)

    with beginClosedShape():
        while a < TAU:
            xoff = map(cos(a + phase), -1, 1, 0, noiseMax)
            yoff = map(sin(a + phase), -1, 1, 0, noiseMax)

            r = noise(xoff, yoff, zoff) * XOFF + cyOff

            x = r * cos(a)
            y = r * sin(a)

            a += INC

            vertex(x, y)
6 Likes

WOW! You’re a legend! :pray: Thanks so much for the resource and for helping me understand what was wrong with my code. :pray:

2 Likes