PostGIS  2.5.0dev-r@@SVN_REVISION@@
LWPOLY* lwpoly_construct_circle ( int  srid,
double  x,
double  y,
double  radius,
uint32_t  segments_per_quarter,
char  exterior 
)

Definition at line 120 of file lwpoly.c.

References LW_FALSE, LW_TRUE, lwerror(), lwpoly_add_ring(), lwpoly_construct_empty(), ptarray_append_point(), ptarray_construct_empty(), POINT4D::x, and POINT4D::y.

Referenced by ST_MinimumBoundingCircle(), and test_lwpoly_construct_circle().

121 {
122  const uint32_t segments = 4*segments_per_quarter;
123  const double theta = 2*M_PI / segments;
124  LWPOLY *lwpoly;
125  POINTARRAY *pa;
126  POINT4D pt;
127  uint32_t i;
128 
129  if (segments_per_quarter < 1)
130  {
131  lwerror("Need at least one segment per quarter-circle.");
132  return NULL;
133  }
134 
135  if (radius < 0)
136  {
137  lwerror("Radius must be positive.");
138  return NULL;
139  }
140 
141  lwpoly = lwpoly_construct_empty(srid, LW_FALSE, LW_FALSE);
142  pa = ptarray_construct_empty(LW_FALSE, LW_FALSE, segments + 1);
143 
144  if (exterior)
145  radius *= sqrt(1 + pow(tan(theta/2), 2));
146 
147  for (i = 0; i <= segments; i++)
148  {
149  pt.x = x + radius*sin(i * theta);
150  pt.y = y + radius*cos(i * theta);
151  ptarray_append_point(pa, &pt, LW_TRUE);
152  }
153 
154  lwpoly_add_ring(lwpoly, pa);
155  return lwpoly;
156 }
double x
Definition: liblwgeom.h:351
POINTARRAY * ptarray_construct_empty(char hasz, char hasm, uint32_t maxpoints)
Create a new POINTARRAY with no points.
Definition: ptarray.c:70
int lwpoly_add_ring(LWPOLY *poly, POINTARRAY *pa)
Add a ring to a polygon.
Definition: lwpoly.c:245
unsigned int uint32_t
Definition: uthash.h:78
int ptarray_append_point(POINTARRAY *pa, const POINT4D *pt, int allow_duplicates)
Append a point to the end of an existing POINTARRAY If allow_duplicate is LW_FALSE, then a duplicate point will not be added.
Definition: ptarray.c:156
#define LW_FALSE
Definition: liblwgeom.h:76
#define LW_TRUE
Return types for functions with status returns.
Definition: liblwgeom.h:75
LWPOLY * lwpoly_construct_empty(int srid, char hasz, char hasm)
Definition: lwpoly.c:159
tuple x
Definition: pixval.py:53
double y
Definition: liblwgeom.h:351
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
tuple y
Definition: pixval.py:54

Here is the call graph for this function:

Here is the caller graph for this function: