Ver Fonte

refactored spreizer remapping

Paul Pfeiffer há 3 anos atrás
pai
commit
eae0a9b183
1 ficheiros alterados com 57 adições e 17 exclusões
  1. 57 17
      scripts/spatial_maps/spreizer_test.py

+ 57 - 17
scripts/spatial_maps/spreizer_test.py

@@ -4,22 +4,62 @@ from opensimplex import OpenSimplex
 
 noise = OpenSimplex()
 
-nrow = 100
-size = 10
-scale = 1
-x = y = np.linspace(0, size, nrow)
-n = [[noise.noise2d(i/scale, j/scale) for j in y] for i in x]
-m = np.concatenate(n)
-sorted_idx = np.argsort(m)
-max_val = nrow * 2
-idx = len(m) // max_val
-for ii, val in enumerate(range(max_val)):
-    m[sorted_idx[ii * idx:(ii + 1) * idx]] = val
-landscape = (m - nrow) / nrow
-
-pl.hist(landscape, bins=np.arange(-1, 1.01, 0.01))
-
-pl.matshow(landscape.reshape(nrow, -1), vmin=-1, vmax=1)
+sheet_size = 900
+number_of_grid_points_per_row = 60
+scale = 200
+
+# Get simplex values (not uniformly distributed)
+x = y = np.linspace(0, sheet_size, number_of_grid_points_per_row)
+simplex_values = [[noise.noise2d(i / scale, j / scale) for j in y] for i in x]
+simplex_values = np.concatenate(simplex_values)
+
+# Sort values and map them to a set of linearly increasing numbers from -1 to 1
+
+sorted_idx = np.argsort(simplex_values)
+
+rescaled_simplex_values = np.zeros(shape=np.shape(simplex_values))
+
+number_of_available_values = 360
+
+number_of_grid_points = len(simplex_values)
+is_divisible = number_of_grid_points % number_of_available_values == 0
+if not is_divisible:
+    print("Number of values {:d} does not divide number of grid points {:d}. Distribution will not be uniform.".format(
+        number_of_available_values, number_of_grid_points))
+
+
+repeats = number_of_grid_points // number_of_available_values if is_divisible else number_of_grid_points // \
+                                                                                   number_of_available_values +1
+available_values = np.linspace(-1, 1, number_of_available_values, endpoint=False)
+new_values = np.repeat(available_values, repeats)
+
+rescaled_simplex_values[sorted_idx] = new_values[:len(rescaled_simplex_values)]
+
+
+# Plot and check uniformity
+rescaled_simplex_values = rescaled_simplex_values
+
+bins = np.linspace(-1, 1, number_of_available_values+1, endpoint=True)
+occurrences, _, _ = pl.hist(rescaled_simplex_values, bins=bins)
+
+
+pl.matshow(rescaled_simplex_values.reshape(number_of_grid_points_per_row, -1), vmin=-1, vmax=1, extent=(0,
+                                                                                                        sheet_size,
+                                                                                                        0, sheet_size))
 pl.colorbar()
+pl.xlim(0, sheet_size)
+pl.ylim(0, sheet_size)
+pl.show()
+
+"""
+Old version with telling variable names
+old_rescaled_simplex_values = np.zeros(shape=np.shape(simplex_values))
+number_of_available_values = number_of_grid_points * 2
+number_of_instances_for_each_value = len(simplex_values) // number_of_available_values
+for ii, val in enumerate(range(number_of_available_values)):
+    old_rescaled_simplex_values[sorted_idx[ii * number_of_instances_for_each_value:(ii + 1) * number_of_instances_for_each_value]] = val
+
+old_rescaled_simplex_values = (old_rescaled_simplex_values - number_of_grid_points) / number_of_grid_points
+"""
+
 
-pl.show()