Source code for malcolm.modules.demo.util

import numpy as np
from scanpointgenerator import Point


[docs]def make_gaussian_blob(width, height): """Make a Gaussian Blob with float values in range 0..1""" x, y = np.meshgrid(np.linspace(-1, 1, width), np.linspace(-1, 1, height)) d = np.sqrt(x * x + y * y) blob = np.exp(-(d**2)) return blob
[docs]def interesting_pattern(point: Point) -> float: """This function is interesting in x and y in range -10..10. Given a Point, use the x and y values contained in it to make a float value in range 0..1 """ names = sorted(point.positions) # See if we are scanning x vs y x_names = [k for k in names if "x" in k.lower()] y_names = [k for k in names if "y" in k.lower()] if x_names and y_names: # If we are then use them x = point.positions[x_names[0]] y = point.positions[y_names[0]] elif names: # Otherwise use what we have x = point.positions[names[0]] y = point.positions[names[-1]] else: # No points, make something up x = 0 y = 0 # Return a value between 0 and 1 based on a function that gives interesting # pattern on x and y in range -10:10 z = 0.5 + (np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)) / 2 return z