håller på och leker med lite fält och skulle behöva lite hjälp med att rotera det <code> Jag har läst något om Transpose http://en.wikipedia.org/wiki/Transpose som borde kunna tillämpas? Har dock inte en aning hur jag ska gå till väga, inget av alla exempel jag kikat har jag fått att funka Ja, nu är det inte ett transponat du ska göra, det är "typ" en spegling längs diagonalen. jag läste på lite om transarna och kom på efter ett tag att det inte var det jag var ute efter, jag har dock löst det och har nu ett 6x6 fält som jag kan snurra på. Tack för svarenrotera ett fält
det är utav denna form field[3][3]; och tanken är att
147
258
369
ska bli
789
456
123
osv. och behöver hjälp med själva algoritmen, har lyckats flytta en del men när jag fortsätter så blir det bara stök o bök
void cPlayfield::RotateLeft()
{
for(int x = 0; x < 3; x++)
{
for(int y = 0; y<3; y++)
{
iSquare[x][y] = iSquare[(y+(y+2)%3)%3][x];
}
}
}
Sv: rotera ett fält
int temp;
temp = iSquare[0][0];
iSquare[0][0] = iSquare[0][2];
iSquare[0][2] = iSquare[2][2];
iSquare[2][2] = iSquare[2][0];
iSquare[2][0] = temp;
temp = iSquare[0][1];
iSquare[0][1] = iSquare[1][2];
iSquare[1][2] = iSquare[2][1];
iSquare[2][1] = iSquare[1][0];
iSquare[1][0] = temp;
</code>
Annars kan man rotera till ett nytt fält och returnera det eller kopiera värdena i det till originalfältet.Sv:rotera ett fält
Sv: rotera ett fält
Men det är inte det som är problemet, utan att du skriver över de tidigare värdena.
Börja med mindre grejer så ser du snart vad som är problemet:
Försök gå från
[1 2] till [2 1]
Sen från
[1 2 3] till [2 3 1]
Sen
[1 2;
3 4]
till
[2 1;
4 3],
[3 4;
1 2]
och
[2 4;
1 3]
Skriv ut matrisen i varje steg, så ser du om något går snett.Sv:rotera ett fält