Links und Funktionen
Sprachumschaltung

Navigationspfad
Sie sind hier: Startseite / Probestudium / 2017 / WS I: 3D-Programmierung / Skripte / Kollision mehrerer Quader erkennen.py


Inhaltsbereich

Kollision mehrerer Quader erkennen.py

Python Source icon Kollision mehrerer Quader erkennen.py — Python Source, 2 KB (2612 bytes)

Dateiinhalt

from visual import *

#Ueberpruefen, ob zwei Quader eine Kollision bilden
#Zu Beginn sind beide Quader gruen, bei Kollision werden sie rot

#Erzeugen der Quader 
R1 = box(pos=(-5,0,0), size=(5,2,0),axis=(0,1,0), color=color.green)
R2 = box(pos=(5,0,0), size=(2,3,0), axis=(0,1,0), color=color.green)

scene.range = 10 # Skalierung wird festgelegt

#Bewegung
def move(objekt,richtung):
    objekt.pos += richtung
 
while True:
    rate(25)

    #R1 kann durch Cursortasten nach oben, unten, rechts und links bewegt werden
    if scene.kb.keys:
        zeichen = scene.kb.getkey()
        if zeichen == "up":
            move(R1,(0,1,0))
        if zeichen == "down":
            move(R1,(0,-1,0))
        if zeichen == "right":
            move(R1,(1,0,0))
        if zeichen == "left":
            move(R1,(-1,0,0))

    if(R1.axis.y == 0 and R2.axis.y == 0):
        if((R1.pos.x + R1.length/2 > R2.pos.x - R2.length/2 and
            R2.pos.x + R2.length/2 > R1.pos.x - R1.length/2 and
            R1.pos.y + R1.height/2 > R2.pos.y - R2.height/2 and
            R2.pos.y + R2.height/2 > R1.pos.y - R1.height/2)):
            R1.color = color.red
            R2.color = color.red
        else:
            R1.color = color.green
            R2.color = color.green

    if(R1.axis.x == 0 and R2.axis.y == 0):
        if((R1.pos.x + R1.height/2 > R2.pos.x - R2.length/2 and
            R2.pos.x + R2.length/2 > R1.pos.x - R1.height/2 and
            R1.pos.y + R1.length/2 > R2.pos.y - R2.height/2 and
            R2.pos.y + R2.height/2 > R1.pos.y - R1.length/2)):
            R1.color = color.red
            R2.color = color.red
        else:
            R1.color = color.green
            R2.color = color.green

    if(R1.axis.y == 0 and R2.axis.x == 0):
        if((R1.pos.x + R1.length/2 > R2.pos.x - R2.height/2 and
            R2.pos.x + R2.height/2 > R1.pos.x - R1.length/2 and
            R1.pos.y + R1.height/2 > R2.pos.y - R2.length/2 and
            R2.pos.y + R2.length/2 > R1.pos.y - R1.height/2)):
            R1.color = color.red
            R2.color = color.red
        else:
            R1.color = color.green
            R2.color = color.green

    if(R1.axis.x == 0 and R2.axis.x == 0):
        if((R1.pos.x + R1.height/2 > R2.pos.x - R2.height/2 and
            R2.pos.x + R2.height/2 > R1.pos.x - R1.height/2 and
            R1.pos.y + R1.length/2 > R2.pos.y - R2.length/2 and
            R2.pos.y + R2.length/2 > R1.pos.y - R1.length/2)):
            R1.color = color.red
            R2.color = color.red
        else:
            R1.color = color.green
            R2.color = color.green

Funktionsleiste