gpt4 book ai didi

python - 在 Pygame 中填充两个圆的交集区域

转载 作者:行者123 更新时间:2023-12-03 15:42:15 25 4
gpt4 key购买 nike

我正在处理一个 pygame 项目,但遇到了一个问题。我有两个圆圈 A 和 B,如下所示。哪些是重叠的 现在我只想填充两个圆圈共有的圆圈的一部分。有什么方法可以实现吗?
我知道我可以用红色填充圆 B,用白色填充圆 A,但是有一个特定的区域,而圆 A 超出了该区域。所以我无法实现。
此图像中提到了圆形和填充位置的图像:
enter image description here

最佳答案

创建 2 pygame.Surface 具有每像素 alpha ( pygame.SRCALPHA ) 的对象:

surf1 = pygame.Surface((500, 500), pygame.SRCALPHA)
surf2 = pygame.Surface((500, 500), pygame.SRCALPHA)
定义两个圆的中心点和半径:
pos1, rad1 = (250, 200), 100
pos2, rad2 = (250, 250), 80
用相同的颜色在 2 个表面上绘制圆圈:
pygame.draw.circle(surf1, (255, 0, 0, 255), pos1, rad1)
pygame.draw.circle(surf2, (255, 0, 0, 255), pos2, rad2)
使用混合模式 pygame.BLEND_RGBA_MIN 在另一个表面上混合一个表面:
surf1.blit(surf2, (0, 0), special_flags = pygame.BLEND_RGBA_MIN)
此时 surf1包含两个圆的交叉区域。

要获得外部部分,还需要另一个步骤。混合 surf1surf2 ,使用混合模式 pygame.BLEND_RGBA_MIN :
surf2.blit(surf1, (0, 0), special_flags = pygame.BLEND_RGBA_SUB)
现在 surf2包含圆 B 减去圆 A 后剩下的部分:


最小示例: repl.it/@Rabbid76/PyGame-CircleIntersection
import pygame

pygame.init()
window = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()

pos1, rad1 = (250, 200), 100
pos2, rad2 = (250, 250), 80

surf1 = pygame.Surface((500, 500), pygame.SRCALPHA)
surf2 = pygame.Surface((500, 500), pygame.SRCALPHA)

pygame.draw.circle(surf1, (255, 0, 0, 255), pos1, rad1)
pygame.draw.circle(surf2, (255, 0, 0, 255), pos2, rad2)

surf1.blit(surf2, (0, 0), special_flags = pygame.BLEND_RGBA_MIN)
surf2.blit(surf1, (0, 0), special_flags = pygame.BLEND_RGBA_SUB)

run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
print(pygame.key.name(event.key))

window.fill((255, 255, 255))

window.blit(surf2, (0, 0))
pygame.draw.circle(window, (128, 128, 128), pos1, rad1+1, 3)
pygame.draw.circle(window, (128, 128, 128), pos2, rad2+1, 3)

pygame.display.flip()

关于python - 在 Pygame 中填充两个圆的交集区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63058731/

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