我试图用SDL2绘制一个实心圆,并使用毕达哥拉斯(Pythagoras)计算点。
问题是,根据计算X坐标还是Y坐标,我得到的结果不同。有人可以解释我为什么在计算X坐标时未正确绘制圆吗?
200和500是硬编码位置。
void DrawBall()
{
for(int y = 1; y <= this->iRadius; y++)
{
int x = sqrt((this->iRadius * this->iRadius) - (y * y));
SDL_RenderDrawLine(this->renderer, 200 - x, 200 + y , 200 + x, 200 + y);
SDL_RenderDrawLine(this->renderer, 200 - x, 200 - y + 1, 200 + x, 200 - y + 1);
}
for (int x = 1; x <= this->iRadius; x++) {
int y = sqrt((this->iRadius * this->iRadius) - (x * x));
SDL_RenderDrawLine(this->renderer, 500 - x, 500 + y, 500 + x, 500 + y);
SDL_RenderDrawLine(this->renderer, 500 - x, 500 - y + 1, 500 + x, 500 - y + 1);
}
}
答案 0 :(得分:2)
如果输出第二种情况的x / y值和半径10,则对于小x会看到密集的y值,对于大x会看到稀疏的y值。有些线(y = 9)被绘制了很多次,根本没有绘制一些水平线(这里y = 1,2,5)
android:isIndicator=""
因此水平线图显示了此类图片。但是您可以绘制垂直线-在这种情况下,您将填满整个圆圈。 (我在代码中省略了+1)。
还要注意,对于半径为R的圆,您应该绘制9.9 9.8 9.5 9.1 8.6 8.0 7.1 6.0 4.3 0
线,而不是2*r+1
。
2*r