n以下の関数を題材とします。
n
nchar *trans(char *original, int width, int height) {
n double cosTH, sinTH; int x,
y, origin_x, origin_y, central_x, central_y;
n char *output; cosTH = 0.0;
sinTH = 1.0;
n
n if (width % 2 == 0 || height
% 2 == 0) return(NULL);
n central_x = (width - 1) / 2;
central_y = (height -1) / 2;
n output = (char
*)malloc(width * height * sizeof(char));
n for (y = 0; y < height;
y++) {
n for (x = 0; x
< width; x++) {
n
origin_x = (x - central_x)*cosTH + (y - central_y)*sinTH +
central_x;
n
origin_y = -(x - central_y)*sinTH + (y - central_y)*cosTH +
central_y;
n
output[width * y + x] = original[width * origin_y + origin_x];
n }
n }
n return(output); }