blob: 1b89f0ce7731d3f3251778ba8d5dff92c05520ab [file] [log] [blame]
#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) {}