5 vec_t vec(float x, float y)
14 vec_t vec_from_polar(float arg, float mag)
16 return vec_scala_mult(
17 vec(cosf(arg), sinf(arg)),
21 vec_t vec_from_ps(point_t p1, point_t p2)
30 float vec_arg(vec_t v)
32 return atan2f(v.y, v.x);
35 float vec_mag(vec_t v)
37 return sqrtf(v.x * v.x + v.y * v.y);
40 vec_t vec_sum(vec_t v1, vec_t v2)
49 vec_t vec_neg(vec_t v)
59 float vec_length(vec_t v)
61 return sqrtf(v.x * v.x + v.y * v.y);
64 void vec_add(vec_t *v1, vec_t v2)
70 vec_t vec_scala_mult(vec_t v, float scalar)
79 vec_t vec_entry_mult(vec_t v1, vec_t v2)
89 vec_t vec_entry_div(vec_t v1, vec_t v2)
99 float rad_to_deg(float a)
104 point_t point_mat3x3_product(point_t p, mat3x3 m)
106 /* Convert p to Homogeneous coordinates */
107 const float homo_p[3] = {p.x, p.y, 1};
109 /* Transform p with matrix m */
110 const float trans_p[3] = {
111 homo_p[0] * m.M[0][0] + homo_p[1] * m.M[0][1] + homo_p[2] * m.M[0][2],
112 homo_p[0] * m.M[1][0] + homo_p[1] * m.M[1][1] + homo_p[2] * m.M[1][2],
113 homo_p[0] * m.M[2][0] + homo_p[1] * m.M[2][1] + homo_p[2] * m.M[2][2]
116 /* Convert p back to Cartesian coordinates */
117 const point_t result_p = {
118 .x = trans_p[0] / trans_p[2],
119 .y = trans_p[1] / trans_p[2]