LWDEBUG(2, "lwcircle_segmentize called. ");
radius = lwcircle_center(p1, p2, p3, ¢er);
-
- LWDEBUGF(3, "lwcircle_segmentize, (%.16f, %.16f) radius=%.16f", center->x, center->y, radius);
-
if (radius < 0)
{
+ /* No center because points are colinear */
+ LWDEBUGF(3, "lwcircle_segmentize, (NULL) radius=%.16f", radius);
+
return NULL;
}
+ LWDEBUGF(3, "lwcircle_segmentize, (%.16f, %.16f) radius=%.16f", center->x, center->y, radius);
+
a1 = atan2(p1->y - center->y, p1->x - center->x);
a2 = atan2(p2->y - center->y, p2->x - center->x);
a3 = atan2(p3->y - center->y, p3->x - center->x);
getPoint4d_p(icurve->points, i, p3);
tmp = lwcircle_segmentize(p1, p2, p3, perQuad);
- LWDEBUGF(3, "lwcurve_segmentize: generated %d points", tmp->npoints);
+ if (tmp)
+ {
+ LWDEBUGF(3, "lwcurve_segmentize: generated %d points", tmp->npoints);
- for (j = 0; j < tmp->npoints; j++)
+ for (j = 0; j < tmp->npoints; j++)
+ {
+ getPoint4d_p(tmp, j, p4);
+ dynptarray_addPoint4d(ptarray, p4, 1);
+ }
+ lwfree(tmp);
+ }
+ else
{
- getPoint4d_p(tmp, j, p4);
- dynptarray_addPoint4d(ptarray, p4, 1);
+ LWDEBUG(3, "lwcurve_segmentize: points are colinear, returning curve points as line");
+
+ for (j = i - 1 ; j <= i ; j++)
+ {
+ getPoint4d_p(icurve->points, j, p4);
+ dynptarray_addPoint4d(ptarray, p4, 1);
+ }
}
- lwfree(tmp);
+
}
oline = lwline_construct(icurve->SRID, NULL, ptarray_clone(ptarray->pa));