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