Given two Vector2s in WORLD SPACE how would i find the rotation to make the first point lookat the second one? (Basically unity transform.lookat function)
Hello Potato,
I think you “mathematically” mix up Points and Vectors.
I suggest you try to build a class with Point2 as Position and Vector2 as LookAtDirection.
Then you set the LookAtDirection of Object A to (B.X - A.X | B.Y - A.Y).
You can also normalize that LookAtDirection-Vector with a Methodcall on Vector.Normalize().
Edit:
Sorry i forgot to mention the rotation.
Therefore i would add Vector2 OldLookAtDirection,
And then you can calculate it with this simple formula:
Angle = cos^-1 (scalarproduct of Old and New / Length of New times Length of Old).
Then you know how much the Object “misslooks” the other Object
Edit: Typo
To get a lookat matrix from pointA to pointB you can use Matrix.CreateWorld. This is for 3D though, but you can just set the z-components of the vectors to 0, in which case the upVector needs to be (0,0,1):
Matrix lookat = Matrix.CreateWorld(pointA, pointB - pointA, upVector);
Subtract the difference between the 2 vector2’s into a new vector2
Normalize the new vector2
Then convert the normalised vector into radians
angleFromVector =
(float)Math.Atan2(newvector.X, -newvector.Y)
If I recall correctly you need to use negative for the y