btw. +1 for nice approach with that circle ...
do not care for number of vertexes
{ double x0=50.0,y0=50.0,r=50.0; // circle params double a,da,x,y; // [view] // my view engine stuff can skip this glview2D::_lin l; view.pic_clear(); l.col=0x00FFFFFF; // [/view] for (a=0.0;a<2.0*M_PI;) // full circle { x=x0+(r*cos(a)); y=y0+(r*sin(a)); a+=(20.0+(40.0*Random()))*M_PI/180.0; // random angle step < 20,60 > degrees // here add your x,y point to polygon // [view] // my view engine stuff can skip this l.p0=l.p1; // just add line (lust x,y and actual x,y) l.p1.p[0]=x; l.p1.p[1]=y; view.lin.add(l); // [/view] } // [view] // my view engine stuff can skip this view.lin[0].p0=l.p1; // just join first and last point in first line (was point0,point0) // [view] }
if number of vertexes is known =
N
Set random step to be on average little less then
2PI / N
for example:da=a0+(a1*Random());
a0=0.75*(2*M_PI/N)
... minimal daa1=0.40*(2*M_PI/N)
...a0+(0.5*a1)
isavg = 0.95
... is less then2PI/N
inside for add break if vertex count reach
N
. If afterfor
the vertex count is notN
then recompute all from beginning because with random numbers you cannot take it that you always hitN
vertexes this way !!!sample output from source code above
PS.
You can also use ellipse if the circle shape is not good enough
x=x0+(rx*cos(a));
y=y0+(ry*sin(a));
rx != ry