회전

언어/c언어2017. 8. 10. 17:23

# include <stdio.h>

# include <string.h>

# include <stdlib.h>

# define R 3

# define C 3

typedef struct RotateMatrix

{

int mat[R][C];

/*

0 0 0

0 0 0

0 0 0

*/

}RotateMat, *ptrRotateMat;


// prototype of function

// 1.

ptrRotateMat creatNode();

// 2.

void matElementSet(RotateMat**);

// 3.

void matPrintf(RotateMat**);

// 4.

void matRotate(RotateMat**, int);


int main(void)

{

ptrRotateMat matrix = NULL;

matrix = creatNode();

matElementSet(&matrix);

matPrintf(&matrix);

matRotate(&matrix, 3);

matPrintf(&matrix);

return 0;

} // end of main function

ptrRotateMat creatNode()

{

ptrRotateMat mat = NULL;

mat = (ptrRotateMat)malloc(sizeof(RotateMat));

if (mat == NULL)

{

exit(1);

}

else

// mat != NULL

{

memset(mat, 0, sizeof(RotateMat));

return mat;

}

} // end of creatNode function

void matElementSet(RotateMat** M)

{

int tmpRow = 0;

int tmpCol = 0; 

int element = 1;

int tmpCnt = 0;

while (tmpCnt != 9)

{

(*M)->mat[tmpRow][tmpCol] = element++;

tmpCol++;

if (tmpCol == 3)

{

tmpRow++;

tmpCol = 0;

}

tmpCnt++;

}

} // end of matElementSet function 


void matPrintf(RotateMat** M)

{

int i, j; // index

for (i = 0; i < R; i++)

{

for (j = 0; j < C; j++)

{

printf("%d ", (*M)->mat[i][j]);

}

printf("\n");

}

} // end of matPrintf function


void matRotate(RotateMat** M, int RotateCnt)

{

int i, j, k; // index

int temp[R][C] = { 0, }; // 3by3

for (i = 0; i < RotateCnt; i++)

{

// 행렬 보존 

for (j = 0; j < R; j++)

{

for (k = 0; k < C; k++)

{

temp[j][k] = (*M)->mat[j][k];

}

}

// 행렬 회전 

for (j = 0; j < R; j++)

{

for (k = 0; k < C; k++)

{

if (j == 0) {

(*M)->mat[j][k] = temp[k][2];

/*

[0, 0] = [0, 2]

[0, 1] = [1, 2]

[0, 2] = [2, 2]

*/

}

else if (j == 1) {

(*M)->mat[j][k] = temp[k][j];

/*

[1, 0] = [0, 1]

[1, 1] = [1, 1]

[1, 2] = [2, 1]

*/

}

else { // j == 2

(*M)->mat[j][k] = temp[k][0];

/*

[2, 0] = [0, 0] 값 보존

[2, 1] = [1, 0] 값 보존

[2, 2] = [2, 0] 값 보존

*/

}

}

}

}

}

'언어 > c언어' 카테고리의 다른 글

두 점 사이의 거리  (0) 2017.08.25
c언어 affine  (0) 2017.08.23
메모리 누수 확인  (0) 2017.08.08
자료형(sizeof)  (0) 2017.08.08
오버 플로우 됬는지 확인하는 코드 (c언어)  (0) 2017.07.30