我必须使用以下代码绘制一个圆圈 (检查点是否在圆圈上)。
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;
}
}
然而,它只绘制了圆圈的几个点。 我做错了什么?
谢谢。
答案 0 :(得分:3)
你在整数算术中做了所有这些;有very few integer solutions到x^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);
}
这种范围是他们如何在天气预报中绘制等值线,但也适用于圈子。