Extra functies voor VPython voor het web

def wall_collide(w, obj):
    """w is a wall
    obj is a moving object
    returns True (and reflects obj.vel) if it collides...
      + ALSO: runs obj.pos = obj.pos - obj.vel*dt to "undo" the collision
    returns False (w/o changing obj) if there's no collision
    all y components are ignored throughout!
    """
    b = obj  # heeft nu de naam b, maar moet obj zijn!!
    wpos_noy = vector(w.pos)
    wpos_noy.y = 0.0
    waxis_noy = vector(w.axis)
    waxis_noy.y = 0.0
    waxis_norm = norm(waxis_noy)
    wperp_norm = rotate(waxis_norm, radians(90), vector(0, 1, 0))
    bpos_noy = vector(b.pos)
    bpos_noy.y = 0.0
    bdiff_noy = bpos_noy - wpos_noy
    bvel_noy = vector(b.vel)
    bvel_noy.y = 0.0
    b_axial = dot(waxis_norm, bdiff_noy)
    b_perp = dot(wperp_norm, bdiff_noy)
    b_vel_axial = dot(waxis_norm, bvel_noy)
    b_vel_perp = dot(wperp_norm, bvel_noy)

    w_length = abs(w.size.x) / 2  # symmetrisch rond het midden
    w_height = abs(w.size.y) / 2  # genegeerd
    w_depth = abs(w.size.z) / 2  # symmetrisch rond het midden
    smallest_dim = max(0.1, min(w_length, w_depth))

    if mag(wpos_noy - bpos_noy) < smallest_dim or (
        -w_length < b_axial < w_length and -w_depth < b_perp < w_depth
    ):
        # geraakt langs de as van w_length (axis) of...
        print("In rechthoek!")
        b.pos = b.pos - b.vel * dt  # laatste beweging ongedaan maken
        new_b_vel = b_vel_axial * waxis_norm - b_vel_perp * wperp_norm
        new_b_vel.y = b.vel.y  # de oude y-component van de snelheid herstellen...
        b.vel = new_b_vel
        return True
    else:
        return False