#define FP_MIN(A, B) ((A < B) ? A : B)
#define FP_LT(A, B) ((A + PGIS_EPSILON) < B)
#define FP_LTEQ(A, B) ((A - PGIS_EPSILON) <= B)
+#define FP_GT(A, B) ((A - PGIS_EPSILON) > B)
+#define FP_GTEQ(A, B) ((A + PGIS_EPSILON) >= B)
#define FP_CONTAINS_TOP(A, X, B) (FP_LT(A, X) && FP_LTEQ(X, B))
#define FP_CONTAINS_BOTTOM(A, X, B) (FP_LTEQ(A, X) && FP_LT(X, B))
#define FP_CONTAINS_INCL(A, X, B) (FP_LTEQ(A, X) && FP_LTEQ(X, B))
*/\r
\r
// clockwise 1\r
- if(r2 < 0 && (r3 > 0 || r3 < r2))\r
+ if(FP_LT(r2, 0) && (FP_GT(r3, 0) || FP_LT(r3, r2)))\r
{\r
- sweep = (r3 > 0) ? (r3 - 2 * M_PI) : r3;\r
+ sweep = (FP_GT(r3, 0)) ? (r3 - 2 * M_PI) : r3;\r
}\r
// clockwise 2\r
- else if(r2 > 0 && r3 > 0 && r3 < r2)\r
+ else if(FP_GT(r2, 0) && FP_GT(r3, 0) && FP_LT(r3, r2))\r
{\r
- sweep = (r3 > 0) ? (r3 - 2 * M_PI) : r3;\r
+ sweep = (FP_GT(r3, 0)) ? (r3 - 2 * M_PI) : r3;\r
}\r
// counter-clockwise 4\r
- else if(r2 > 0 && (r3 < 0 || r3 > r2))\r
+ else if(FP_GT(r2, 0) && (FP_LT(r3, 0) || FP_GT(r3, r2)))\r
{\r
- sweep = (r3 < 0) ? (r3 + 2 * M_PI) : r3;\r
+ sweep = (FP_LT(r3, 0)) ? (r3 + 2 * M_PI) : r3;\r
}\r
// counter-clockwisk 5\r
- else if(r2 < 0 && r3 < 0 && r3 > r2)\r
+ else if(FP_LT(r2, 0) && FP_LT(r3, 0) && FP_GT(r3, r2))\r
{\r
- sweep = (r3 < 0) ? (r3 + 2 * M_PI) : r3;\r
+ sweep = (FP_LT(r3, 0)) ? (r3 + 2 * M_PI) : r3;\r
}\r
// clockwise invalid 3\r
- else if(r2 > 0 && (r3 > r2 || r3 < 0))\r
+ else if(FP_GT(r2, 0) && (FP_GT(r3, r2) || FP_LT(r3, 0)))\r
{\r
- sweep = (r2 > 0) ? (r2 - 2 * M_PI) : r2;\r
+ sweep = (FP_GT(r2, 0)) ? (r2 - 2 * M_PI) : r2;\r
}\r
// clockwise invalid 6\r
else\r
{\r
- sweep = (r2 < 0) ? (r2 + 2 * M_PI) : r2;\r
+ sweep = (FP_LT(r2, 0)) ? (r2 + 2 * M_PI) : r2;\r
}\r
\r
#ifdef PGIS_DEBUG\r
// determine if the extents are outside the arc\r
if(i < 4) \r
{\r
- if(sweep > 0.0)\r
+ if(FP_GT(sweep, 0.0))\r
{\r
- if(a3 < a1)\r
+ if(FP_LT(a3, a1))\r
{\r
- if(angle > (a3 + 2 * M_PI) || angle < a1) continue;\r
+ if(FP_GT(angle, (a3 + 2 * M_PI)) || FP_LT(angle, a1)) continue;\r
}\r
else\r
{\r
- if(angle > a3 || angle < a1) continue;\r
+ if(FP_GT(angle, a3) || FP_LT(angle, a1)) continue;\r
}\r
}\r
else\r
{\r
- if(a3 > a1)\r
+ if(FP_GT(a3, a1))\r
{\r
- if(angle < (a3 - 2 * M_PI) || angle > a1) continue;\r
+ if(FP_LT(angle, (a3 - 2 * M_PI)) || FP_GT(angle, a1)) continue;\r
}\r
else\r
{\r
- if(angle < a3 || angle > a1) continue;\r
+ if(FP_LT(angle, a3) || FP_GT(angle, a1)) continue;\r
}\r
}\r
}\r
#ifdef PGIS_DEBUG\r
lwnotice("lwcircle_compute_box3d: potential extreame %d (%.16f, %.16f)", i, xe, ye);\r
#endif\r
- x1 = (x1 < xe) ? x1 : xe;\r
- y1 = (y1 < ye) ? y1 : ye;\r
- x2 = (x2 > xe) ? x2 : xe;\r
- y2 = (y2 > ye) ? y2 : ye;\r
+ x1 = (FP_LT(x1, xe)) ? x1 : xe;\r
+ y1 = (FP_LT(y1, ye)) ? y1 : ye;\r
+ x2 = (FP_GT(x2, xe)) ? x2 : xe;\r
+ y2 = (FP_GT(y2, ye)) ? y2 : ye;\r
}\r
#ifdef PGIS_DEBUG\r
lwnotice("lwcircle_compute_box3d: extreames found (%.16f %.16f, %.16f %.16f)", x1, y1, x2, y2);\r
y1 = center->y + y1 * radius;\r
y2 = center->y + y2 * radius;\r
*/\r
- z1 = (p1->z < p2->z) ? p1->z : p2->z;\r
- z1 = (z1 < p3->z) ? z1 : p3->z;\r
- z2 = (p1->z > p2->z) ? p1->z : p2->z;\r
- z2 = (z2 > p3->z) ? z2 : p3->z;\r
+ z1 = (FP_LT(p1->z, p2->z)) ? p1->z : p2->z;\r
+ z1 = (FP_LT(z1, p3->z)) ? z1 : p3->z;\r
+ z2 = (FP_GT(p1->z, p2->z)) ? p1->z : p2->z;\r
+ z2 = (FP_GT(z2, p3->z)) ? z2 : p3->z;\r
\r
box = lwalloc(sizeof(BOX3D));\r
box->xmin = x1; box->xmax = x2;\r