Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. import random
  2. import math
  3. from PIL import Image
  4.  
  5. perm = range(256)
  6. random.shuffle(perm)
  7. perm += perm
  8. dirs = [(math.cos(a * 2.0 * math.pi / 256),
  9. math.sin(a * 2.0 * math.pi / 256))
  10. for a in range(256)]
  11.  
  12. def noise(x, y, per):
  13. def surflet(gridX, gridY):
  14. distX, distY = abs(x-gridX), abs(y-gridY)
  15. polyX = 1 - 6*distX**5 + 15*distX**4 - 10*distX**3
  16. polyY = 1 - 6*distY**5 + 15*distY**4 - 10*distY**3
  17. hashed = perm[perm[int(gridX)%per] + int(gridY)%per]
  18. grad = (x-gridX)*dirs[hashed][0] + (y-gridY)*dirs[hashed][1]
  19. return polyX * polyY * grad
  20. intX, intY = int(x), int(y)
  21. return (surflet(intX+0, intY+0) + surflet(intX+1, intY+0) +
  22. surflet(intX+0, intY+1) + surflet(intX+1, intY+1))
  23. def fBm(x, y, per, octs):
  24. val = 0
  25. for o in range(octs):
  26. val += 0.5**o * noise(x*2**o, y*2**o, per*2**o)
  27. return val
  28. size, freq, octs, data = 128, 1/32.0, 5, []
  29. for y in range(size):
  30. for x in range(size):
  31. data.append(fBm(x*freq, y*freq, int(size*freq), octs))
  32. im = Image.new("L", (size, size))
  33. im.putdata(data, 128, 128)
  34. im.save("noise.png")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement