Refactor a section of icvRotatingCalipers to work around a GCC bug
https://bugs.launchpad.net/ubuntu/+source/gcc-4.9/+bug/1474304
This commit is contained in:
parent
190d00ea3e
commit
e1be6d0888
@ -184,24 +184,28 @@ static void rotatingCalipers( const Point2f* points, int n, int mode, float* out
|
||||
|
||||
/* compute cosine of angle between calipers side and polygon edge */
|
||||
/* dp - dot product */
|
||||
float dp0 = base_a * vect[seq[0]].x + base_b * vect[seq[0]].y;
|
||||
float dp1 = -base_b * vect[seq[1]].x + base_a * vect[seq[1]].y;
|
||||
float dp2 = -base_a * vect[seq[2]].x - base_b * vect[seq[2]].y;
|
||||
float dp3 = base_b * vect[seq[3]].x - base_a * vect[seq[3]].y;
|
||||
float dp[4] = {
|
||||
+base_a * vect[seq[0]].x + base_b * vect[seq[0]].y,
|
||||
-base_b * vect[seq[1]].x + base_a * vect[seq[1]].y,
|
||||
-base_a * vect[seq[2]].x - base_b * vect[seq[2]].y,
|
||||
+base_b * vect[seq[3]].x - base_a * vect[seq[3]].y,
|
||||
};
|
||||
|
||||
float cosalpha = dp0 * inv_vect_length[seq[0]];
|
||||
float maxcos = cosalpha;
|
||||
float maxcos = dp[0] * inv_vect_length[seq[0]];
|
||||
|
||||
/* number of calipers edges, that has minimal angle with edge */
|
||||
int main_element = 0;
|
||||
|
||||
/* choose minimal angle */
|
||||
cosalpha = dp1 * inv_vect_length[seq[1]];
|
||||
maxcos = (cosalpha > maxcos) ? (main_element = 1, cosalpha) : maxcos;
|
||||
cosalpha = dp2 * inv_vect_length[seq[2]];
|
||||
maxcos = (cosalpha > maxcos) ? (main_element = 2, cosalpha) : maxcos;
|
||||
cosalpha = dp3 * inv_vect_length[seq[3]];
|
||||
maxcos = (cosalpha > maxcos) ? (main_element = 3, cosalpha) : maxcos;
|
||||
for ( i = 1; i < 4; ++i )
|
||||
{
|
||||
float cosalpha = dp[i] * inv_vect_length[seq[i]];
|
||||
if (cosalpha > maxcos)
|
||||
{
|
||||
main_element = i;
|
||||
maxcos = cosalpha;
|
||||
}
|
||||
}
|
||||
|
||||
/*rotate calipers*/
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user