Hogy tudnék gyorsabban rajzolni python-ban?
Irtam egy Eletjáték programot pythonba ( [link]
Csak a grafikus megjelenítése nagyon lassú
Van a pálya ami egy 2D tömbben van benne és a négyzeteket egyenként rajzolgatom ki . (-1-fekete ; 2-fehér)
from graphics import *
w=800
h=600
def kirajzol():
for y in range(1,round(h/10)+1):
for x in range(1,round(w/10)+1):
c=Rectangle(Point((x-1)*10+1,(y-1)*10+1), Point(x*10-1,y*10-1))
if matrixmap[y][x] == -1:
c.setFill("white")
c.setOutline("white")
matrixmap[y][x]=0
c.draw(win)
elif matrixmap[y][x] == 2:
c.setFill("black")
c.setOutline("black")
matrixmap[y][x]=1
c.draw(win)
Ha valakinek van ötlete kérem írja le . Köszönöm .
Ez egy nagyon faja kis gyakorló program! Mondjuk én teljesen máshogy álltam neki. Én is 2D tömbben tároltam, hogy egy cella él-e vagy hal-e, de a spéci n dimenziós tömb osztályt (ndarray) a numpy könyvtárból. Ehhez az osztályhoz tartozik egy .nonzero metódus, ami nagyon egyszerűvé teszi annak kiszámítását, hogy hol vannak élő cellák, és ezeknek mennyi élő szomszédja van. Az ábrázoláshoz első körben a matplotlib alapú seaborn könyvtár heatmap függvényét használtam, ami mindenféle hókuszpókusz nélkül az ndarray objektumot plottolja, ahol a mező színét az adott cella értéke szabja meg. Ez a módszer rettenetesen egyszerű, ámde lassú. Arra volt jó, hogy ellenőrizni tudtam, hogy maguk a számítások jól működnek. Ezután egy függvényt fogok írni, ami egy svg képet generál az ndarray nem nulla elemeiből. Ez nagyon nagyon gyors lesz. A képeket elvileg mentés nélkül össze lehet majd fűni animációvá, de ennek még utána kell járni.
Egy két tanács:
1) ha csak egy mód van rá, mindenképpen kerüld a beágyazott for loopok használatát. Ezek négyzetesen lassítják a kódod. (Ebben az esetben egyszer sem kell végigmenni a tömbön, elég csak az alakzatokat megnézni, hogy hol lesznek körülöttük az új élő és halott cellák)
2) Érdemes periódikus falat használni. Kicsit komplikáltabb kódolni, de mindenképpen megéri a vesződséget. Ha nem periódikus a fal, akkor nagyon gyorsan megállnak a lövedékek, amik képesek megbolygatni a pulzáló és stacionárius alakzatokat.
3) Érdemes a képeket fél generációnként készíteni, ahol a köztes lépésben jelölöd mondjuk pirossal az éppen meghaló, és zölddel az éppen születő sejteket.
Ha érdekel a kód. Talán adhat ötletet:
http://pastebin (dot) com/T2Wi9wgw
Így néz ki egy generáció:
Hogy áll a kódod? Nagyon szívesen megnézném.
ha érdekel, itt az enyém: [link]
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!