float getHeight(int x, int y) { float height = static_cast<float>(perlinNoise.GetValue(static_cast<double>(x) / perlinFrequency, 0.5, static_cast<double>(y) / perlinFrequency)) + 1.0f; height /= 2.0f; float distanceFromOrigin = static_cast<float>(Vector2i(x - halfMapSize, y - halfMapSize).getMagnitude()); float fractionFromOrigin = (1.0f - distanceFromOrigin / static_cast<float>(halfMapSize)); height *= fractionFromOrigin * peakAmplitude; height += fractionFromOrigin * peakHeight - peakAmplitude; return height; }