用pygame绘制未填充的抗锯齿圆

尼古拉斯

我正在创建一个python模块来简化Pygame,我发现它相当复杂。它具有可以启用和禁用的抗锯齿模式。

我可以使用pygame.draw轻松绘制非抗锯齿的圆

pygame.draw.circle(window, circlecolor, center, radius, 0 if filled else line_width)

但是我必须使用pygame.gfxdraw进行抗锯齿。我可以通过组合gfxdraw.aacirclefill_circle来绘制填充的抗锯齿圆,但是我不能绘制未填充的抗锯齿圆,除非它们的厚度为1像素(gfxdraw.aacircle没有厚度参数)我已经有一个功能图宽的抗锯齿线与相同

我的问题是如何创建未填充的抗锯齿圆?我发现的解决方案是通过绘制多条连接的线以形成圆形来手动绘制它们,但我不知道该怎么做,可能会有更快的解决方案我也不能为中心画一个大圆和一个较小的圆,因为中心不是透明的。

尼古拉斯

基本上,我每3°在圆的轮廓上绘制一个带有点的多边形,然后对圆的内部和外部进行绘制,然后将所有的点连接起来,就形成了一个抗锯齿的粗圆。我也用它做弧线

def arc(center, xradius, yradius, start_angle, stop_angle, color=BLACK)
    arc_length = (stop_angle - start_angle)  # Arc length
    segment_length = math.radians(3) * min(xradius, yradius)  # Length of one segment
    segment_length = max((segment_length, 2))  # Minimum length of 2

    nb_pts = int(arc_length/2*xradius*yradius / segment_length) + 1  # Nb points
    angle = arc_length / (nb_pts-1)  # Angle between each points
    points = []
    width = line_width//2  # Line thickness (half on each side of the circle)
    for i in range(nb_pts):  # Inner border
        x = round(math.cos(start_angle + angle*i) * (xradius-width) + center[0])
        y = round(-math.sin(start_angle + angle*i) * (yradius-width) + center[1])  # - is for counter clockwise
        points.append((x, y))  # Add point

    for i in range(nb_pts-1, -1, -1):  # Outer border
        x = round(math.cos(start_angle + angle*i) * (xradius+width) + center[0])
        y = round(-math.sin(start_angle + angle*i) * (yradius+width) + center[1])
        points.append((x, y))  # Add point

    polygon(points, color, True)  # True is for filled polygon

我这样调用函数以画一个改变椭圆的xradius和yradius的圆

arc(center, radius, radius, 0, 2*math.pi, color)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用pygame绘制未填充的抗锯齿圆

来自分类Dev

pygame绘制抗锯齿粗线

来自分类Dev

使用抗锯齿渲染圆或椭圆

来自分类Dev

如何向WebGL着色器绘制的圆/椭圆添加统一的宽度轮廓(使用边缘/距离抗锯齿绘制)

来自分类Dev

Pygame中的抗锯齿形状

来自分类Dev

Pygame中的抗锯齿形状

来自分类Dev

画出Xaolin Wu所描述的抗锯齿圆

来自分类Dev

画出Xaolin Wu所描述的抗锯齿圆

来自分类Dev

在Firefox中的Canvas中绘制线条时的抗锯齿

来自分类Dev

用OpenGL绘制圆

来自分类Dev

用Python绘制圆

来自分类Dev

用OpenGL绘制圆

来自分类Dev

抗锯齿JLabel

来自分类Dev

添加抗锯齿

来自分类Dev

LibGDX抗锯齿

来自分类Dev

删除图像的抗锯齿

来自分类Dev

抗锯齿JLabel

来自分类Dev

Maple Ubuntu抗锯齿

来自分类Dev

Pixelart 的抗锯齿算法

来自分类Dev

用Qt绘制特定的圆

来自分类Dev

如何在matlab中绘制一个用颜色填充的3d圆

来自分类Dev

裸露的骨骼x11如何绘制真字体或其他抗锯齿字体?

来自分类Dev

绘制裁切的图像时是否可以使用抗锯齿功能?

来自分类Dev

在开罗绘制图像时,如何禁用线性插值/平滑/抗锯齿?

来自分类Dev

在OpenGL中绘制到半透明帧缓冲区时如何抗锯齿?

来自分类Dev

Pygame:文字向SRCALPHA表面倾斜时失去抗锯齿功能

来自分类Dev

在HTML5画布中填充后的抗锯齿边缘?

来自分类Dev

Pygame文本未绘制

来自分类Dev

Pygame雪碧未绘制