#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) {}
