读书人

c++怎么遍历一个圆弧上的所有点

发布时间: 2012-05-22 18:18:54 作者: rapoo

c++如何遍历一个圆弧上的所有点
如题,在c++中,知道圆心坐标.半径.起点坐标和终点坐标,如何遍历从起点坐标开始逆时针方向到终点坐标的所有点啊?
不要涉及弧度
坐等高人给思路

[解决办法]
这是一个错误的想法,你想要让计算机去做一个永远也没法做完的事情。

再短的弧,也是拥有无限多个点的。
[解决办法]
这个你要看源码是怎样实现的,数学上圆上的点是无限的,但计算机上圆上的点是有限的
[解决办法]
啥意思?三角函数是C语言标准库的一部分吧?
或者楼主想要的是圆弧的栅格化?

[解决办法]
楼主好牛,
小弟认为,知道了圆心坐标.半径.起点坐标和终点坐标在根据像素的大小,就可以得到一个变量。其实这个圆弧上所有的点就是一个数列。
愚见: 将起始点(A)和终点(C)的垂直平分线看做Y轴(交点B
,圆心看做原点。然后将AB平分得到一个点(E)而必然关于y轴对称的点(f)一是在这个圆弧上的
如此无限递归下去就可以取到无数个点。不过在计算机中无限的递归下去是不允许的,看你的需求。可以决定递归多少次
[解决办法]

探讨

引用:
这个你要看源码是怎样实现的,数学上圆上的点是无限的,但计算机上圆上的点是有限的

偶说的遍历所有点只是宏观上的说法,你也可以理解为在显示器能显示的范围下遍历圆弧上10000个点,这样就有数量了,要如何遍历呢?

[解决办法]
C/C++ code
//知道圆心坐标.半径.起点角度和终点角度,如何遍历从起点像素开始逆时针方向到终点像素的所有像素?#include <stdio.h>#include <math.h>#define MAXR 2048.0int 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#endifvoid 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;        }    }}
[解决办法]
通常都是用画折线的方式来画圆的。比如规定每5度或是2度画一条直线,用来连接圆弧上的两个点,合起来就是个圆了——看起来是。

只要角度选得足够小,再大的圆也能这样画出来。

读书人网 >C++

热点推荐