A high-performance general-purpose compute library
graphics/field.cpp
/*******************************************************
* Copyright (c) 2014, ArrayFire
* All rights reserved.
*
* This file is distributed under 3-clause BSD license.
* The complete license agreement can be obtained at:
* http://arrayfire.com/licenses/BSD-3-Clause
********************************************************/
#include <arrayfire.h>
#include <math.h>
#include <cstdio>
using namespace af;
const static float MINIMUM = -3.0f;
const static float MAXIMUM = 3.0f;
const static float STEP = 0.18f;
int main(int, char**) {
try {
af::Window myWindow(1024, 1024, "2D Vector Field example: ArrayFire");
myWindow.grid(1, 2);
array dataRange = seq(MINIMUM, MAXIMUM, STEP);
array x = tile(dataRange, 1, dataRange.dims(0));
array y = tile(dataRange.T(), dataRange.dims(0), 1);
x.eval();
y.eval();
float scale = 2.0f;
do {
array points = join(1, flat(x), flat(y));
array saddle = join(1, flat(x), -1.0f * flat(y));
array bvals = sin(scale * (x * x + y * y));
array hbowl = join(1, constant(1, x.elements()), flat(bvals));
hbowl.eval();
myWindow(0, 0).vectorField(points, saddle, "Saddle point");
myWindow(0, 1).vectorField(
points, hbowl, "hilly bowl (in a loop with varying amplitude)");
myWindow.show();
scale -= 0.0010f;
if (scale < -0.01f) { scale = 2.0f; }
} while (!myWindow.close());
} catch (af::exception& e) {
fprintf(stderr, "%s\n", e.what());
throw;
}
return 0;
}
Window object to render af::arrays.
Definition graphics.h:37
A multi dimensional data container.
Definition array.h:37
dim4 dims() const
Get dimensions of the array.
void eval() const
Evaluate any JIT expressions to generate data for the array.
array T() const
Get the transposed the array.
dim_t elements() const
Get the total number of elements across all dimensions of the array.
An ArrayFire exception class.
Definition exception.h:22
virtual const char * what() const
Returns an error message for the exception in a string format.
Definition exception.h:46
seq is used to create sequences for indexing af::array
Definition seq.h:46
array sin(const array &in)
C++ Interface to evaluate the sine function.
array constant(T val, const dim4 &dims, const dtype ty=(af_dtype) dtype_traits< T >::ctype)
C++ Interface to generate an array with elements set to a specified value.
void info()
void vectorField(const array &points, const array &directions, const char *const title=NULL)
Renders the input arrays as a 2D or 3D vector field plot to the window.
bool close()
Check if window is marked for close.
void show()
This function swaps the background buffer to current view and polls for any key strokes while the win...
void grid(const int rows, const int cols)
Setup grid layout for multiview mode in a window.
array flat(const array &in)
C++ Interface to flatten an array.
array join(const int dim, const array &first, const array &second)
C++ Interface to join 2 arrays along a dimension.
array tile(const array &in, const unsigned x, const unsigned y=1, const unsigned z=1, const unsigned w=1)
C++ Interface to generate a tiled array.
array scale(const array &in, const float scale0, const float scale1, const dim_t odim0=0, const dim_t odim1=0, const interpType method=AF_INTERP_NEAREST)
C++ Interface for scaling an image.
Definition algorithm.h:15