Go to the documentation of this file.00001
00015 #include <math.h>
00016
00017 # define RpD ((2 * M_PI) / 360.)
00018 # define D2R(d) (double)(d * RpD)
00019 # define R2D(d) (double)(d / RpD)
00020
00021
00022
00035 void G_rotate_around_point(double X0, double Y0, double *X1, double *Y1,
00036 double angle)
00037 {
00038 double dx = *X1 - X0;
00039 double dy = *Y1 - Y0;
00040 double c = cos(D2R(angle));
00041 double s = sin(D2R(angle));
00042 double dx1 = dx * c - dy * s;
00043 double dy1 = dx * s + dy * c;
00044
00045 *X1 = X0 + dx1;
00046 *Y1 = Y0 + dy1;
00047 }
00048
00062 void G_rotate_around_point_int(int X0, int Y0, int *X1, int *Y1, double angle)
00063 {
00064 double x = (double)*X1;
00065 double y = (double)*Y1;
00066
00067 if (angle == 0.0)
00068 return;
00069
00070 G_rotate_around_point((double)X0, (double)Y0, &x, &y, angle);
00071
00072 *X1 = (int)floor(x + 0.5);
00073 *Y1 = (int)floor(y + 0.5);
00074 }