naev 0.12.6
vec2.h
1/*
2 * See Licensing and Copyright notice in naev.h
3 */
4#pragma once
5
7#include <math.h>
9
10#define VX( v ) ( ( v ).x )
11#define VY( v ) ( ( v ).y )
12#define VMOD( v ) ( ( v ).mod )
13#define VANGLE( v ) ( ( v ).angle )
14
15#define MOD( x, y ) \
16 ( hypot( \
17 ( x ), \
18 ( y ) ) )
19#define ANGLE( x, y ) \
20 ( atan2( y, x ) )
21
22#define vec2_dist( v, u ) \
23 MOD( ( v )->x - ( u )->x, \
24 ( v )->y - ( u )->y )
25#define vec2_dist2( v, u ) \
26 ( ( ( v )->x - ( u )->x ) * ( ( v )->x - ( u )->x ) + \
27 ( ( v )->y - ( u )->y ) * ( ( v )->y - ( u )->y ) )
28#define vec2_odist( v ) \
29 MOD( ( v )->x, \
30 ( v )->y )
31#define vec2_odist2( v ) \
32 ( ( v )->x * ( v )->x + \
33 ( v )->y * ( v )->y )
35
36/*
37 * Update options.
38 */
39#define SOLID_UPDATE_RK4 0
40#define SOLID_UPDATE_EULER 1
41
45typedef struct vec2_ {
46 double x;
47 double y;
48 double mod;
49 double angle;
50} vec2;
51
52/*
53 * vector manipulation
54 */
55void vec2_cset( vec2 *v, double x, double y );
56void vec2_csetmin( vec2 *v, double x,
57 double y ); /* does not set mod nor angle */
58void vec2_pset( vec2 *v, double mod, double angle );
59void vectnull( vec2 *v );
60double vec2_angle( const vec2 *ref, const vec2 *v );
61void vec2_cadd( vec2 *v, double x, double y );
62void vec2_padd( vec2 *v, double m, double a );
63void vec2_reflect( vec2 *r, const vec2 *v, const vec2 *n );
64double vec2_dot( const vec2 *a, const vec2 *b );
65void vec2_uv( double *u, double *v, const vec2 *source, const vec2 *reference );
66void vec2_uv_decomp( vec2 *u, vec2 *v, const vec2 *reference );
Represents a 2d vector.
Definition vec2.h:45
double mod
Definition vec2.h:48
double y
Definition vec2.h:47
double angle
Definition vec2.h:49
double x
Definition vec2.h:46