naev 0.12.5
vec2.c
1/*
2 * See Licensing and Copyright notice in naev.h
3 */
4#include "vec2.h"
5
13void vec2_cset( vec2 *v, double x, double y )
14{
15 v->x = x;
16 v->y = y;
17 v->mod = MOD( x, y );
18 v->angle = ANGLE( x, y );
19}
20
29void vec2_csetmin( vec2 *v, double x, double y )
30{
31 v->x = x;
32 v->y = y;
33}
34
42void vec2_pset( vec2 *v, double mod, double angle )
43{
44 v->mod = mod;
45 v->angle = angle;
46 v->x = v->mod * cos( v->angle );
47 v->y = v->mod * sin( v->angle );
48}
49
55void vectnull( vec2 *v )
56{
57 v->x = 0.;
58 v->y = 0.;
59 v->mod = 0.;
60 v->angle = 0.;
61}
62
70double vec2_angle( const vec2 *ref, const vec2 *v )
71{
72 double x = v->x - ref->x;
73 double y = v->y - ref->y;
74 return ANGLE( x, y );
75}
76
84void vec2_cadd( vec2 *v, double x, double y )
85{
86 v->x += x;
87 v->y += y;
88 v->mod = MOD( v->x, v->y );
89 v->angle = ANGLE( v->x, v->y );
90}
91
99void vec2_padd( vec2 *v, double m, double a )
100{
101 v->x += m * cos( a );
102 v->y += m * sin( a );
103 v->mod = MOD( v->x, v->y );
104 v->angle = ANGLE( v->x, v->y );
105}
106
114void vec2_reflect( vec2 *r, const vec2 *v, const vec2 *n )
115{
116 double dot = vec2_dot( v, n );
117 r->x = v->x - ( ( 2. * dot ) * n->x );
118 r->y = v->y - ( ( 2. * dot ) * n->y );
119 r->mod = MOD( r->x, r->y );
120 r->angle = ANGLE( r->x, r->y );
121}
122
130double vec2_dot( const vec2 *a, const vec2 *b )
131{
132 return a->x * b->x + a->y * b->y;
133}
134
143void vec2_uv( double *u, double *v, const vec2 *source,
144 const vec2 *reference_vector )
145{
146 vec2 unit_parallel, unit_perpendicular;
147
148 vec2_uv_decomp( &unit_parallel, &unit_perpendicular, reference_vector );
149
150 *u = vec2_dot( source, &unit_parallel );
151 *v = vec2_dot( source, &unit_perpendicular );
152}
153
161void vec2_uv_decomp( vec2 *u, vec2 *v, const vec2 *reference_vector )
162{
163 vec2_pset( u, 1, VANGLE( *reference_vector ) );
164 vec2_pset( v, 1, VANGLE( *reference_vector ) + M_PI_2 );
165}
Represents a 2d vector.
Definition vec2.h:45
double y
Definition vec2.h:47
double x
Definition vec2.h:46