Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
public static double[] Interpolate(this double[] input, int outputCount)
{
int inputCount = input.Length;
double[] output = new double[outputCount];
if (output.Length > inputCount)
{
double multipiler = (double)(outputCount - 1) / ((inputCount - 1) * outputCount / inputCount);
for (int i = 0; i < inputCount; ++i)
{
int position = (int)(multipiler * (i * outputCount / inputCount));
output[position] = input[i];
if (position > 0)
{
int previousPosition = (int)(multipiler * ((i - 1) * outputCount / inputCount));
for (int j = previousPosition + 1; j < position; ++j)
{
output[j] = output[previousPosition] + (output[position] - output[previousPosition]) /
(position - previousPosition) * (j - previousPosition);
}
}
}
}
else
{
double multipiler = (double)(inputCount - 1) / ((outputCount - 1) * inputCount / outputCount);
for (int i = 0; i < outputCount; ++i)
{
int position = (int)(multipiler * (i * inputCount / outputCount));
output[i] = input[position];
}
}
return output;
}
Запилил типа интерполяцию. Не знаю, почему она работает, но работает офигенно.
Требовалось сделать метод, получающий массив размера n и возвращающий массив размера m, измененный, как показано в примерах:
Комментарии (9) RSS