PostGIS  2.3.8dev-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 706 of file lwgeodetic.c.

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

Referenced by ptarray_area_sphere().

707 {
708  double angle_a, angle_b, angle_c;
709  double area_radians = 0.0;
710  int side;
711  GEOGRAPHIC_EDGE e;
712 
713  angle_a = sphere_angle(b,a,c);
714  angle_b = sphere_angle(a,b,c);
715  angle_c = sphere_angle(b,c,a);
716 
717  area_radians = angle_a + angle_b + angle_c - M_PI;
718 
719  /* What's the direction of the B/C edge? */
720  e.start = *a;
721  e.end = *b;
722  side = edge_point_side(&e, c);
723 
724  /* Co-linear points implies no area */
725  if ( side == 0 )
726  return 0.0;
727 
728  /* Add the sign to the area */
729  return side * area_radians;
730 }
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:686
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:659
Here is the call graph for this function:
Here is the caller graph for this function: