91{
92 double rad = angleDegrees * M_PI / 180.0;
93 double cosA = std::cos(rad);
94 double sinA = std::sin(rad);
95
97 double len = normalizedAxis.
length();
98 if (len != 0)
99 normalizedAxis = normalizedAxis / len;
100
101 double ux = normalizedAxis.
x;
102 double uy = normalizedAxis.
y;
103 double uz = normalizedAxis.
z;
104
106 rotated.
x = (cosA + (1 - cosA) * ux * ux) * v.
x
107 + ((1 - cosA) * ux * uy - sinA * uz) * v.
y
108 + ((1 - cosA) * ux * uz + sinA * uy) * v.
z;
109
110 rotated.y = ((1 - cosA) * uy * ux + sinA * uz) * v.
x
111 + (cosA + (1 - cosA) * uy * uy) * v.
y
112 + ((1 - cosA) * uy * uz - sinA * ux) * v.
z;
113
114 rotated.z = ((1 - cosA) * uz * ux - sinA * uy) * v.
x
115 + ((1 - cosA) * uz * uy + sinA * ux) * v.
y
116 + (cosA + (1 - cosA) * uz * uz) * v.
z;
117
118 return rotated;
119}