Войти
ПрограммированиеФорумФизика

Полет мины по параболе. (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
17:17, 28 сен. 2018

Я находил формулы для симуляции полета пули тут.
Как раз по теме глава http://handguns.g00net.org/ballistic/ukrytie.htm


#31
22:58, 28 сен. 2018

Zab
> Проблема то в чем? Берешь формулу Эйлера и считаешь.
Какую формулу вы называете формулой Эйлера?

#32
1:18, 29 сен. 2018

Может быть, действительно, сделать так:
1. подготовить готовые траектории, заранее рассчитанные.
2. записать их в массив.
3. в зависимости от расстояния использовать их.
Хоть и примерно, но кто там что в игре отличит.

Сразу скажу - это совершенно не тот результат, который я хотел получить от своего вопроса.


Zab Хороший у тебя график , такой вариант мне очень нравится, но я пока так и не понял, как его построить.
И формулы Эйлера и Кривые Безье и т.д. и т.п. звучит конечно красиво и завораживающе, да и смотрится распрекрасно в 3dsmax.
Но мне то нужен практический результат здесь. Хотя бы от чего отталкиваться. Как эти формулы переписать в код.

Мне пока понятно только одно:
создаю 2 цикла(один в другом):
один цикл просто просчитывает траекторию полета
второй  цикл, по ходу траектории, создаёт хотя бы 5 или 10 точек, и уже по этим точкам, там же в этом цикле, двигаю гранату.

Возможно не правильно понимаю, что то у меня не все сходится. Мне нужен сам алгоритм, может быть есть похожий пример.

#33
3:17, 29 сен. 2018

tonline_kms65
Формула Эйлера - самый простейший вариант расчета движения на основе сил или ускорений: x = x0 + v*dt + a*dt*dt/2; v = v0 + a*dt;
Вспомни наконец школьный курс физики! Или ты еще до 9го класса не дорос?
Понимаю, оскорбительно посылать читать школьные учебники, но если ты не знаешь даже в этом объеме, куда ты лезешь моделировать?
Допускаю что в школьном учебнике скучно изложено, предложил тебе альтернативу, учебник Ландсберга, я лично читал его взахлеб когда-то, как художественную литературу, может и тебе понравится.

График так и строится, по формулам Эйлера, куда надо подставить две силы, тяжести (m*g) и сопротивления воздуха (s*v^3). Сопротивление воздуха от куба скорости, а не от квадрата потому, что обтекание будет турбулентным, надеяться на ламинарное нельзя, скорости не те.

#34
3:36, 29 сен. 2018

Zab
Что ты так обиделся то?
Мы не о моделировании говорим, мы сейчас говорим о программировании.
Эта формула на всех сайтах. Только как её применить.
Я уже какой раз прошу, ещё раз повторяю,  переведи эту формулу в код. Если нет желания, так и скажи. Что обижаться? А так ты просто мне тему засираешь.
Я все равно разберусь, с тобой или без тебя.
Не обижайся.

Вопрос так и остался нерешёнными.

#35
3:47, 29 сен. 2018

tonline_kms65
Я не обиделся. Я послал тебя читать школьный учебник. На полном серьезе. И боялся не обиделся ли ты.
Цель то была не обидеть, а убедить прочитать учебник. Плохо учился в школе - наверстывай сейчас. Оно нужно в жизни, как видишь.
В школьном курсе очень мало, но ты не знаешь даже этого, похоже. Как рассчитываешь выживать?

#36
10:47, 29 сен. 2018

tonline_kms65
> переведи эту формулу в код
в код это переносится 1 в 1

const double dt = 1.0 / 60.0; // фиксированный шаг для рассчета физики
for (;;) {
  pos += vel * dt * 0.5;
  vel += accel * dt;
  pos += vel * dt * 0.5;

  // тут проверка столкновения
}
#37
17:19, 29 сен. 2018

/A\
> в код это переносится 1 в 1
> const double dt = 1.0 / 60.0; // фиксированный шаг для рассчета физики
> for (;;) {
> pos += vel * dt * 0.5;
> vel += accel * dt;
> pos += vel * dt * 0.5;
>
> // тут проверка столкновения
> }

Это ты по бесконечному кругу собрался мину гонять?

accel  это ускорение?

#38
18:31, 29 сен. 2018

tonline_kms65
> Это ты по бесконечному кругу собрался мину гонять?
это называется псевдокод

> accel  это ускорение?
да, тут должна быть сила тяжести и сопротивление воздуха

#39
22:04, 2 окт. 2018

tonline_kms65
(x1,y1) и (x2,y2) - начало и конец траектории
известна скорость V
надо найти ее направление: (VX,VY)

x1+vx*t=x2
y1+vy*t-g*t^2/2=y2

t=(x2-x1)/vx
vy*(x2-x1)/vx-g*(x2-x1)^2/vx^2/2=y2-y1
2*(y1-y2)*vx^2+2*vy*(x2-x1)*vx-g*(x2-x1)^2=0
vy=(y1-y2)*vx/(x1-x2)-g*(x1-x2)/2/vx=0
v^2=vx^2+vy^2=vx^2+((y1-y2)*vx/(x1-x2)-g*(x1-x2)/2/vx)^2=
=vx^2*(1+((y1-y2)/(x1-x2))^2)+g^2*(x1-x2)^2/4/vx^2-g*(y1-y2)
vx^4*4*(1+((y1-y2)/(x1-x2))^2)-vx^2*4*(v^2+g*(y1-y2))+g^2*(x1-x2)^2=0
D/4=4*(v^2+g*(y1-y2))^2-4*((x1-x2)^2+((y1-y2)^2)*g^2=
=4*(v^4+2*v^2*g*(y1-y2)-g^2*(x1-x2)^2)
vx^2=((v^2+g*(y1-y2))+/-sqrt(v^4+2*v^2*g*(y1-y2)-g^2*(x1-x2)^2))/2/(1+((y1-y2)/(x1-x2))^2)

нашли VX (если нигде не ошибся), справа может быть 0, 1 или 2 корня, подставляй + или - вместо +/-, если получится >0 - берешь квадр корень - находишь vx
vy=sqrt(v^2-vx^2)

И учти, что траектория может пересечь стену или даже землю (если земля неровная)

#40
9:54, 3 окт. 2018

/A\
> pos += vel * dt * 0.5;
> vel += accel * dt;
> pos += vel * dt * 0.5;
вот же блин
всегда при столкновении с этой темой мучал вопрос - сперва добавлять ускорение к скорости, а потом скорость к позиции или наоборот (: а тут вон оно какое простое решение, а в голову самому как-то не приходило никогда /:

#41
10:22, 3 окт. 2018

Chupakaber
А сократив, получишь
pos += vel * dt + accel * dt*dt/2;

#42
14:50, 3 окт. 2018

Aslan
> А сократив, получишь
Если ускорение зависит от положения, то нет.
И столкновения надо проверять одновременно с применением ускорения, ибо физически это одно и то же.
В общем, надо использовать стандартную схему и не извращаться:

for(;;)
{
    pos += vel * dt;
    vel += accel * dt;
    solve_collisions();
}
Просто надо иметь в виду, что позиция и скорость заданы со сдвигом на полшага по времени (т. е. начальные значения надо корректировать).
Ну и dt должно быть фиксированным.
#43
17:11, 3 окт. 2018

}:+()___ [Smile]
> Ну и dt должно быть фиксированным
Это откуда взяли?

#44
20:59, 3 окт. 2018

Aslan
> Это откуда взяли?
Ты, видимо, не в курсе заклинания "центральная разность". Давай я тебе о нём расскажу.
Суть заключается вот в чём.
В ходе перехода от дифференциальных уравнений к разностным, мы используем центральную разность:

    Изображение

Тогда как у левых и правых разностей погрешность приближения измеряется в h2, у центральной за счёт волшебного матана точность поднимается до h3.
Соответственно, чтобы разности были центральными, мы особым образом располагаем дискреты:

    Изображение

    Изображение

    Изображение

Теперь мы можем дискретизировать уравнения так, чтобы даже дубовый эйлер давал сразу второй порядок точности:

    Изображение

    Изображение

    Изображение

    Изображение

    Изображение

Ну и соответственно, когда сетка нерегулярная - то разности перестают быть центральными, магия пропадает и погрешности из чистого и невинного h3 вырастают обратно в свинский h2.

Ещё познавательный пример, когда центральная разность привела к большому успеху - это https://www.google.com/search?q=yee+cell , можно будет почмтать на досуге.

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумФизика

Тема в архиве.