mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
Additive Wave
 | 
						|
by Daniel Shiffman. 
 | 
						|
 | 
						|
Create a more complex wave by adding two waves together. 
 | 
						|
"""
 | 
						|
 | 
						|
xspacing = 8    # How far apart should each horizontal location be spaced
 | 
						|
maxwaves = 4    # total # of waves to add together
 | 
						|
theta = 0.0
 | 
						|
 | 
						|
amplitude = []  # Height of wave
 | 
						|
# Value for incrementing X, to be calculated as a function of period and
 | 
						|
# xspacing
 | 
						|
dx = []
 | 
						|
yvalues = []
 | 
						|
 | 
						|
 | 
						|
def setup():
 | 
						|
    size(640, 360)
 | 
						|
    frameRate(30)
 | 
						|
    colorMode(RGB, 255, 255, 255, 100)
 | 
						|
    w = width + 16
 | 
						|
    for i in range(maxwaves):
 | 
						|
        amplitude.append(random(10, 30))
 | 
						|
        period = random(100, 300)  # How many pixels before the wave repeats
 | 
						|
        dx.append((TWO_PI / period) * xspacing)
 | 
						|
    for _ in range(w / xspacing + 1):
 | 
						|
        yvalues.append(0.0)
 | 
						|
 | 
						|
 | 
						|
def draw():
 | 
						|
    background(0)
 | 
						|
    calcWave()
 | 
						|
    renderWave()
 | 
						|
 | 
						|
 | 
						|
def calcWave():
 | 
						|
    # Increment theta (try different values for 'angular velocity' here
 | 
						|
    theta += 0.02
 | 
						|
    # Set all height values to zero
 | 
						|
    for i in range(len(yvalues)):
 | 
						|
        yvalues[i] = 0
 | 
						|
    # Accumulate wave height values
 | 
						|
    for j in range(maxwaves):
 | 
						|
        x = theta
 | 
						|
        for i in range(len(yvalues)):
 | 
						|
            # Every other wave is cosine instead of sine
 | 
						|
            if j % 2 == 0:
 | 
						|
                yvalues[i] += sin(x) * amplitude[j]
 | 
						|
            else:
 | 
						|
                yvalues[i] += cos(x) * amplitude[j]
 | 
						|
            x += dx[j]
 | 
						|
 | 
						|
 | 
						|
def renderWave():
 | 
						|
    # A simple way to draw the wave with an ellipse at each location
 | 
						|
    noStroke()
 | 
						|
    fill(255, 50)
 | 
						|
    ellipseMode(CENTER)
 | 
						|
    for x, v in enumerate(yvalues):
 | 
						|
        ellipse(x * xspacing, height / 2 + v, 16, 16)
 | 
						|
 |