gpt4 book ai didi

c# - 什么算法用于计算具有浮点半径的圆?

转载 作者:行者123 更新时间:2023-11-28 03:00:32 25 4
gpt4 key购买 nike

midpoint circle algorithm非常适合计算半径为整数的圆。

void CircleOptimized(int xc, int yc, int r, int color) {
unsigned int x= r, y= 0;//local coords
int cd2= 0; //current distance squared - radius squared
if (!r) return;
drawpixel(xc-r, yc, color);
drawpixel(xc+r, yc, color);
drawpixel(xc, yc-r, color);
drawpixel(xc, yc+r, color);
while (x > y) { //only formulate 1/8 of circle
cd2-= (--x) - (++y);
if (cd2 < 0) cd2+=x++;
drawpixel(xc-x, yc-y, color);//upper left left
drawpixel(xc-y, yc-x, color);//upper upper left
drawpixel(xc+y, yc-x, color);//upper upper right
drawpixel(xc+x, yc-y, color);//upper right right
drawpixel(xc-x, yc+y, color);//lower left left
drawpixel(xc-y, yc+x, color);//lower lower left
drawpixel(xc+y, yc+x, color);//lower lower right
drawpixel(xc+x, yc+y, color);//lower right right
}
}

比如传入r=1r=2时输出分别如下:

.....  .XXX.
..X.. X...X
.X.X. X...X
..X.. X...X
..... .XXX.
r=1 r=2

但是,我还需要在 r=1r=2 之间执行几个步骤。也许(假设)r=1.33r=1.66 可能看起来像这样:

.....  .....  ..X..  .XXX.
..X.. .XXX. .X.X. X...X
.X.X. .X.X. X...X X...X
..X.. .XXX. .X.X. X...X
..... ..... ..X.. .XXX.
r=1.0 r=1.3 r=1.6 r=2.0

但是,当我尝试调整上述算法以使用浮点运算(有或没有舍入)时,它失去了对称性并生成了不连续的路径(导致一些非常奇怪的形状)。

是否有更适合我目的的算法?

最佳答案

如果您只对简单的分数(如 4/3 和 5/3)感兴趣,我会过采样(即使用子像素,这里每个像素 9 个子像素,因此计算半径为 4 和 5 个子像素的圆)和然后从子像素中推断出像素的良好值。如果您推断出除 ON 之外的其他内容,则表示您正在执行抗锯齿。

关于c# - 什么算法用于计算具有浮点半径的圆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20949650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com