PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ lwpoly_construct_circle()

LWPOLY * lwpoly_construct_circle ( int32_t  srid,
double  x,
double  y,
double  radius,
uint32_t  segments_per_quarter,
char  exterior 
)
extern

Definition at line 120 of file lwpoly.c.

121{
122 const uint32_t segments = 4*segments_per_quarter;
123 double theta;
124 LWPOLY *lwpoly;
125 POINTARRAY *pa;
126 POINT4D pt;
127 uint32_t i;
128
129 if (segments_per_quarter == 0)
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 theta = 2*M_PI / segments;
142
144 pa = ptarray_construct_empty(LW_FALSE, LW_FALSE, segments + 1);
145
146 if (exterior)
147 radius *= sqrt(1 + pow(tan(theta/2), 2));
148
149 for (i = 0; i <= segments; i++)
150 {
151 pt.x = x + radius*sin(i * theta);
152 pt.y = y + radius*cos(i * theta);
154 }
155
156 lwpoly_add_ring(lwpoly, pa);
157 return lwpoly;
158}
#define LW_FALSE
Definition liblwgeom.h:94
POINTARRAY * ptarray_construct_empty(char hasz, char hasm, uint32_t maxpoints)
Create a new POINTARRAY with no points.
Definition ptarray.c:59
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,...
Definition ptarray.c:147
#define LW_TRUE
Return types for functions with status returns.
Definition liblwgeom.h:93
void void lwerror(const char *fmt,...) __attribute__((format(printf
Write a notice out to the error handler.
int lwpoly_add_ring(LWPOLY *poly, POINTARRAY *pa)
Add a ring to a polygon.
Definition lwpoly.c:247
LWPOLY * lwpoly_construct_empty(int32_t srid, char hasz, char hasm)
Definition lwpoly.c:161
double x
Definition liblwgeom.h:414
double y
Definition liblwgeom.h:414

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().

Here is the call graph for this function:
Here is the caller graph for this function: