03.12.2010 | 01:01
Izgleda da ovo radi i to ona couner clockwise verzija. OK, za bacit matricu upside-down onda ovo treba ponoviti dvaput i za clockwise verziju treba ponoviti triput. Na stranu to da vjerojatno postoje algoritmi i za rotaciju u jednom koraku, ali pustimo sad to.
Postoje i svode se na isti ovaj - samo malo pretumbaš parametre.
algoritma za "simetrične" logičke igre (od križ-kružića nadalje) kod kojih se može testirati 4x manje rješenja ako se početni potez "zarotira" u jednu od 4 moguće početne pozicije.
Ovo je too advanced za mene.
Garantirano nije too advanced.
Prilično je banalno: zamisli podlogu za igrati križić-kružić (#). Onaj tko prvi igra zapravo ima samo 3 moguća poteza: može odigrati gornji lijevi kut (označimo to polje sa 1), može odigrati sredinu prvog reda (polje broj 2) i može odigrati centar (polje broj 5). Ako odigra gornji desni kut (3), "zarotiraš cijelu logiku" za -90 stupnjeva i dalje se ponašaš kao da je igrač odigrao gornji lijevi kut (1). Ako odigra donji desni kut (9), "zarotiraš logiku" za + ili - 180. I opet si na istoj početnoj poziciji. Na taj način možeš "sve" kombinacije križić-kružića testirati sa svega par IFova i pritom uvijek pobijediti.
Ispada da je jedini problem raditi "translacije inputa" pa kad igrač klikne na polje gore-desno (3), ne procesiraš logiku kao da je kliknuo na polje broj 3 nego kao da je kliknuo na polje broj 1. A kad ažuriraš ono što igrač vidi, onda sve "rotiraš" nazad pa ono što je logici polje 1, igraču pokažeš kao stanje polja 3.
| 1 2 3 |
| 4 5 6 |
| 7 8 9 |
Ok, jedinica je element (0,0) ili element (1,1)? Isto tako, dvojka je element (0,1) ili element (1,2). Kad u C-u definiraš nešto poput ovog što očekuješ na poziciji matrix[0][1]? Dvojku ili četvorku?
Jedinica (u gornjoj matrici) je "standardno" u kodu (0,0), a u matematici (1,1). I uvijek možemo i jedno drugo prilagoditi svojim potrebama.
I očekujem četvorku, naravno. Koju ću i dobiti.
A baci pogled na ovo:
Pa nije li i to trivijalno? U tvom primjeru (iako ostaje diskutabilno zašto si ih grupirao u kodu tako kako jesi) konvertiraš matematičku notaciju u C-ovu tako da indexima dodaš +1 i zamijeniš ih (i postane j, a j postane i). Dakle, tvoj [0][1] postane [2][1] i eto ti četvorke bez puno muke.
Ove matrice su živi vrag.
P.S. Zapravo sam gore skroz fulao s ovim indexima. Mislio sam zapravo na koordinate x,y kod crtanja pravaca, kvadrata, kružnica i slično.
Kod crtanja je češći problem s različitim koordinatnim sustavima (počevši od toga da OS X i iOS nemaju isti koordinarni sustav
). A ovisi i iz kojeg kvadranta sve gledamo, zar ne? U 3D sve to postaje još zabavnije (pa budeš zahvalan na matricama). A ako si zločest, onda te natjeraju računati quaternione. Veselim se danu kad će LaPommes imati zadatak s quaternionima.