Beispiel #1
0
def randomSystem(n, connect="stick"):
    global euler, collisions, screen
    w, h = screen.get_size()
    size = min(w, h)
    positions = N.random.random(3 * n) * size / 2.0 + size / 3.0
    positions[2::3] = 0.0
    velocities = N.random.random(3 * n) * 10.0 - 5.0
    velocities[2::3] = 0.0
    masses = N.random.random(n) * 10.0 + 5.0
    psystem = ParticleSystem(positions, velocities, masses)
    psystem.collisions = collisions
    psystem.euler = euler
    psystem.makePin(0)
    psystem.makePin(n - 1)
    for i in range(0, psystem.n - 3, 3):
        psystem.makeTriangle(i, i + 1, i + 2)
        if connect == "spring":
            psystem.computeForces.append(("spring", i + 2, i + 3, 1.0, 100.0))
        else:
            psystem.constraints.append(
                ("stick", i + 2, i + 3, psystem.dist(i + 2, i + 3)))
    for i in range(psystem.n):
        psystem.computeForces.append(("drag", i, 0.1))
    psystem.computeForces.append(("constant", 0, N.array(
        (1.0, 0.0, 0.0)), 1.0))
    psystem.computeForces.append(("constant", n - 1, N.array(
        (1.0, 0.0, 0.0)), -1.0))
    return psystem
def randomSystem(n, connect="stick"):
    global euler, collisions, screen
    w,h = screen.get_size()
    size = min(w,h)
    positions = N.random.random(3*n)*size/2.0 + size/3.0
    positions[2::3] = 0.0
    velocities = N.random.random(3*n)*10.0 - 5.0
    velocities[2::3] = 0.0
    masses = N.random.random(n)*10.0 + 5.0
    psystem = ParticleSystem(positions, velocities, masses)
    psystem.collisions = collisions
    psystem.euler = euler
    psystem.makePin(0)
    psystem.makePin(n-1)
    for i in range(0, psystem.n-3, 3):
        psystem.makeTriangle(i, i+1, i+2)
        if connect == "spring":
            psystem.computeForces.append(("spring", i+2, i+3, 1.0, 100.0))
        else:
            psystem.constraints.append(("stick", i+2, i+3,
                                          psystem.dist(i+2, i+3)))
    for i in range(psystem.n):
        psystem.computeForces.append(("drag", i, 0.1))
    psystem.computeForces.append(("constant", 0, N.array((1.0, 0.0, 0.0)), 1.0))
    psystem.computeForces.append(("constant", n-1, N.array((1.0, 0.0, 0.0)), -1.0))
    return psystem
def triangleSystem():
    global euler, collisions, screen
    w,h = screen.get_size()
    
    tris = [0.1, 0.4, 0.0,
            0.1, 0.1, 0.0,
            0.4, 0.1, 0.0,
            
            0.6, 0.1, 0.0,
            0.9, 0.1, 0.0,
            0.9, 0.4, 0.0,
            
            0.9, 0.6, 0.0,
            0.9, 0.9, 0.0,
            0.6, 0.9, 0.0,
            
            0.4, 0.9, 0.0,
            0.1, 0.9, 0.0,
            0.1, 0.6, 0.0]
    scale = [float(w),float(h),0.0] * int(len(tris)/3)
    
    positions = N.array(tris) * N.array(scale)
    n = len(positions)/3
    velocities = N.random.random(3*n)*10.0 - 5.0
    velocities[2::3] = 0.0
    masses = N.array([16.0, 4.0, 4.0]*int(n/3)) + N.random.random(n)*4.0
    N.random.shuffle(masses)
    psystem = ParticleSystem(positions, velocities, masses)
    psystem.collisions = collisions
    psystem.euler = euler
    for i in range(0,12,3):
        psystem.constraints.append(("triangle",i+0,i+1,i+2,
                                    psystem.dist(i+0,i+1),
                                    psystem.dist(i+1,i+2),
                                    psystem.dist(i+2,i+0)))
    springk = 0.1
    springl = 0.25
    psystem.computeForces.append(("spring", 2, 3, springk, psystem.dist(2,3)*springl))
    psystem.computeForces.append(("spring", 5, 6, springk, psystem.dist(5,6)*springl))
    psystem.computeForces.append(("spring", 8, 9, springk, psystem.dist(8,9)*springl))
    if True:
        psystem.computeForces.append(("spring", 11, 0, springk, psystem.dist(11,0)*springl))   
    else:
        psystem.constraints.append(("stick", 11, 0, psystem.dist(11,0)))   
    for i in range(psystem.n):
        if True:
            psystem.computeForces.append(("drag", i, 0.075))
    psystem.makePin(0)
    return psystem                       
Beispiel #4
0
def triangleSystem():
    global euler, collisions, screen
    w, h = screen.get_size()

    tris = [
        0.1, 0.4, 0.0, 0.1, 0.1, 0.0, 0.4, 0.1, 0.0, 0.6, 0.1, 0.0, 0.9, 0.1,
        0.0, 0.9, 0.4, 0.0, 0.9, 0.6, 0.0, 0.9, 0.9, 0.0, 0.6, 0.9, 0.0, 0.4,
        0.9, 0.0, 0.1, 0.9, 0.0, 0.1, 0.6, 0.0
    ]
    scale = [float(w), float(h), 0.0] * int(len(tris) / 3)

    positions = N.array(tris) * N.array(scale)
    n = len(positions) / 3
    velocities = N.random.random(3 * n) * 10.0 - 5.0
    velocities[2::3] = 0.0
    masses = N.array([16.0, 4.0, 4.0] * int(n / 3)) + N.random.random(n) * 4.0
    N.random.shuffle(masses)
    psystem = ParticleSystem(positions, velocities, masses)
    psystem.collisions = collisions
    psystem.euler = euler
    for i in range(0, 12, 3):
        psystem.constraints.append(
            ("triangle", i + 0, i + 1, i + 2, psystem.dist(i + 0, i + 1),
             psystem.dist(i + 1, i + 2), psystem.dist(i + 2, i + 0)))
    springk = 0.1
    springl = 0.25
    psystem.computeForces.append(
        ("spring", 2, 3, springk, psystem.dist(2, 3) * springl))
    psystem.computeForces.append(
        ("spring", 5, 6, springk, psystem.dist(5, 6) * springl))
    psystem.computeForces.append(
        ("spring", 8, 9, springk, psystem.dist(8, 9) * springl))
    if True:
        psystem.computeForces.append(
            ("spring", 11, 0, springk, psystem.dist(11, 0) * springl))
    else:
        psystem.constraints.append(("stick", 11, 0, psystem.dist(11, 0)))
    for i in range(psystem.n):
        if True:
            psystem.computeForces.append(("drag", i, 0.075))
    psystem.makePin(0)
    return psystem