Lines 144-149
Link Here
|
144 |
return false; |
144 |
return false; |
145 |
} |
145 |
} |
146 |
|
146 |
|
|
|
147 |
// Transformation matrix |
148 |
// from http://support.fccps.cz/download/adv/frr/matrix_calibrator/matrix_calibrator.htm |
149 |
|
150 |
// get the average left/right X and upper/lower Y |
151 |
float x0x = ( clicked.x[UL] + clicked.x[LL] ) / 2.0 / width; |
152 |
float x0y = ( clicked.y[UL] + clicked.y[LL] ) / 2.0 / height; |
153 |
float x1x = ( clicked.x[UR] + clicked.x[LR] ) / 2.0 / width; |
154 |
float x1y = ( clicked.y[UR] + clicked.y[LR] ) / 2.0 / height; |
155 |
float y0x = ( clicked.x[UL] + clicked.x[UR] ) / 2.0 / width; |
156 |
float y0y = ( clicked.y[UL] + clicked.y[UR] ) / 2.0 / height; |
157 |
float y1x = ( clicked.x[LL] + clicked.x[LR] ) / 2.0 / width; |
158 |
float y1y = ( clicked.y[LL] + clicked.y[LR] ) / 2.0 / height; |
159 |
//printf ("ZZ: %f %f %f %f %f %f %f %f\n", x0x,x0y, x1x,x1y, y0x,y0y, y1x,y1y); |
160 |
|
161 |
//get the difference right-left X and lower-upper Y |
162 |
float dxx=x1x-x0x; |
163 |
float dxy=x1y-x0y; |
164 |
float dyx=y1x-y0x; |
165 |
float dyy=y1y-y0y; |
166 |
//printf ("ZZ: Ds %f %f %f %f\n",dxx,dxy,dyx,dyy); |
167 |
|
168 |
/* Calculation equations: |
169 |
1. x0x * a + x0y * b + c = 1/8 (the left point equation) |
170 |
2. x1x * a + x1y * b + c = 7/8 (the right point equation) |
171 |
3. a / b = dxx / dxy (tg alfa) |
172 |
Subtract 1. from 2.: |
173 |
4. (x1x - x0x) * a + (x1y - x0y) * b = 6/8 |
174 |
5. dxx * a + dxy * b = 6/8 |
175 |
Isolate (b) from 3.: |
176 |
6. b = a * dxy / dxx |
177 |
Substitute (b) in 5.: |
178 |
7. dxx * a + dxy * a * dxy / dxx = 6/8 |
179 |
Isolate (a) from 7.: |
180 |
8. a * (dxx + dxy^2 / dxx) = 6/8 |
181 |
9. a * (dxx^2 + dxy^2) / dxx = 6/8 |
182 |
10. a = 6/8 * dxx / (dxx^2 + dxy^2) !RESULT! |
183 |
Analogically for (b): |
184 |
11. b = 6/8 * dxy / (dxx^2 + dxy^2) !RESULT! |
185 |
We will get (c) substituting (a) and (b) in 1. |
186 |
For (d), (e) and (f) we use the same solution analogically. |
187 |
*/ |
188 |
|
189 |
//calculate the special sauce coefficients |
190 |
float a = 6.0/8 * (dxx / (dxx*dxx + dxy*dxy)); |
191 |
float b = 6.0/8 * (dxy / (dxx*dxx + dxy*dxy)); |
192 |
float c = 1.0/8 - a*x0x - b*x0y; |
193 |
float d = 6.0/8 * (dyx / (dyx*dyx + dyy*dyy)); |
194 |
float e = 6.0/8 * (dyy / (dyx*dyx + dyy*dyy)); |
195 |
float f = 1.0/8 - d*y0x - e*y0y; |
196 |
|
197 |
printf ("ZZ: TransformationMatrix %f %f %f %f %f %f 0 0 1\n", a, b, c, d, e, f); |
198 |
|
147 |
// new axis origin and scaling |
199 |
// new axis origin and scaling |
148 |
// based on old_axys: inversion/swapping is relative to the old axis |
200 |
// based on old_axys: inversion/swapping is relative to the old axis |
149 |
XYinfo new_axis(old_axys); |
201 |
XYinfo new_axis(old_axys); |