0

我必须用下面的代码画一个圆(检查点是否在圆上)。

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;
   }
}

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

谢谢你。

4

2 回答 2

3

您正在整数算术中完成所有这些操作;(对于固定的)很少有整数解。x^2 + y^2 == r^2r

我建议改用中点圆算法之类的东西。

于 2013-02-01T12:39:34.687 回答
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);
}

这种范围是他们在天气预报中绘制等值线的方式,但也适用于圆圈。

于 2013-02-01T15:14:13.990 回答