1. Куча / Говнокод #27881

    −1

    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
    template distance(b1, b2: AstronomicalBody): float64 = dist(b1.pos, b2.pos)
    
    proc attractionForce(body_1, body_2: AstronomicalBody): DVec3 =
      let r = distance(body_1, body_2)
      let module = (body_1.m * body_2.m) / (r.pow(2))
      return normalize(body_2.pos - body_1.pos) * module
    
    proc updateForce(body: var AstronomicalBody, bodies: seq[AstronomicalBody]) =
      body.F = dvec3(0, 0, 0)
      for other_body in bodies:
        if other_body != body:
          body.F += attractionForce(body, other_body)
    
    template acceleration(body: AstronomicalBody): float64 = body.F / body.m
    
    template updateAcceleration(body: var AstronomicalBody) = body.a = acceleration(body)
    
    template velocity(body: AstronomicalBody, dt: float64) = body.V + body.F.normalize * body.a * dt
    
    template updateVelocity(body: var AstronomicalBody, dt: float64) = body.V = velocity(body, dt)
    
    template updatePosition(body: var AstronomicalBody, dt: float64) = body.pos += (body.V * dt)
    
    proc updateProperties(body: var AstronomicalBody, bodies: seq[AstronomicalBody], dt: float64) =
      body.updateForce(bodies)
      body.updateAcceleration()
      body.updateVelocity(dt)
      body.updatePosition(dt)

    Как же "Nim" хорош, как же "Nim" красив, изящен и элегантен!

    Запостил: JloJle4Ka, 19 Декабря 2021

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

    • Дампик:

      А его нет, почему-то ничего не компилируется (((
      Ответить
    • что тут сверх естественного?
      Ответить
    • "template distance(b1, b2: AstronomicalBody): float64 = dist(b1.pos, b2.pos)" что это такое? Я вас спрашиваю... какой тут нах темплейт?
      Ответить
      • Оно на этапе конпеляции подставится куда нужно и раскроется как нужно.

        Где-то мы обсасывали сишный мокрос, где надо куда-то "do {} while (0)" вставить, чтобы программу не попидарасило. А тут оно всё само себя самого это самывает!

        А ваш компилятор (особенно C++) так умеет?
        Ответить

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