gpt4 book ai didi

python - 旋转时检测碰撞

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:43 25 4
gpt4 key购买 nike

我有一个用 pygame 表示的正方形链。我有一些代码可以让我旋转部分链,如下所示。

#!/usr/bin/python
import pygame

def draw(square):
(x,y) = square
pygame.draw.rect(screen, black, (100+x*20,100+y*20,20,20), 1)

def rotate(chain, index, direction):
(pivotx, pivoty) = chain[index]
if (direction == 1):
newchain = chain[:index]+[(y-pivoty+pivotx, (x-pivotx)+pivoty) for (x,y) in chain[index:]]
else:
newchain = chain[:index]+[(y-pivoty+pivotx, -(x-pivotx)+pivoty) for (x,y) in chain[index:]]
return newchain

pygame.init()

size = [600, 600]
screen = pygame.display.set_mode(size)
white = (255,255,255)
black = (0,0,0)

n = 20
chain = [(i,0) for i in xrange(n)]

screen.fill(white)
for square in chain:
draw(square)

pygame.display.flip()
raw_input("Press Enter to continue...")
newchain = rotate(chain, 5, 1)
print chain
print newchain
screen.fill(white)
for square in newchain:
draw(square)

pygame.display.flip()
raw_input("Press Enter to continue...")

screen.fill(white)
newchain = rotate(newchain, 10,0)
for square in newchain:
draw(square)

pygame.display.flip()
raw_input("Press Enter to continue...")
pygame.quit()

rotate 函数获取链中一个方 block 的索引,并将该方 block 之后的整个链旋转 90 度,以初始方 block 为轴。问题是这是为了模仿一个物理玩具,所以不允许它与自己发生碰撞。我可以检查旋转后两个正方形是否在彼此之上,但如何确保它们在旋转期间不会暂时发生碰撞?

最佳答案

听起来您已经知道如何在旋转后知道它们是否重叠,除非我误解了。如果是这种情况,那么通过在您的理解末尾添加一个检查,定义一个函数来回答该问题会相对容易,因为链中存在潜在的轮换:

if (direction == 1):
newchain = chain[:index]+[(y-pivoty+pivotx, (x-pivotx)+pivoty) for (x,y) in chain[index:] if not overlapping(x, y, pivotx, pivoty)]
else:
newchain = chain[:index]+[(y-pivoty+pivotx, -(x-pivotx)+pivoty) for (x,y) in chain[index:] if not overlapping(x, y, pivotx, pivoty)]

当然还有一些依赖:

def overlapping(x, y, px, py):
if (some logic that determins if this is bad):
raise Exception('Overlapping')
return True

你需要做一些有用的事情,但至少这会在你处理它时检查每个方 block ,并立即突破而不是等到整个旋转之后才能验证它是好的。

关于python - 旋转时检测碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389710/

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