public float getHeight(float x, float y)
{
bool outOfBounds = false;
if (x >= width - 1)
{
x = width - 1;
outOfBounds = true;
}
else if (x < 0)
{
x = 0;
outOfBounds = true;
}
if (y >= height - 1)
{
y = height - 1;
outOfBounds = true;
}
else if (y < 0)
{
y = 0;
outOfBounds = true;
}
if (outOfBounds)
return map[(int)x, (int)y];
int x1 = (int)x;
int x2 = x1 + 1;
int y1 = (int)y;
int y2 = y1 + 1;
if (x - x1 == 0.0f && y - y1 == 0.0f)
return map[(int)x, (int)y];
if ((x - (int)x) + (y - (int)y) > 1.0f)
{
float alpha = distanceFromALine(x, y, x1, y2, x2, y1) / distanceFromALine(x2, y2, x1, y2, x2, y1);
float beta = distanceFromALine(x, y, x2, y1, x2, y2);
float gamma = distanceFromALine(x, y, x2, y2, x1, y2);
float returnValue = alpha * map[x2, y2] + beta * map[x1, y2] + gamma * map[x2, y1];
return returnValue;
}
else
{
float alpha = distanceFromALine(x, y, x1, y2, x2, y1) / distanceFromALine(x1, y1, x1, y2, x2, y1);
float beta = distanceFromALine(x, y, x2, y1, x1, y1);
float gamma = distanceFromALine(x, y, x1, y1, x1, y2);
float returnValue = alpha * map[x1, y1] + beta * map[x1, y2] + gamma * map[x2, y1];
return returnValue;
}
}