6 Vec vec(float x, float y)
15 Vec vec_from_polar(float arg, float mag)
17 return vec_scala_mult(
18 vec(cosf(arg), sinf(arg)),
22 Vec vec_from_ps(Point p1, Point p2)
33 return atan2f(v.y, v.x);
38 return sqrtf(v.x * v.x + v.y * v.y);
41 Vec vec_sum(Vec v1, Vec v2)
60 float vec_length(Vec v)
62 return sqrtf(v.x * v.x + v.y * v.y);
65 void vec_add(Vec *v1, Vec v2)
71 Vec vec_scala_mult(Vec v, float scalar)
80 Vec vec_entry_mult(Vec v1, Vec v2)
90 Vec vec_entry_div(Vec v1, Vec v2)
100 float rad_to_deg(float a)
105 Point point_mat3x3_product(Point 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 result_p = {
119 .x = trans_p[0] / trans_p[2],
120 .y = trans_p[1] / trans_p[2]
128 const float l = vec_length(v);
131 return vec(0.0f, 0.0f);
134 return vec(v.x / l, v.y / l);