codex
Loading...
Searching...
No Matches
rotate.hpp
Go to the documentation of this file.
1#ifndef CODEX_ARITHMETIC_FOLDING_ROTATE_HPP
2#define CODEX_ARITHMETIC_FOLDING_ROTATE_HPP
3
4#include <cmath>
5
6namespace codex {
7
8struct vec2 { float x, y; };
9struct vec3 { float x, y, z; };
10
11vec2 rotate(const vec2 &v, float a);
12
13vec3 operator*(const vec3 &v, float s);
14vec3 operator*(float s, const vec3 &v);
15vec3 operator+(const vec3 &v0, const vec3 &v1);
16vec3 operator-(const vec3 &v0, const vec3 &v1);
17
19vec3 rotate(const vec3 &v, float sin, float cos, const vec3 &n);
21vec3 rotate_y(const vec3 &v, float sin, float cos);
22
23vec3 f(const vec3 &v);
24vec3 g(const vec3 &v);
25
26namespace detail {
27
28inline float dot(const vec3 &v0, const vec3 &v1)
29 { return v0.x * v1.x + v0.y * v1.y + v0.z * v1.z; }
30
31inline vec3 cross(const vec3 &v0, const vec3 &v1) {
32 return {
33 v0.y * v1.z - v0.z * v1.y,
34 v0.z * v1.x - v0.x * v1.z,
35 v0.x * v1.y - v0.y * v1.x};
36}
37
38}
39
40inline vec2 rotate(const vec2 &v, float sin, float cos)
41 { return {v.x * cos - v.y * sin, v.x * sin + v.y * cos}; }
42
43inline vec3 operator*(const vec3 &v0, float s)
44 { return {v0.x * s, v0.y * s, v0.z * s}; }
45inline vec3 operator*(float s, const vec3 &v0) { return v0 * s; }
46inline vec3 operator+(const vec3 &v0, const vec3 &v1)
47 { return {v0.x + v1.x, v0.y + v1.y, v0.z + v1.z}; }
48inline vec3 operator-(const vec3 &v0, const vec3 &v1)
49 { return {v0.x - v1.x, v0.y - v1.y, v0.z - v1.z}; }
50
51inline vec3 rotate(const vec3 &v, float sin, float cos, const vec3 &n) {
52 const auto proj = n * detail::dot(n, v);
53 const auto d = v - proj;
54 const auto rot = cos * d + sin * detail::cross(n, d);
55 return proj + rot;
56}
57
58inline vec3 rotate_y(const vec3 &v, float sin, float cos) {
59 const vec2 ret = rotate({v.z, v.x}, sin, cos);
60 return {ret.y, v.y, ret.x};
61}
62
63}
64
65#endif
#define f(x)
Definition 5.c:2
float dot(const vec3 &v0, const vec3 &v1)
Definition rotate.hpp:28
vec3 cross(const vec3 &v0, const vec3 &v1)
Definition rotate.hpp:31
Definition rotate.hpp:6
vec3 rotate_y(const vec3 &v, float sin, float cos)
Rotates v around the y axis.
Definition rotate.hpp:58
vec3 operator+(const vec3 &v0, const vec3 &v1)
Definition rotate.hpp:46
void rotate(I b, I n, S e)
Definition rotate.hpp:22
vec3 operator*(const vec3 &v, float s)
Definition rotate.hpp:43
vec3 operator-(const vec3 &v0, const vec3 &v1)
Definition rotate.hpp:48
Definition power.hpp:8
Definition popcnt.cpp:98
#define g(a)
Definition std1.c:2
Definition mult_inh.c:25
Definition rotate.hpp:8
float x
Definition rotate.hpp:8
float y
Definition rotate.hpp:8
Definition rotate.hpp:9
float y
Definition rotate.hpp:9
float x
Definition rotate.hpp:9
float z
Definition rotate.hpp:9
Definition mult_inh.c:28
constexpr fixed_string s
Definition test.cpp:6