Drought.World.HeightMap.getHeight C# (CSharp) Метод

getHeight() публичный Метод

public getHeight ( float x, float y ) : float
x float
y float
Результат float
        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;
            }
        }