6 vec_t vec(float x, float y)
15 vec_t vec_from_polar(float arg, float mag)
17 return vec_scala_mult(
18 vec(cosf(arg), sinf(arg)),
22 vec_t vec_from_ps(point_t p1, point_t p2)
31 float vec_arg(vec_t v)
33 return atan2f(v.y, v.x);
36 float vec_mag(vec_t v)
38 return sqrtf(v.x * v.x + v.y * v.y);
41 vec_t vec_sum(vec_t v1, vec_t v2)
50 vec_t vec_neg(vec_t v)
60 float vec_length(vec_t v)
62 return sqrtf(v.x * v.x + v.y * v.y);
65 void vec_add(vec_t *v1, vec_t v2)
71 vec_t vec_scala_mult(vec_t v, float scalar)
80 vec_t vec_entry_mult(vec_t v1, vec_t v2)
90 vec_t vec_entry_div(vec_t v1, vec_t v2)
100 float rad_to_deg(float a)
105 point_t point_mat3x3_product(point_t p, mat3x3 m)
107 /* Convert p to Homogeneous coordinates */
108 const float homo_p[3] = {p.x, p.y, 1};
110 /* Transform p with matrix m */
111 const float trans_p[3] = {
112 homo_p[0] * m.M[0][0] + homo_p[1] * m.M[0][1] + homo_p[2] * m.M[0][2],
113 homo_p[0] * m.M[1][0] + homo_p[1] * m.M[1][1] + homo_p[2] * m.M[1][2],
114 homo_p[0] * m.M[2][0] + homo_p[1] * m.M[2][1] + homo_p[2] * m.M[2][2]
117 /* Convert p back to Cartesian coordinates */
118 const point_t result_p = {
119 .x = trans_p[0] / trans_p[2],
120 .y = trans_p[1] / trans_p[2]
126 vec_t vec_norm(vec_t v)
128 const float l = vec_length(v);
131 return vec(0.0f, 0.0f);
134 return vec(v.x / l, v.y / l);