тут еще есть такое
|a|*|b|*sin(α) = a.x*b.y - a.y*b.x
|a|*|b|*cos(α) = a.x*b.x + a.y*b.y
tan(α) = (a.x*b.y - a.y*b.x) / (a.x*b.x + a.y*b.y)
α = atan((a.x*b.y - a.y*b.x) / (a.x*b.x + a.y*b.y))
че тут происходит?
using Vec2 = std::array<double,2>;
double f(const Vec2& a, const Vec2& b)
{
return std::atan((a[0]*b[1] - a[1]*b[0])
/ (a[0]*b[0] + a[1]*b[1]));
}
int main()
{
const double pi = std::acos(-1);
std::cout << f({1,0}, {0.5,0.5})*180./pi << '\n';
std::cout << f({1,0}, {0.5,-0.5})*180./pi << '\n';
}
45
-45