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