1. Python / Говнокод #18322

    −124

    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
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    def approximate_input(to_reach, error, constants, variable, formula, goes_down, default_value=0, RPV=0, var_max=0, fun_RPV=0, fun_min=0):
        var = default_value
        dvar = 1
        dm = 0
        current_vars = constants
        current_vars[variable] = var
        fx = eval(formula, globals(), current_vars)
        while 1:
            delta_var = var
            if (abs(fx-to_reach) <= error):
                return var
            if (fx < to_reach and not goes_down):
                if (dm==2):
                    dvar = dvar / 2
                dm = 1
                if (RPV and var+dvar > var_max):
                    var = var - dvar
                else:
                    var = var + dvar
                current_vars[variable] = var
            elif (fx > to_reach and goes_down):
                if (dm==2):
                    dvar = dvar / 2
                dm = 1
                if (RPV and var+dvar > var_max):
                    var = var - dvar
                else:
                    var = var + dvar
                current_vars[variable] = var
            elif (fx > to_reach and not goes_down):
                if (dm==1):
                    dvar = dvar / 2
                dm = 2
                if (RPV and var+dvar > var_max):
                    var = var + dvar
                else:
                    var = var - dvar
                current_vars[variable] = var
            elif (fx < to_reach and goes_down):
                if (dm==1):
                    dvar = dvar / 2
                dm = 2
                if (RPV and var+dvar > var_max):
                    var = var + dvar
                else:
                    var = var - dvar
                current_vars[variable] = var
            fx = eval(formula, globals(), current_vars)
            delta_var = delta_var - var
            delta_var = var - delta_var
            if (fun_RPV):
                if (fx < fun_min):
                    var = var + delta_var

    Как один мудак на питоне писал симулятор баллистического полета с учетом ламинарного сопротивления среды

    Запостил: EditorRUS, 11 Июня 2015

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

    • Мне стыдно за этот ужас. Лучше бы scipy подключил и воспользовался омега-функцией, чем написал это. Но работает.

      А вот так вот оно используется:
      sht = approximate_input(sy / 2, sy / 2, locals(), "t", "lar2hfyt(t, k, my)", 1)


      def lar2hfyt(t, k, my):
          return (my*k**2 + g*k*t - g*e**(k*t)+g)/k**2
      Ответить
      • Ничего, не переживай.
        Ответить
        • 11 аргументов у функции - это всегда весело. Правда последние 4 аргумента предназначались для аппроксимации решения у периодических функций, которые имелись при турбулентном сопротивлении, но я их так и не доделал, ибо надоело. Но даже так 7 аргументов - это серьезное дело.
          Ответить
          • >11 обязательных аргументов у функции - это всегда весело.
            Ответить

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