Си диез / Говнокод #22050 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 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 Tryff, (Updated )

Комментарии (9) RSS

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8