Detekcia kolisie - kruh a obdlznik (python)

Programovacie jazyky, rady, poradňa...
xadman
Medium Star
Medium Star
Príspevky: 305
Registrovaný: 09 mar 2011, 17:02

Detekcia kolisie - kruh a obdlznik (python)

Príspevok od používateľa xadman »

Zdravím,
potrebujem zistiť, akou najľahšou cestou sa dá zistiť kolísia medzi kruhom a obdĺžnikom. Zatiaľ čo som hľadal na nete, našiel som toto

Kód: Vybrať všetko

for block in self.blocks:
                if self.collideBlock(block):
                    self.blocks.remove(block)
                    self.ball.speedy *= -1
    
def clamp(self, x, left, right):
    if x < left:
        return left
    elif x > right:
        return right
    else:
        return x
        
def collideBlock(self, block):
    rect = block.image.get_rect()
    x = self.clamp(self.ball.x, rect.left, rect.right)
    y = self.clamp(self.ball.y, rect.bottom, rect.top)
    distX = self.ball.x - x;
    distY = self.ball.y - y;

    if distX ** 2 + distY ** 2 < self.ball.radius ** 2:
        return True
    else:
        return False
V poli self.blocks sú všetky bloky, ktorá majú svoju x, y, width, height

Robí to blbosti, a zakaždým vracia False. A záhadou je, že po 10 sekundách vráti true a všetky bloky v hre vymaže.

Ďakujem za rady.

//autoeditácia príspevku (28 Jan 2012, 18:25)
Stačil by mi aj nejaký vzorec, ktorým by som to najľahšie vypočítal. Zatiaľ to robím primitývnym spôsobom

Kód: Vybrať všetko

if ((self.ball.x >= block.x) and (self.ball.x <= block.x) and
            (self.ball.y >= block.y) and (self.ball.y <= block.y + block.height)):
Napísať odpoveď