• ? gamedev физика ну общим, глупый вопрос, но что-то я застопорился. Есть уравнение движения a = g — k*v (ну, движения снаряда с силами вязкости воздуха. Да, массы нету). Движок считает всю эту штуку итеративно. Рассчет:
    Vector3 p = p0;
    Vector3 v = push;
    Каждый dt, обновляется позиция (p)
    {
    v += g * dt;
    v -= v d dt;
    p += v * dt;
    }

    g — ускорение свободного падения, d — коэфициент вязкости.

    Вопрос — как построить уравнение для всей этой штуки, что бы решить обратную задачу?

    (можно для начала решить более простую, где скорость меняется в один подход, а не в 2 итерации, типа v += g dt — v d * dt)

Replies (16)

  • @Shchvova, В каком смысле "обратная задача"? Если речь про обратную задачу динамики, то ты ее уже решил.
  • @OCTAGRAM, не, не то.
  • @balodja, и...? Как ее решить?
  • @Shchvova, Записать все силы, действующие на тело, и проинтегрировать, пользуясь законами Ньютона.
  • @Shchvova, Я бы попробовал найти скорость, при которой силы уравновешивают друг друга. В упрощённом случае это, похоже, g/d. В усложнённом, возможно, будет прибавка, учитывающая dt. Если нигде не путаю, в системе отсчёта с этой скоростью будет только один закон: v = v — v d dt = v (1 — d dt), то есть, экспонента
  • @balodja, вообще, это оно и есть если сократить массу
  • @OCTAGRAM, спасибо... Да, я говорил что g & v — вектора?
  • @Shchvova, ничего не меняет
  • @Shchvova, Ну вот в твоем головном посте написан код для подсчета решения уравнения dv/dt = g — v * d одним из кучи возможных методов. Разностная схема с одной итерацией для v (то есть v += (g — v*d) dt) и разностная схема с двумя итерациями (озвученное v += g dt; v -= v d dt) аппроксимируют решение одного уравнения, а именно dv/dt = g — v * d. Если интересует, как решить это аналитически, могу написать.
  • @balodja, вот я тупиццо =)
    да, это одно и то же уравнение ведь. Да, именно в том был и вопрос, как решить его аналитически...
  • @balodja, btw, спасибо
  • @Shchvova, хотя, уже догадываюсь, что можно просто проинтегрировать
    dv/(g — v * d) = dt
  • @Shchvova, что было бы просто (-ln(g-d*v)/d).
    Но блин, а что делать если v — вектор?
  • @Shchvova, блин, а фигня ведь ;( походу я ошибся.
    Если для плоского варианта решать, то получается что
    V=(g — C exp(-td) )/d
    неправильно, потому что при d = 0, оно все должно становиться v = gt
    T_T
  • @Shchvova, Вот тут указан правильный ответ, кстати. А то, что решение уравнения при d -> 0 не совпадает с решением при d = 0 — это интересный факт, но решение от этого неправильным не становится.