Получить параболу / дугу, основанную на вершине и точке

Я пытаюсь заставить персонажа бросить что-то по дуге в цель.

Я знаю вершину (x, y) и цель (x, y), и я хочу получить дугу от начала координат (x, y) до цели с максимальной высотой vertex.y

То, что я имею, основано на форме вершины y = a (xh)^2 + k

public static Vector3 parabola(Vector2 origin, Vector2 target, float height)
{
    float dist = target.x - origin.x;
    Vector2 vertex = new Vector2(origin.x + (dist / 2), origin.y + height);

    //a = (y-k) / (x-h)^2
    float a = (target.y - vertex.y) / ((target.x - vertex.x) * (target.x - vertex.x));

    //b = (-h + -h) * a
    float b = (-vertex.x + -vertex.x) * a;

    //c = (h * h) * a + k
    float c = (vertex.x * vertex.x) * a + vertex.y;

    return new Vector3(a, b, c);        
}

    x += Time.DeltaTime;
    float yPos = a * ((x - h) * (x - h)) + k;

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

Спасибо

1 ответ

Вот хорошее решение: Wiki: Траектория снаряда.

Другие вопросы по тегам