am 8e1f9153: am 507113a1: Fix typo in include guard macro, and some cleanups.
* commit '8e1f91538537e5a23806c163d4fa01aed7423ee8': Fix typo in include guard macro, and some cleanups.main
commit
7127873b9b
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue