绘制圆弧段

时间:2012-01-17 00:57:18

标签: algorithm drawing primitive

我想知道这里是否有人可以帮助我使用一些伪代码,或者至少指出我如何在没有抗锯齿的情况下绘制圆弧段的正确方向。

3 个答案:

答案 0 :(得分:1)

圆圈上的点数公式为:

x = xcenter + radius * sin(theta)
y = ycenter + radius * cos(theta)

其中xcenterycenter是圆的中心,radius是半径,theta是角度。

您只需以足够小的步长从起始角度到结束角度迭代theta,并提取xy值以进行绘图,并记住大多数三角函数将其参数作为弧度(0到2 * PI)而非度数(0到360) - 调整您的{em>和 theta的开始和结束角度考虑到这一点。

伪代码如下所示:

def plotCirle (xc, yc, rad, start, end):
    theta = start
    while theta <= end:
        x = xc + rad * sin (theta)
        y = yc + rad * cos (theta)
        plot (x, y)
        theta = theta + 0.01

虽然您可能希望将角度标准化为介于0和2 * PI之间,然后如果前者大于后者,则交换开始和结束角度。

如果您想要更高效的代码,可以查看midpoint circle algorithm。数学比较重,并且由于你只需要一个片段(这意味着你需要知道角度,这个算法通常不需要一个完整的圆圈)而稍微复杂一点,但这可能是一个很好的起点,如果上面的简化算法不够快。

答案 1 :(得分:0)

对于仅整数圆绘图,请参阅维基百科的midpoint circle algorithm文章。它通过代码呈现了一种Bresenham线算法的圆形变体。有关中点圆算法,Bresenham圆算法和优化的第三种方法的比较(包括代码),请参阅codecircle

答案 2 :(得分:0)

 Result.X := Round( fCenter.X + cos(Angle/180*pi)* Radius);
 Result.Y := Round( fCenter.Y + sin(Angle/180*pi)* Radius);