Формула параболы

Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Алгоритм
Вычисляет значение, обычно применяемое для задания высоты снаряда, который летит по параболической траектории.
function ParabolaZ takes real h, real d, real x returns real
  return (4 * h / d) * (d - x) * (x / d)
endfunction
Формула параболы (учитывающая начальную и конечную высоту)
Автор оригинала - moyack
Автор оптимизированного варианта - Shadow Daemon
h - максимальная высота в прыжке на середине расстояния (x = d / 2),
d - общее расстояние до цели,
x - расстояние от исходной цели до точки, где следует взять высоту по параболе.

  function ParabolaZ2 takes real y0, real y1, real h, real d, real x returns real
    return (2*(y0 + y1 - 2*h)*(x/d - 1) + (y1 - y0))*(x/d) + y0
  endfunction
Вариант Shadow Daemon
h - максимальная высота в прыжке,
d - общее расстояние до цели,
x - расстояние от исходной цели до точки, где следует взять высоту по параболе.

  function ParabolaZ2 takes real y0, real y1, real h, real d, real x returns real
    return ((4 * h / d) * (d - x) + y1 - y0) * (x / d) + y0
  endfunction
1
4
11 лет назад
1
Мне нужен пример
0
22
7 лет назад
0
Что не так с y0, y1?
0
4
7 лет назад
0
что означают переменные y0 и y1. Можно пример какой-то как использовать? К примеру я юзаю "бросок мяча по параболе" находясь в полете (имея высоту юнита 200)
2
27
7 лет назад
Отредактирован MpW
2
xgm.guru/p/wc3/188880?postid=346155#comment62 пример первой функции ParabolaZ, там и пример. В примере я рассчитывал расстояние, и доставал нужную мне высоту
мб y0 - текущая (начальная) высота юнита, y1 - конечная высота. Юнит же может изначально не на одной же высоте с конечной находится же. В конечной точке может быть возвышенность какая-нибудь, или глубокая впадина, а это наверное тоже надо учитывать.
Вот пример:
Объясню так чтоб было понятно:
d - общее расстояние до цели можно представить как длину дуги
h - максимальная высота в прыжке на середине расстояния (x = d / 2) представим как высота дуги
y0 - начальная высота высота одного края дуги
y1 - конечная высота высота другого края дуги
значения h, d, y0, y1 - лучше пермаментными (не меняющимися) делать в течении прыжка
x - расстояние от исходной цели до точки, где следует взять высоту по параболе. здесь меняется только x. Если двигаешь каждые 0.3 сек. на 5 единиц, то значение x изменяется на эти 5 единиц (юнит становится ближе к цели). Потом в формуле подсчитываешь и достаешь из нее нужную высоту в параболе (в линии параболы), и двигаешь по оси Z (у юнитов FlyHeight). Если не знаете какое расстояние, его можно подсчитать между точками
4
27
7 лет назад
Отредактирован MpW
4
вот
вопрос
Кстати почему по второму варианту (ниже код) получилось 6.11, а не 4.12: Тут 6.11 превышает максимума h (h = 5)
  function ParabolaZ2 takes real y0, real y1, real h, real d, real x returns real
    return ((4 * h / d) * (d - x) + y1 - y0) * (x / d) + y0
  endfunction
проверял несколько примеров, на компасе и в тетради, и варкрафте вторую функцию. Получается ли что автор хотел вот такую схему прикрутить как на рисунке ниже. Значения получались не точными, но приблизительными. Бред какой-то. Взять надо 5 примеров придумать и проверить, да лень
1
27
3 года назад
1
Сорян за некропост, но я путаюсь порой из-за комментариев выше
y0 - высота конечной точки, y1 - начальная высота, h - максимальная высота, d - полное расстояние, x - текущее расстояние до цели
Чтобы оставить комментарий, пожалуйста, войдите на сайт.