Kezdőoldal » Számítástechnika » Programozás » Hogy tudnék gyorsabban rajzoln...

Hogy tudnék gyorsabban rajzolni python-ban?

Figyelt kérdés

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 .



2016. ápr. 30. 18:27
1 2
 11/14 A kérdező kommentje:
Amit mondtál/mondtatok már így egész jól működik . Láttam , hogy a pygame-el még 3D dolgokat is csináltak
2016. ápr. 30. 20:17
 12/14 anonim ***** válasza:

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ó:

[link]

2016. máj. 2. 21:37
Hasznos számodra ez a válasz?
 13/14 anonim ***** válasza:
Itt az elobbi kod alapjan keszitett animacio: [link]
2016. máj. 2. 21:55
Hasznos számodra ez a válasz?
 14/14 anonim ***** válasza:

Hogy áll a kódod? Nagyon szívesen megnézném.

ha érdekel, itt az enyém: [link]

2016. máj. 15. 01:44
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!