mirror of
https://gitlab.com/pimnelissen/entropic-spring.git
synced 2025-11-30 19:33:07 +01:00
36 lines
870 B
Python
36 lines
870 B
Python
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]
|
|
|
|
|