用毕达哥拉斯方程画一个圆圈

时间:2013-02-01 12:37:50

标签: c++ math geometry trigonometry

我必须使用以下代码绘制一个圆圈 (检查点是否在圆圈上)。

int rad=10;
// i=x,j=y
for (int j=ymid-rad;j<=ymid+rad;j++){
   for (int i=xmid-rad;i<=xmid+rad;i++){
      if (((i-xmid)*(i-xmid)+(j-ymid)*(j-ymid)) == rad*rad)
         Image1->Canvas->Pixels[i][j]=clRed;
   }
}

然而,它只绘制了圆圈的几个点。 我做错了什么?

谢谢。

2 个答案:

答案 0 :(得分:3)

你在整数算术中做了所有这些;有very few integer solutionsx^2 + y^2 == r^2(对于固定的r)。

我建议使用类似midpoint circle algorithm的内容。

答案 1 :(得分:0)

基于范围的版本可以这样工作:

bool RangeCheck(float val, float r1, float r2) {
   return val >= r1 && val <= r2;
}
bool Circle(float x, float y, float rad) {
   return RangeCheck(sqrtf(x*x+y*y), rad-0.8, rad+0.8);
}
bool CircleWithCenter(float x, float y, float cx, float cy, float rad) {
   x-=cx; y-=cy;
   return Circle(x,y,rad);
}

这种范围是他们如何在天气预报中绘制等值线,但也适用于圈子。