Rotate non square matrix 180... Not working...

J

JustSomeGuy

mx = Cols/2;
if ((mx * 2) != Cols) // Odd.
++mx;
}

for (y1=0; y1 < Rows; ++y1)
{
y2 = Rows-1 - y1;

for (x1=0; x1 < mx; ++x1)
{
x2 = Cols-1 - x1;

p = t[y1][x1];
t[y1][x1] = t[y2][x2];
t[y2][x2] = p;
}
}


This code doesn't seem to do the center column of
a matrix whos dimensions are odd on the x dimensions...
Can any one see why? I tried I don't see it...
 
V

Victor Bazarov

JustSomeGuy said:
mx = Cols/2;
if ((mx * 2) != Cols) // Odd.
++mx;
}

This closing curly brace seems misplaced. Besides, you could
simply write

mx = (Cols+1)/2;

instead of three lines above, no?
for (y1=0; y1 < Rows; ++y1)
{
y2 = Rows-1 - y1;

for (x1=0; x1 < mx; ++x1)
{
x2 = Cols-1 - x1;

p = t[y1][x1];
t[y1][x1] = t[y2][x2];
t[y2][x2] = p;
}
}


This code doesn't seem to do the center column of
a matrix whos dimensions are odd on the x dimensions...
Can any one see why? I tried I don't see it...

You probably rotate the middle twice. Try doing it by
hand and see where you screw up.

Victor
 
H

Howard

JustSomeGuy said:
mx = Cols/2;
if ((mx * 2) != Cols) // Odd.
++mx;
}

for (y1=0; y1 < Rows; ++y1)
{
y2 = Rows-1 - y1;

for (x1=0; x1 < mx; ++x1)
{
x2 = Cols-1 - x1;

p = t[y1][x1];
t[y1][x1] = t[y2][x2];
t[y2][x2] = p;
}
}


This code doesn't seem to do the center column of
a matrix whos dimensions are odd on the x dimensions...
Can any one see why? I tried I don't see it...

You're swapping the center column twice.

Here's one solution:

// rotate top half with bottom half
int y1 = 0;
int y2 = Rows-1;
for (; y1 < y2; ++y1, --y2)
{
int x2 = Columns-1;
// swap all columns
for (int x1 = 0; x1 < Columns; ++x1, --x2)
swap( t[y1,x1], t[y2,x2] );
}
// odd number of rows? rotate middle row
if (y1 == y2)
{
int x2 = Columns-1;
// only swap left with right (to prevent swapping twice)
for (int x1 = 0; x1 < x2; ++x1, --x2)
swap( t[y1,x1], t[y1,x2] );
}

-Howard

"All programmers write perfect code.
....All other programmers write crap."

"I'm never wrong.
I thought I was wrong once,
but I was mistaken."
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,577
Members
45,052
Latest member
LucyCarper

Latest Threads

Top