#include <math.h> #include <algorithm> #include "PerPixelMesh.hpp" #include "omptl/omptl" #include "omptl/omptl_algorithm" PerPixelMesh::PerPixelMesh(int width, int height) : width(width), height(height), size (width * height), p(width * height, PixelPoint(0,0)), p_original(width * height, PixelPoint(0,0)), identity(width * height, PerPixelContext(0,0,0,0,0,0)) { for (int j=0;j<height;j++) for(int i=0;i<width;i++) { int index = j * width + i; float xval=i/(float)(width-1); float yval=-((j/(float)(height-1))-1); p[index].x = xval; p[index].y = yval; p_original[index].x = xval; p_original[index].y = yval; identity[index].x= xval; identity[index].y= yval; //identity[index].x= (xval-.5)*2; //identity[index].y= (yval-.5)*2; identity[index].i= i; identity[index].j= j; identity[index].rad=hypot ( ( xval-.5 ) *2, ( yval-.5 ) *2 ) * .7071067; identity[index].theta=atan2 ( ( yval-.5 ) *2 , ( xval-.5 ) *2 ); } } void PerPixelMesh::Reset() { omptl::copy(p_original.begin(), p_original.end(), p.begin()); } PixelPoint::PixelPoint(float x, float y) : x(x), y(y) {} PerPixelContext::PerPixelContext(float x, float y, float rad, float theta, int i, int j) : x(x), y(y), rad(rad), theta(theta), i(i), j(j) {}