meshgrid.h
1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef STIM_MESHGRID_H
#define STIM_MESHGRID_H
namespace stim{
/// Create a 2D grid based on a pair of vectors representing the grid spacing (see Matlab)
/// @param X is an [nx x ny] array that will store the X coordinates for each 2D point
/// @param Y is an [nx x ny] array that will store the Y coordinates for each 2D point
/// @param x is an [nx] array that provides the positions of grid points in the x direction
/// @param nx is the number of grid points in the x direction
/// @param y is an [ny] array that provides the positions of grid points in the y direction
/// @param ny is the number of grid points in the y direction
template<typename T>
void meshgrid(T* X, T* Y, T* x, size_t nx, T* y, size_t ny){
size_t xi, yi; //allocate index variables
for(yi = 0; yi < ny; yi++){ //iterate through each column
for(xi = 0; xi < nx; xi++){ //iterate through each row
X[yi * nx + xi] = x[xi];
Y[yi * nx + xi] = y[yi];
}
}
}
/// Creates an array of n equally spaced values in the range [xmin xmax]
/// @param X is an array of length n that stores the values
/// @param xmin is the start point of the array
/// @param xmax is the end point of the array
/// @param n is the number of points in the array
template<typename T>
void linspace(T* X, T xmin, T xmax, size_t n){
T alpha;
for(size_t i = 0; i < n; i++){
alpha = (T)i / (T)n;
X[i] = (1 - alpha) * xmin + alpha * xmax;
}
}
}
#endif