Kirjoittaja: flob
Kirjoitettu: 17.07.2004 – 28.10.2012
Tagit: grafiikka, kirjaston käyttö, koodi näytille, vinkki
Pekin plasmaoppaan luettuani sain inspiraation tehdä tällaisen pienen ja yksinkertaisen plasmaefektin Pythonilla. Pygame ja numpy pitäis löytyä jos haluaa testailla.
import pygame from pygame.locals import * import math as M from Numeric import * def main(): # luodaan taulukko funktion avulla # kaava on pekin loistavasta plasmaoppaasta def plasma(x, y): return 127 + 127 * sin(x / (50 + 10 * cos(y / 78.))) \ * cos(y / (60 + 10 * sin(x / 60.))) screen_array = fromfunction(plasma, (1520, 1800)).astype(Int) # alustetaan pygame ja asetetaan ikkunan koko pygame.init() screen = pygame.display.set_mode((320, 200), 0, 8) # Clockin avulla framerate voidaan lukita clock = pygame.time.Clock() # toistetaan samaa kunnes jotain nappia painetaan aika = 1 done = 0 while not done: for event in pygame.event.get(): if event.type in (QUIT, KEYDOWN): done = 1 # luodaan paletti ... tämä se vasta on kivaa! tiheys = (M.sin(aika / 55) + 1.04) * 60 paletti = [] for k in range(256): R = int((M.sin(k * 0.025 + aika / 6) + 1) * 127.5) G = int((M.cos(k * 0.025 + aika / 5) + 1) * 127.5) B = int((M.sin(k * 6 / tiheys + aika / 4) + 1) * 127.5) # | | | | # | | | | # tiheys pyöritys| värien kirkkaus # | # |pyöritysnopeus paletti.append([R, G, B]) screen.set_palette(paletti) # pilkotaan taulukosta sopivat palaset ja heitetään näytölle mx = int(M.cos(aika / 110) * 600) my = int(M.cos(aika / 120) * 800) pygame.surfarray.blit_array(screen, screen_array[600+mx : 920+mx, 800+my : 1000+my]) # asetetaan framerate clock.tick(55) aika += 0.5 if __name__ == '__main__': main()
Juuri tälläistä olen tarvinnu, kiitokset sinulle ;)
Python 3.6.4 seuraavin muutoksin:
import pygame from pygame.locals import * import math as M #from Numeric import * from numpy import * from numbers import * #... screen_array = fromfunction(plasma, (1520, 1800)).astype(int) #Int->int #...
Ja kyllä on hieno :) En vaan saa resoluutiota muutettua...