49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
#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) {}
|