How to convert points between two coordinate systems with different rotations

Imagine two coordinate systems layed on top of each other, with a rotation and scale difference between the two:

The problem is to convert a point from the non-rotated system to the other. What we do have, are four corner points forming a rectangle, with coordinates known for both systems at each point. We also know the rotation difference, and I think I at least should know the scale difference too. How do I convert a point from the non-rotated system to the rotated system? I have Unity3D at use.

Extra points for clarity in math :)

PS: I'm writing this really late, going to edit later for more clarity.

Answers


Some linear algebra does the trick:

Express each operation as a matrix and matrix multiply those to combine them into a single resulting matrix (for efficiency).

If translation is involved you need to add a dimension to your matrices, see homogenous coordinates.

The reason is that the mappings are affine ones then, not linear ones. You can ignore the extra dimension in the end result. It is just a nice way to embed affine mappings into linear ones, so the algebra is easier.

Example

M = M_trans * M_rot * M_scale
x' = M x

The order here is right to left: vector x is first scaled, then rotated, then translated into vector x'. (Using column vectors).

Hints on the matrices: Rotation Matrix, Scaling Matrix

For deriving 2D formulas when given 3D ones: either keep z = 0 or delete the 3rd row and 3rd column from each matrix.


Need Your Help

Email notification with every new article in a wordpress site

wordpress email plugins notifications

i was looking for a way to include some plugin or something like that in my wordpress site. This "plugin" send a mail (to specific contacts) every time i create a new content in my website (event,

Abstract classes and interface

java interface abstract-class

In an Interface by default the data member are static and final.