#include <iostream>
#include <math.h> 

struct Vector2D
{
    float x, y;
    Vector2D() : x(0), y(0) {}
    Vector2D(float x, float y) : x(x), y(y) {}
    Vector2D operator -(const Vector2D& v) const
    {
    	return (Vector2D(x - v.x, y - v.y));
    }
    Vector2D operator -(void) const
    {
    	return (Vector2D(-x, -y));
    }
    float magnitude() { return (float)sqrt(x * x + y * y); }
};

const Vector2D minimapCenter(627, 135);

float dot(const Vector2D& a, const Vector2D& b)
{
    return a.x * b.y + a.y * b.x;
}

void rotate(Vector2D& p, float theta)
{
    p.x = cos(theta) * (p.x) - sin(theta) * (p.y);
    p.y = sin(theta) * (p.x) + cos(theta) * (p.y);
}

float getTheta(const Vector2D& texCoord0, const Vector2D& texCoord1)
{
    Vector2D a(0, -1), b = texCoord0 - texCoord1;
    return atan2(a.y,a.x) - atan2(b.y,b.x);
}

Vector2D getRelativePosition(const Vector2D& texCoord0, const Vector2D& texCoord1)
{
	Vector2D p = texCoord0 - minimapCenter;
    rotate(p, getTheta(texCoord0, texCoord1));
    //p = -p;
    return p;
}

using std::cout;
using std::endl;
int main()
{
    Vector2D texCoord0(309.88147, -144.74777); // top left
    Vector2D texCoord1(305.99057, 389.2381); // bottom left
    
    cout << getTheta(texCoord0, texCoord1) << endl;
    
    Vector2D p = getRelativePosition(texCoord0, texCoord1);
    cout << "(" << p.x << ", " << p.y << ")" << endl;
    return 0;
}
