#include <stdio.h> #include <math.h> #include "vec2.h" vec2 vec2_create(double x_, double y_) { vec2 v = {.x = x_, .y = y_}; return v; } vec2 vec2_create_zero() { return vec2_create(0.0, 0.0); } vec2 vec2_add(vec2 lhs, vec2 rhs) { return vec2_create( lhs.x + rhs.x, lhs.y + rhs.y ); } vec2 vec2_sub(vec2 lhs, vec2 rhs) { return vec2_create( lhs.x - rhs.x, lhs.y - rhs.y ); } vec2 vec2_mul(double scalar, vec2 lhs) { return vec2_create( scalar * lhs.x, scalar * lhs.y ); } double vec2_dot(vec2 lhs, vec2 rhs) { return lhs.x * rhs.x + lhs.y * rhs.y; } double vec2_norm_sqr(vec2 v) { return vec2_dot(v, v); } double vec2_norm(vec2 v) { return sqrt(vec2_norm_sqr(v)); } vec2 vec2_normalize(vec2 v) { double norm = vec2_norm(v); return vec2_mul(1.0 / norm, v); } bool vec2_is_approx_equal(vec2 lhs, vec2 rhs, double eps) { return vec2_norm(vec2_sub(lhs, rhs)) < eps; } void vec2_print(vec2 v) { printf("x = %g, y = %g\n", v.x, v.y); }