PostGIS  2.5.0dev-r@@SVN_REVISION@@

◆ sphere_signed_area()

static double sphere_signed_area ( const GEOGRAPHIC_POINT a,
const GEOGRAPHIC_POINT b,
const GEOGRAPHIC_POINT c 
)
static

Computes the spherical area of a triangle.

If C is to the left of A/B, the area is negative. If C is to the right of A/B, the area is positive.

Parameters
aThe first triangle vertex.
bThe second triangle vertex.
cThe last triangle vertex.
Returns
the signed area in radians.

Definition at line 710 of file lwgeodetic.c.

References edge_point_side(), GEOGRAPHIC_EDGE::end, sphere_angle(), and GEOGRAPHIC_EDGE::start.

Referenced by ptarray_area_sphere().

711 {
712  double angle_a, angle_b, angle_c;
713  double area_radians = 0.0;
714  int side;
715  GEOGRAPHIC_EDGE e;
716 
717  angle_a = sphere_angle(b,a,c);
718  angle_b = sphere_angle(a,b,c);
719  angle_c = sphere_angle(b,c,a);
720 
721  area_radians = angle_a + angle_b + angle_c - M_PI;
722 
723  /* What's the direction of the B/C edge? */
724  e.start = *a;
725  e.end = *b;
726  side = edge_point_side(&e, c);
727 
728  /* Co-linear points implies no area */
729  if ( side == 0 )
730  return 0.0;
731 
732  /* Add the sign to the area */
733  return side * area_radians;
734 }
Two-point great circle segment from a to b.
Definition: lwgeodetic.h:56
static double sphere_angle(const GEOGRAPHIC_POINT *a, const GEOGRAPHIC_POINT *b, const GEOGRAPHIC_POINT *c)
Returns the angle in radians at point B of the triangle formed by A-B-C.
Definition: lwgeodetic.c:690
GEOGRAPHIC_POINT start
Definition: lwgeodetic.h:58
GEOGRAPHIC_POINT end
Definition: lwgeodetic.h:59
static int edge_point_side(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p)
Returns -1 if the point is to the left of the plane formed by the edge, 1 if the point is to the righ...
Definition: lwgeodetic.c:663
Here is the call graph for this function:
Here is the caller graph for this function: