64,685
社区成员
发帖
与我相关
我的任务
分享
//知道圆心坐标.半径.起点角度和终点角度,如何遍历从起点像素开始逆时针方向到终点像素的所有像素?
#include <stdio.h>
#include <math.h>
#define MAXR 2048.0
int xi,yi,xL,yL;
double xd,yd;
double sa,ea,ga,a;
double ox,oy;
double r;
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
void main() {
while (1) {
printf("Input ox oy r sa ea:");
fflush(stdout);
rewind(stdin);
if (5==scanf("%lf%lf%lf%lf%lf",&ox,&oy,&r,&sa,&ea)) {
if (-MAXR< ox && ox< MAXR
&& -MAXR< oy && oy< MAXR
&& 0.0< r && r< MAXR
&& 0.0<=sa && sa<=360.0
&& 0.0<=ea && ea<=360.0
&& sa< ea) break;
else {
printf("Input Invalid! MAXR==%d\n"
" -MAXR< ox && ox< MAXR \n"
"&& -MAXR< oy && oy< MAXR \n"
"&& 0.0< r && r< MAXR \n"
"&& 0.0<=sa && sa<=360.0 \n"
"&& 0.0<=ea && ea<=360.0 \n"
"&& sa< ea\n"
);
}
}
}
sa=sa*M_PI/180.0;
ea=ea*M_PI/180.0;
ga=1.0/(r*M_PI*2.0);
xL=(int)MAXR;
yL=(int)MAXR;
for (a=sa;a<ea;a+=ga) {
//printf("a=%lg\n",a);
xd=r*cos(a)+ox;
yd=r*sin(a)+oy;
//printf("xd,yd=%lg,%lg\n",xd,yd);
xi=(int)floor(xd);
yi=(int)floor(yd);
//printf("xi,yi=%d,%d\n",xi,yi);
if (xi!=xL || yi!=yL) {
printf("%5d,%5d\n",xi,yi);
xL=xi;
yL=yi;
}
}
}