−41
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
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, измененный, как показано в примерах:
input: { 0; 1; 2; 4 }, outputCount == 7
output: { 0; 0.5; 1; 1.5; 2; 3; 4 }
input: { 1, 2, 4, 8, 10, 5, -1.5 }, outputCount == 3
output: { 1; 8; -1.5}
Запостил: Tryff,
26 Января 2017
dm_fomenok 26.01.2017 22:48 # −64
barop 27.01.2017 07:03 # +3
guest 27.01.2017 09:53 # −62
nihau 27.01.2017 15:26 # +2
guest 27.01.2017 15:53 # 0
Steve_Brown 27.01.2017 16:45 # 0
bormand 27.01.2017 16:48 # 0
guest 28.01.2017 16:54 # −61
guest 28.01.2017 20:41 # −62