我必须用下面的代码画一个圆(检查点是否在圆上)。
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;
}
}然而,它只绘制了圆的几个点。我做错了什么?
谢谢。
发布于 2013-02-01 20:39:35
所有这些都是在整数运算中完成的;有very few integer solutions到x^2 + y^2 == r^2 (对于固定的r)。
我建议使用像这样的东西。
发布于 2013-02-01 23:14:14
基于范围的版本的工作方式如下:
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);
}这种范围是他们在天气预报中绘制等值线的方式,但也适用于圆。
https://stackoverflow.com/questions/14646486
复制相似问题