1. C# / Говнокод #22050

    −41

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 26 Января 2017

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

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