/* 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*/
{