#include "raster.h"
void Raster::touch(int index, Real value, Real x, Real y, Real dx, Real dy, TouchPointList &points) {
dx = std::max(0.500001, dx);
dy = std::max(0.500001, dy);
int x0 = std::max(0, (int)ceil(x - dx));
int y0 = std::max(0, (int)ceil(y - dy));
int x1 = std::min(width, (int)ceil(x + dx));
int y1 = std::min(height, (int)ceil(y + dy));
dx = 1/dx;
dy = 1/dy;
for(int iy = y0; iy < y1; ++iy) {
for(int ix = x0; ix < x1; ++ix) {
Real ddx = (x-ix)*dx;
Real ddy = (y-iy)*dy;
if (ddx + ddy <= 1.00001) {
Real &pixel = (*this)[iy][ix];
if (pixel > value) {
points.push_back( TouchPoint(index, iy, ix, pixel, value) );
pixel = value;
}
}
}
}
}