c++如何遍历一个圆弧上的所有点

风追叶飘零 2012-05-14 01:43:36
如题,在c++中,知道圆心坐标.半径.起点坐标和终点坐标,如何遍历从起点坐标开始逆时针方向到终点坐标的所有点啊?
不要涉及弧度
坐等高人给思路
...全文
775 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
风追叶飘零 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 9 楼 的回复:
C/C++ code
//知道圆心坐标.半径.起点角度和终点角度,如何遍历从起点像素开始逆时针方向到终点像素的所有像素?
#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,o……
[/Quote]

老大,答非所问,按照弧度来计算的不是需求的东西.
赵4老师 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
C/C++ code
//知道圆心坐标.半径.起点角度和终点角度,如何遍历从起点像素开始逆时针方向到终点像素的所有像素?
#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;……
[/Quote]
给的分略嫌低。
muyi66 2012-05-14
  • 打赏
  • 举报
回复
通常都是用画折线的方式来画圆的。比如规定每5度或是2度画一条直线,用来连接圆弧上的两个点,合起来就是个圆了——看起来是。

只要角度选得足够小,再大的圆也能这样画出来。
赵4老师 2012-05-14
  • 打赏
  • 举报
回复
//知道圆心坐标.半径.起点角度和终点角度,如何遍历从起点像素开始逆时针方向到终点像素的所有像素?
#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;
}
}
}
nice_cxf 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

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

偶说的遍历所有点只是宏观上的说法,你也可以理解为在显示器能显示的范围下遍历圆弧上10000个点,这样就有数量了,要如何遍历呢?
[/Quote]
你没看懂我的意思,实际上弧计算机也是一段一段画的,你知道源码实现上这段弧有多少个点么?假定有1500个,你想遍历其中1000个,你怎么实现?不对应源码,你怎么可能遍历其中的点
web前端执行者 2012-05-14
  • 打赏
  • 举报
回复
楼主好牛,
小弟认为,知道了圆心坐标.半径.起点坐标和终点坐标在根据像素的大小,就可以得到一个变量。其实这个圆弧上所有的点就是一个数列。
愚见: 将起始点(A)和终点(C)的垂直平分线看做Y轴(交点B
,圆心看做原点。然后将AB平分得到一个点(E)而必然关于y轴对称的点(f)一是在这个圆弧上的
如此无限递归下去就可以取到无数个点。不过在计算机中无限的递归下去是不允许的,看你的需求。可以决定递归多少次
风追叶飘零 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
这个你要看源码是怎样实现的,数学上圆上的点是无限的,但计算机上圆上的点是有限的
[/Quote]
偶说的遍历所有点只是宏观上的说法,你也可以理解为在显示器能显示的范围下遍历圆弧上10000个点,这样就有数量了,要如何遍历呢?
风追叶飘零 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
这是一个错误的想法,你想要让计算机去做一个永远也没法做完的事情。

再短的弧,也是拥有无限多个点的。
[/Quote]
我是想用opengl画出的,这个点数可以一个定值,比如说1000,但是需要尽可能的平均分布在圆弧上,这样就可以
jiandingzhe 2012-05-14
  • 打赏
  • 举报
回复
啥意思?三角函数是C语言标准库的一部分吧?
或者楼主想要的是圆弧的栅格化?
nice_cxf 2012-05-14
  • 打赏
  • 举报
回复
这个你要看源码是怎样实现的,数学上圆上的点是无限的,但计算机上圆上的点是有限的
赵4老师 2012-05-14
  • 打赏
  • 举报
回复
知道圆心坐标.半径.起点角度和终点角度,如何遍历从起点像素开始逆时针方向到终点像素的所有像素?
muyi66 2012-05-14
  • 打赏
  • 举报
回复
这是一个错误的想法,你想要让计算机去做一个永远也没法做完的事情。

再短的弧,也是拥有无限多个点的。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧