43 p_a[0] = p_a[1] = p_a[2] = p_a[3] = 0.0;
53 p_initialMinGroundRangeGuess = (-0.25 * p_camera->
Samples() - 1.0)
54 * groundRangeResolution;
55 p_initialMaxGroundRangeGuess = (1.25 * p_camera->
Samples() - 1.0)
56 * groundRangeResolution;
69 double slantRange = p_a[0] + p_a[1] * dx + p_a[2] * dx * dx + p_a[3] * dx * dx * dx;
72 p_undistortedFocalPlaneX = slantRange / p_rangeSigma;
73 p_undistortedFocalPlaneY = 0;
83 p_undistortedFocalPlaneX = ux * p_rangeSigma;
84 p_undistortedFocalPlaneY = uy * p_dopplerSigma;
89 double slant = p_undistortedFocalPlaneX;
90 double minGroundRangeGuess = slant - (p_a[0] + p_initialMinGroundRangeGuess *
91 (p_a[1] + p_initialMinGroundRangeGuess * (p_a[2] +
92 p_initialMinGroundRangeGuess * p_a[3])));
93 double maxGroundRangeGuess = slant - (p_a[0] + p_initialMaxGroundRangeGuess *
94 (p_a[1] + p_initialMaxGroundRangeGuess * (p_a[2] +
95 p_initialMaxGroundRangeGuess * p_a[3])));
99 if((minGroundRangeGuess == maxGroundRangeGuess) ||
100 (minGroundRangeGuess < 0.0 && maxGroundRangeGuess < 0.0) ||
101 (minGroundRangeGuess > 0.0 && maxGroundRangeGuess > 0.0))
return false;
110 double ax = p_initialMinGroundRangeGuess;
111 double bx = p_initialMaxGroundRangeGuess;
112 double fax = minGroundRangeGuess;
113 double fbx = maxGroundRangeGuess;
120 double p, q, r, s, t;
124 if(fbx * fcx > 0.0) {
130 if(fabs(fcx) < fabs(fbx)) {
138 tol1 = 2.0 * eps * fabs(bx) + 0.5 * p_tolerance;
139 xm = 0.5 * (cx - bx);
140 if(fabs(xm) <= tol1 || fbx == 0.0) {
145 if(fabs(e) >= tol1 && fabs(fax) > fabs(fbx)) {
154 p = s * (2.0 * xm * q * (q - r) - (bx - ax) * (r - 1.0));
155 q = (q - 1.0) * (r - 1.0) * (s - 1.0);
159 t = 3.0 * xm * q - fabs(tol1 * q);
160 if(t > fabs(e * q)) t = fabs(e * q);
188 fbx = slant - (p_a[0] + bx * (p_a[1] + bx * (p_a[2] + bx * p_a[3])));
190 while(iter <= p_maxIterations);
202 for(
int i = 0; i < seq.
Size(); i++) {
204 std::vector<QString> array = seq[i];
206 utc2et_c(array[0].toAscii().data(), &et);
207 p_time.push_back(et);
222 double currentEt = p_camera->
time().
Et();
224 std::vector<double>::iterator pos = lower_bound(p_time.begin(), p_time.end(), currentEt);
226 int index = p_time.size() - 1;
227 if (currentEt <= p_time[0]) {
233 else if (currentEt >= p_time.at(index)) {
234 p_a[0] = p_a0[index];
235 p_a[1] = p_a1[index];
236 p_a[2] = p_a2[index];
237 p_a[3] = p_a3[index];
239 index = pos - p_time.begin();
240 double weight = (currentEt - p_time.at(index-1)) /
241 (p_time.at(index) - p_time.at(index-1));
242 p_a[0] = p_a0[index-1] * (1.0 - weight) + p_a0[index] * weight;
243 p_a[1] = p_a1[index-1] * (1.0 - weight) + p_a1[index] * weight;
244 p_a[2] = p_a2[index-1] * (1.0 - weight) + p_a2[index] * weight;
245 p_a[3] = p_a3[index-1] * (1.0 - weight) + p_a3[index] * weight;
253 p_rangeSigma = range_sigma;
254 p_dopplerSigma = doppler_sigma;