81 | | == The forward calculation == |
82 | | |
83 | | On the wiki page describing [wiki:DevWikiAffineParameters the reverse operation], a transform is developed which supports: |
84 | | |
85 | | 1. scaling |
86 | | 1. clockwise rotation around the origin |
87 | | 1. shearing parallel to the x axis |
88 | | 1. shearing parallel to the y axis |
89 | | |
90 | | For the sake of consistency, we will use this same model and attempt to calculate the conceptually meaningful parameters from the transform coefficients. The above model produced the following equations: |
91 | | |
92 | | * a,,11,, = o,,11,, = s,,x,, ( (1 + k,,x,, k,,y,,) cosθ + k,,y,, sinθ ) |
93 | | * a,,12,, = o,,12,, = s,,x,, ( k,,x,, cosθ + sinθ ) |
94 | | * a,,13,, = t,,x,, |
95 | | * a,,21,, = o,,21,, = s,,y,, ( -(1 + k,,x,, k,,y,,) sinθ + k,,y,, cosθ ) |
96 | | * a,,22,, = o,,22,, = s,,y,, ( - k,,x,, sinθ + cosθ ) |
97 | | * a,,23,, = t,,y,, |
98 | | |
99 | | where: |
100 | | * s,,x,, : scale factor in x direction |
101 | | * s,,y,, : scale factor in y direction |
102 | | * t,,x,, : offset in x direction |
103 | | * t,,y,, : offset in y direction |
104 | | * θ : angle of rotation clockwise around origin |
105 | | * k,,x,, : shearing parallel to x axis |
106 | | * k,,y,, : shearing parallel to y axis |
107 | | |
108 | | == Solving for the meaningful parameters == |
109 | | |
110 | | The objective of this page is to find a way to determine values for s,,x,,, s,,y,,, t,,x,,, t,,y,,, θ, k,,x,,, and k,,y,, if all we know is a,,11,,,a,,12,,, ... a,,23,,. Clearly, t,,x,, and t,,y,, are trivial cases, because we can just use the values for a,,13,, and a,,23,, respectively. This leaves us with these four equations: |
111 | | |
112 | | * a,,11,, = o,,11,, = s,,x,, ( (1 + k,,x,, k,,y,,) cosθ + k,,y,, sinθ ) |
113 | | * a,,12,, = o,,12,, = s,,x,, ( k,,x,, cosθ + sinθ ) |
114 | | * a,,21,, = o,,21,, = s,,y,, ( -(1 + k,,x,, k,,y,,) sinθ + k,,y,, cosθ ) |
115 | | * a,,22,, = o,,22,, = s,,y,, ( - k,,x,, sinθ + cosθ ) |
116 | | |
117 | | Unfortunately, these four equations contain five unknowns: s,,x,,, s,,y,,, θ, k,,x,,, and k,,y,,. This represents an ill-posed problem and forces us to simplify. Let's assume that there is no shearing. We are just going to declare upfront that k,,x,,=0 and k,,y,,=0. Remember that we did that because if we're wrong it will screw everything up. This makes the above into: |
118 | | |
119 | | * a,,11,, = o,,11,, = s,,x,, cosθ |
120 | | * a,,12,, = o,,12,, = s,,x,, sinθ |
121 | | * a,,21,, = o,,21,, = - s,,y,, sinθ |
122 | | * a,,22,, = o,,22,, = s,,y,, cosθ |
123 | | |
124 | | Now we're on a roll. We can knock out s,,x,, and s,,y,, very easily: |
125 | | |
126 | | * a,,11,,^2^ + a,,12,,^2^ |
127 | | * = s,,x,,^2^ cos^2^θ + s,,x,,^2^ sin^2^θ |
128 | | * = s,,x,,^2^ (cos^2^θ + sin^2^θ) |
129 | | * = s,,x,,^2^ (1) |
130 | | * a,,21,,^2^ + a,,22,,^2^ |
131 | | * = (- s,,y,,)^2^ sin^2^θ + s,,y,,^2^ cos^2^θ |
132 | | * = s,,y,,^2^ (sin^2^θ + cos^2^θ) |
133 | | * = s,,y,,^2^ (1) |
134 | | |
135 | | Rewriting as a "final result", this gives: |
136 | | |
137 | | * s,,x,,^2^ = a,,11,,^2^ + a,,12,,^2^ |
138 | | * s,,y,,^2^ = a,,21,,^2^ + a,,22,,^2^ |
139 | | |
140 | | == Checking against wikipedia == |
141 | | |
142 | | Checking this against the wikipedia page on the [http://en.wikipedia.org/wiki/World_file world file], which lists: |
143 | | * "pixel width" = s,,x,, = sqrt(A^2^ + D^2^) = sqrt(a,,11,,^2^ + a,,21,,^2^) |
144 | | * "pixel height" = s,,y,, = sqrt(B^2^ + E^2^) = sqrt(a,,12,,^2^ + a,,22,,^2^) |
145 | | |
146 | | Clearly, this does not match the answer on our page. The three possibilities are: we made a mistake; they made a mistake; or no one made a mistake, but we're using different models... The world file page does not declare it's assumptions about what operations are performed, or which order they are performed in. The world file page, however, also defines it's parameter A (for us: a,,11,,) as "pixel size in x direction". |
147 | | |
148 | | '''NOTE: If the order of the model operations changes, in particular if scaling and rotation are swapped, then these pages match wikipedia.''' However, the math on wikipedia is unsourced. Since it has become clear that order is vital, and it is by no means guaranteed that all software performs uses the same model, it is probably vital to go out and determine which software performs the calculations which way before we do anything else. |