Python pygame中具有透明性的任意多边形

Python pygame中具有透明性的任意多边形,python,pygame,Python,Pygame,我知道有pygame.draw.polygon(),但它只能处理没有alpha值的颜色。有没有一个类似的函数可以?我搜索了一下,什么也没找到,所以我试着自己写。不知何故,它偶尔会漏掉像素(值得注意的是,它只需要处理凸四边形)。这里是,为写得不好的低效代码提前道歉: def fill_quad(A、B、C、D、color=(02551000)): M=四元中心(A、B、C、D); dxA,dyA=A[0]-M[0],A[1]-M[1]; dxB,dyB=B[0]-M[0],B[1]-M[1]; d

我知道有
pygame.draw.polygon()
,但它只能处理没有alpha值的颜色。有没有一个类似的函数可以?我搜索了一下,什么也没找到,所以我试着自己写。不知何故,它偶尔会漏掉像素(值得注意的是,它只需要处理凸四边形)。这里是,为写得不好的低效代码提前道歉:

def fill_quad(A、B、C、D、color=(02551000)):
M=四元中心(A、B、C、D);
dxA,dyA=A[0]-M[0],A[1]-M[1];
dxB,dyB=B[0]-M[0],B[1]-M[1];
dxC,dyC=C[0]-M[0],C[1]-M[1];
dxD,dyD=D[0]-M[0],D[1]-M[1];
dist=最大值(数学海波(dxA,dyA),数学海波(dxB,dyB),数学海波(dxC,dyC),数学海波(dxD,dyD));
dxA,dyA,dxB,dyB,dxC,dyC,dxD,dyD=map(λd:d/dist,(dxA,dyA,dxB,dyB,dxC,dyC,dxD,dyD));
对于范围(0,int(dist)+1,1)内的i:
连接(A、B、C、D,颜色=颜色);
A=A[0]-dxA,A[1]-dyA;
B=B[0]-dxB,B[1]-dyB;
C=C[0]-dxC,C[1]-dyC;
D=D[0]-dxD,D[1]-dyD;
quad_center
返回由四个点组成的多边形的中心,
connect
连接点,如
pygame.draw.lines
,但它可以透明。问题似乎在于
dxA
dxB
等和
dyA
dyB
等(因为它们的步长太大),这就是它缺少像素的原因。问题不在于我的
connect
函数,因为我在使用pygame的内置程序时遇到了同样的问题。要在计算机上运行此功能,只需将
连接(A,B,C,D,color=color)
替换为
pygame.draw.lines(屏幕,颜色,True,(A,B,C,D))
,并将其用于
四边形中心

def中点(A、B):
返回(A[0]+B[0])/2,(A[1]+B[1])/2;
def quad_中心(A、B、C、D):
返回中点(中点(A,B),中点(C,D));
为了完整起见,这里有一个我所说的“缺少像素”的例子: 每个四边形都是用我的函数画的。你可以看到到处都是蓝色的条纹,这就是我指的


如果像这样的函数已经存在,显然我更喜欢它,但是如果没有我写的函数的任何帮助,我将不胜感激。谢谢您的帮助。

我认为这是四边形边插值的固有方式。要正确执行此操作,需要实现“标准”多边形填充算法,该算法通常沿多边形相交的每个水平扫描线对多边形的边进行插值。i、 e.δy为
1
。我不知道你的意思。你能提供一个链接吗?只要在谷歌上搜索一下。我认为这是你插值四边形边的固有方式。要正确执行此操作,需要实现“标准”多边形填充算法,该算法通常沿多边形相交的每个水平扫描线对多边形的边进行插值。i、 e.δy为
1
。我不知道你的意思。你能提供一个链接吗?只需在谷歌上搜索。