Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws2223:klasse_cubesector_matplotlib
import Ball
GREEN = (50, 205, 50)
wall=Ball.Ball(1,GREEN,2,700,400,300,3) #wall formal als Teilchen definiert. Behebt mglw. einige Kollisionsfehler, mehr Tests notwendig
 
class Cubesector:
    def __init__(self, center, length):
 
        self.center = center
        self.length = length
        self.balls = []
 
    def subdivide(self):
        '''
        Teilt den Würfel in 8 neue, gleich große Würfel auf und sammelt diese in einer Liste
        '''
        x, y, z = self.center
        l = self.length / 2
        subcubes_list = [
            Cubesector((x - l/2, y - l/2, z - l/2), l),
            Cubesector((x + l/2, y - l/2, z - l/2), l),
            Cubesector((x - l/2, y + l/2, z - l/2), l),
            Cubesector((x + l/2, y + l/2, z - l/2), l),
            Cubesector((x - l/2, y - l/2, z + l/2), l),
            Cubesector((x + l/2, y - l/2, z + l/2), l),
            Cubesector((x - l/2, y + l/2, z + l/2), l),
            Cubesector((x + l/2, y + l/2, z + l/2), l),
        ]
        return subcubes_list
 
    def get_subcube(self, ball):
        '''
        Vergleicht Position eines Punktes und des Mittelpunktes und gibt einen Integer von 0-7 aus,
        der den zugehörigen subcube repräsentiert
        '''
        x,y,z = ball.position[0], ball.position[1], ball.position[2] 
        cx, cy, cz = self.center
 
        # Position des Punktes relativ zum Mittelpunkt des Würfels
        dx, dy, dz = x - cx, y - cy, z - cz
 
        #bit-Manipulation, um sich sehr viele if-Abfragen zu sparen
        i = (dx > 0) << 2 | (dy > 0) << 1 | (dz > 0)
 
        return i
 
    def clear(self):
        '''löscht die Zuordnung'''
        self.balls.clear()
 
    def move_ball(self,G):
        ''' Bewegung und Kollision aller Teilchen'''
        for ball in self.balls:
            ball.handle_border_collision(wall)
            for i in range(self.balls.index(ball) + 1, len(self.balls)):
                ball.handle_collision(self.balls[i],wall)
            ball.vel_vec[2] -= G*ball.zeitschritt
            ball.move()
ws2223/klasse_cubesector_matplotlib.txt · Zuletzt geändert: 2023/03/28 17:45 von Jakob_Hoffmann