Fix typo in include guard macro, and some cleanups.

Change-Id: I455f6a52667b1c6ae5eb9f58b3494dd87eb2c3f5
main
Ken Wakasa 2012-08-13 11:36:41 +09:00
parent bcec82de66
commit 507113a1bb
1 changed files with 22 additions and 24 deletions

View File

@ -14,8 +14,8 @@
* limitations under the License. * limitations under the License.
*/ */
#ifndef LATINIME_INCREMENTAL_GEOMETRY_UTILS_H #ifndef LATINIME_GEOMETRY_UTILS_H
#define LATINIME_INCREMENTAL_GEOMETRY_UTILS_H #define LATINIME_GEOMETRY_UTILS_H
#include <cmath> #include <cmath>
@ -49,21 +49,18 @@ static inline int getDistanceInt(int x1, int y1, int x2, int y2) {
} }
static inline float getAngle(int x1, int y1, int x2, int y2) { static inline float getAngle(int x1, int y1, int x2, int y2) {
int dx = x1 - x2; const int dx = x1 - x2;
int dy = y1 - y2; const int dy = y1 - y2;
if (dx == 0 && dy == 0) { if (dx == 0 && dy == 0) {
return 0; return 0;
} }
float dxf = static_cast<float>(dx); const float dxf = static_cast<float>(dx);
float dyf = static_cast<float>(dy); const float dyf = static_cast<float>(dy);
return atan2f(dyf, dxf); return atan2f(dyf, dxf);
} }
static inline float angleDiff(float a1, float a2) { static inline float angleDiff(float a1, float a2) {
float diff = a1 - a2; const float diff = fabsf(a1 - a2);
if (diff < 0) {
diff = -diff;
}
if (diff > M_PI_F) { if (diff > M_PI_F) {
return 2.0f * M_PI_F - diff; return 2.0f * M_PI_F - diff;
} }
@ -76,32 +73,33 @@ static inline float angleDiff(float a1, float a2) {
// float B = y - y1; // float B = y - y1;
// float C = x2 - x1; // float C = x2 - x1;
// float D = y2 - y1; // float D = y2 - y1;
// return abs(A * D - C * B) / sqrt(C * C + D * D); // return fabsf(A * D - C * B) / sqrtf(C * C + D * D);
// } // }
static inline float pointToLineSegDistanceSqrFloat( static inline float pointToLineSegDistanceSqrFloat(
float x, float y, float x1, float y1, float x2, float y2) { float x, float y, float x1, float y1, float x2, float y2) {
float ray1x = x - x1; const float ray1x = x - x1;
float ray1y = y - y1; const float ray1y = y - y1;
float ray2x = x2 - x1; const float ray2x = x2 - x1;
float ray2y = y2 - y1; const float ray2y = y2 - y1;
float dotProduct = ray1x * ray2x + ray1y * ray2y; const float dotProduct = ray1x * ray2x + ray1y * ray2y;
float lineLengthSq = ray2x * ray2x + ray2y * ray2y; const float lineLengthSqr = sqrf(ray2x) + sqrf(ray2y);
float projectionLengthSq = dotProduct / lineLengthSq; const float projectionLengthSqr = dotProduct / lineLengthSqr;
float projectionX, projectionY; float projectionX;
if (projectionLengthSq < 0) { float projectionY;
if (projectionLengthSqr < 0.0f) {
projectionX = x1; projectionX = x1;
projectionY = y1; projectionY = y1;
} else if (projectionLengthSq > 1) { } else if (projectionLengthSqr > 1.0f) {
projectionX = x2; projectionX = x2;
projectionY = y2; projectionY = y2;
} else { } else {
projectionX = x1 + projectionLengthSq * ray2x; projectionX = x1 + projectionLengthSqr * ray2x;
projectionY = y1 + projectionLengthSq * ray2y; projectionY = y1 + projectionLengthSqr * ray2y;
} }
return getDistanceSqrFloat(x, y, projectionX, projectionY); return getDistanceSqrFloat(x, y, projectionX, projectionY);
} }
} // namespace latinime } // namespace latinime
#endif // LATINIME_INCREMENTAL_GEOMETRY_UTILS_H #endif // LATINIME_GEOMETRY_UTILS_H