#pragma once #include "Vec.hpp" namespace tp { template bool intersectLines2D(const Vec2& p1, const Vec2& p2, const Vec2& v1, const Vec2& v2, Vec2* out) { auto a1 = p2.x - p1.x; auto a2 = p2.y - p1.y; auto b1 = v2.x - v1.x; auto b2 = v2.y - v1.y; auto c1 = v1.x - p1.x; auto c2 = v1.y - p1.y; auto det = a2 * b1 - a1 * b2; auto t1 = ( -b2 * c1 + b1 * c2 ) / det; auto t2 = ( -a2 * c1 + a1 * c2 ) / det; if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) { if (out != nullptr) { out->x = p1.x + (a1 * t1); out->y = p1.y + (a2 * t1); } return true; } return false; } }