GRASS 8 Programmer's Manual
8.5.0(2026)-8d6ceba290
Toggle main menu visibility
Loading...
Searching...
No Matches
rotate.c
Go to the documentation of this file.
1
/*!
2
* \file lib/gis/rotate.c
3
*
4
* \brief GIS Library - rotate
5
*
6
* (C) 2001-2014 by the GRASS Development Team
7
*
8
* This program is free software under the GNU General Public
9
* License (>=v2). Read the file COPYING that comes with GRASS
10
* for details.
11
*
12
* \author Hamish Bowman, Glynn Clements
13
*/
14
15
#include <math.h>
16
17
#define RpD ((2 * M_PI) / 360.)
/* radians/degree */
18
#define D2R(d) (double)(d * RpD)
/* degrees->radians */
19
#define R2D(d) (double)(d / RpD)
/* radians->degrees */
20
21
/*!
22
* \brief Rotate point (double version)
23
*
24
* Given a point, angle, and origin, rotate the point around the origin
25
* by the given angle. Coordinates and results are double prec floating point.
26
*
27
* \param X0 X component of origin (center of circle)
28
* \param Y0 Y component of origin (center of circle)
29
* \param[out] X1 X component of point to be rotated (variable is modified!)
30
* \param[out] Y1 Y component of point to be rotated (variable is modified!)
31
* \param angle in degrees, measured CCW from east
32
*/
33
void
G_rotate_around_point
(
double
X0,
double
Y0,
double
*X1,
double
*Y1,
34
double
angle)
35
{
36
double
dx = *X1 - X0;
37
double
dy = *Y1 - Y0;
38
double
c = cos(
D2R
(angle));
39
double
s = sin(
D2R
(angle));
40
double
dx1 = dx * c - dy * s;
41
double
dy1 = dx * s + dy * c;
42
43
*X1 = X0 + dx1;
44
*Y1 = Y0 + dy1;
45
}
46
47
/*!
48
* \brief Rotate point (int version)
49
*
50
* Given a point, angle, and origin, rotate the point around the origin
51
* by the given angle. Coordinates are given in integer and results are rounded
52
* back to integer.
53
*
54
* \param X0 X component of origin (center of circle)
55
* \param Y0 Y component of origin (center of circle)
56
* \param[out] X1 X component of point to be rotated (variable is modified!)
57
* \param[out] Y1 Y component of point to be rotated (variable is modified!)
58
* \param angle in degrees, measured CCW from east
59
*/
60
void
G_rotate_around_point_int
(
int
X0,
int
Y0,
int
*X1,
int
*Y1,
double
angle)
61
{
62
double
x
= (double)*X1;
63
double
y = (double)*Y1;
64
65
if
(angle == 0.0)
66
return
;
67
68
G_rotate_around_point
((
double
)X0, (
double
)Y0, &
x
, &y, angle);
69
70
*X1 = (int)floor(
x
+ 0.5);
71
*Y1 = (int)floor(y + 0.5);
72
}
D2R
#define D2R(d)
Definition
rotate.c:18
G_rotate_around_point_int
void G_rotate_around_point_int(int X0, int Y0, int *X1, int *Y1, double angle)
Rotate point (int version).
Definition
rotate.c:60
G_rotate_around_point
void G_rotate_around_point(double X0, double Y0, double *X1, double *Y1, double angle)
Rotate point (double version).
Definition
rotate.c:33
x
#define x
gis
rotate.c
Generated on
for GRASS 8 Programmer's Manual by
1.17.0