3601 double furthest_angle = 0.0;
3602 double cap_angle = 0.0;
3604 double lon0 = -M_PI, lon1 = M_PI;
3608 if (!gbox_geocentric || !gbox_planar)
3610 lwerror(
"Null pointer passed to %s", __func__);
3614 #define CORNER_SET(ii, xx, yy, zz) { \
3615 corners[ii].x = gbox_geocentric->xx; \
3616 corners[ii].y = gbox_geocentric->yy; \
3617 corners[ii].z = gbox_geocentric->zz; \
3637 for (uint32_t i = 0; i < 8; i++)
3640 cap_center.
x += corners[i].
x;
3641 cap_center.
y += corners[i].
y;
3642 cap_center.
z += corners[i].
z;
3651 for (uint32_t i = 0; i < 8; i++)
3653 double angle =
vector_angle(&cap_center, &(corners[i]));
3654 if (angle > furthest_angle)
3655 furthest_angle = angle;
3657 cap_angle = furthest_angle;
3666 lat0 = cap_center_g.
lat - cap_angle;
3667 if (lat0 <= -M_PI_2)
3674 lat1 = cap_center_g.
lat + cap_angle;
3681 if (!all_longitudes)
3694 double sin_a = sin(cap_angle);
3695 double sin_c = cos(cap_center_g.
lat);
3698 double angle_A = asin(sin_a / sin_c);
3699 lon0 = remainder(cap_center_g.
lon - angle_A, 2 * M_PI);
3700 lon1 = remainder(cap_center_g.
lon + angle_A, 2 * M_PI);
#define FLAGS_SET_GEODETIC(flags, value)
#define LW_TRUE
Return types for functions with status returns.
#define FLAGS_SET_M(flags, value)
#define FLAGS_SET_Z(flags, value)
void normalize(POINT3D *p)
Normalize to a unit vector.
void cart2geog(const POINT3D *p, GEOGRAPHIC_POINT *g)
Convert cartesian coordinates on unit sphere to spherical coordinates.
#define CORNER_SET(ii, xx, yy, zz)
double vector_angle(const POINT3D *v1, const POINT3D *v2)
Angle between two unit vectors.
void void lwerror(const char *fmt,...) __attribute__((format(printf
Write a notice out to the error handler.
Point in spherical coordinates on the world.