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