Source code for pyglimer.utils.even2Dpoints

import numpy as np
from copy import deepcopy


[docs]def distance(x, y, x0: float, y0: float): """Compute euclidean 2D distance between points Parameters ---------- x : arraylike x coordinates y : arraylike y coordinates x0 : float x coordinate to measure distance to y0 : float y coordinatte to measure distance to Returns ------- float or arraylike distances Notes ----- :Author: Lucas Sawade (lsawade@princeton.edu) :Last Modified: 2021.03.16 16.30 """ return np.sqrt((x - x0)**2 + (y - y0) ** 2)
[docs]def even2Dpoints(n, width, height, radius, seed=None): """Creates evenly distributed points in 2D space. Parameters ---------- n : int number of points to be generated width : floatt width of the 2D space height : float height of the 2D space radius : float min distance between the points Returns ------- tuple x,y coordinates in 2D space Does not really need a unit test, since its testing its distances itself, and the distance function is really not a complicated thing... """ # Initialize empty array x = [] y = [] if seed: np.random.seed(seed) while len(x) < n: flag = True # Get candidate xc = (np.random.random(1)[0] - 0.5) * width yc = (np.random.random(1)[0] - 0.5) * height for ip in range(len(x)): if distance(x[ip], y[ip], xc, yc) < radius * 2: flag = False break if flag is True: x.append(deepcopy(xc)) y.append(deepcopy(yc)) return x, y