import numpy as np from Link import Link class RubberBand: def __init__(self, N, a=1.): """ RubberBand is a class that can simulate a rubber band with N incompressible links of length a. Parameters: N (int) The number of links. a (float) The fixed length of links. """ self.N = N self.a = a self.links = self.__sample_links() @property def length(self): return self.a * np.sum([l.direction for l in self.links]) def __sample_links(self): """ Sample N Link objects with a random direction. """ samples = np.random.random_sample((self.N,)) directions = np.ones(samples.shape) directions[samples < 0.5] = -1. directions = directions.astype(int) return [Link(d) for d in directions]