PostGIS  2.4.9dev-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 737 of file lwgeodetic.c.

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

Referenced by ptarray_area_sphere().

738 {
739  double angle_a, angle_b, angle_c;
740  double area_radians = 0.0;
741  int side;
742  GEOGRAPHIC_EDGE e;
743 
744  angle_a = sphere_angle(b,a,c);
745  angle_b = sphere_angle(a,b,c);
746  angle_c = sphere_angle(b,c,a);
747 
748  area_radians = angle_a + angle_b + angle_c - M_PI;
749 
750  /* What's the direction of the B/C edge? */
751  e.start = *a;
752  e.end = *b;
753  side = edge_point_side(&e, c);
754 
755  /* Co-linear points implies no area */
756  if ( side == 0 )
757  return 0.0;
758 
759  /* Add the sign to the area */
760  return side * area_radians;
761 }
Two-point great circle segment from a to b.
Definition: lwgeodetic.h:61
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:717
GEOGRAPHIC_POINT start
Definition: lwgeodetic.h:63
GEOGRAPHIC_POINT end
Definition: lwgeodetic.h:64
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:690
Here is the call graph for this function:
Here is the caller graph for this function: