155 {
156 CHECK_NOTNULL(pitch);
157 CHECK_NOTNULL(cam_height);
158 int i = 0;
159 int length = static_cast<int>(pitch_height_inlier_tracks_.size() / 3);
160 if (!length) {
161 *pitch = *cam_height = 0.0f;
162 return;
163 } else if (length == 1) {
164 *pitch = pitch_height_inlier_tracks_[0];
165 *cam_height = pitch_height_inlier_tracks_[1];
166 return;
167 }
168
169 float ph[2] = {0};
170 float w = 0.0f;
171 for (i = head_; i < length; i++) {
172 w = pitch_height_inlier_tracks_.at(i * 3 + 2);
173 weight_.at(i) = const_weight_temporal_.at(i) * w;
174 }
175
176
177 float accm_wei =
algorithm::ISum(weight_.data() + head_, (length - head_));
178
179 ph[0] = ph[1] = 0.0f;
180 for (i = head_; i < length; i++) {
181 w = weight_.at(i);
182 int i3 = i * 3;
183 ph[0] += pitch_height_inlier_tracks_.at(i3) * w;
184 ph[1] += pitch_height_inlier_tracks_.at(i3 + 1) * w;
185 }
188 *pitch = ph[0];
189 *cam_height = ph[1];
190}
float IDiv(float a, float b)