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

2024-05-28 23:44:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我可以使用游戏机.draw

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

但我得用pygfxdraw游戏进行抗锯齿处理。我可以通过组合gfxdraw.aa圆圈填充的圆但我不能绘制没有填充的抗锯齿圆,除非它们的厚度为1像素(gfxdraw.aa圆圈没有thickness参数)我已经有了一个绘制粗反锯齿线的函数,它与this相同

我的问题是如何创建未填充的抗锯齿圆?我发现的解决方案是通过绘制多条相连的线来手工绘制圆,但我不知道怎么做,而且可能有一个更快的解决方案。我也不能为中心画一个大圆圈和一个小圆圈,因为中心是不透明的。在


Tags: 模块模式绘制解决方案window中心pygameaa
1条回答
网友
1楼 · 发布于 2024-05-28 23:44:41

基本上,我画了一个多边形,每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

我调用这个函数来画一个圆,改变椭圆的x半径和y半径

^{pr2}$

相关问题 更多 >

    热门问题