C# 基于顶点和点获取抛物线/圆弧

C# 基于顶点和点获取抛物线/圆弧,c#,unity3d,algebra,projectile,C#,Unity3d,Algebra,Projectile,我试着让一个角色向一个目标投掷一些东西 我知道顶点(x,y)和目标(x,y),我想得到一个从原点(x,y)到目标的最大高度为顶点的弧 我得到的是基于y=a(x-h)^2+k的顶点形式 这不会产生正确的弧。它通常太陡或太浅。是我的代数错了,还是我使用了错误的方法 谢谢这里有一个很好的解决方案: 你说的“我知道顶点(x,y)”是什么意思?和“顶点的最大高度y”?你到底想做什么?如果你想将弹丸从一个点发射到另一个点,你应该感兴趣的变量是起始位置、目标位置、初始速度、弹道角度和重力值。你将知道起始/结束

我试着让一个角色向一个目标投掷一些东西

我知道顶点(x,y)和目标(x,y),我想得到一个从原点(x,y)到目标的最大高度为顶点的弧

我得到的是基于y=a(x-h)^2+k的顶点形式

这不会产生正确的弧。它通常太陡或太浅。是我的代数错了,还是我使用了错误的方法

谢谢

这里有一个很好的解决方案:


你说的“我知道顶点(x,y)”是什么意思?和“顶点的最大高度y”?你到底想做什么?如果你想将弹丸从一个点发射到另一个点,你应该感兴趣的变量是起始位置、目标位置、初始速度、弹道角度和重力值。你将知道起始/结束位置和重力值,你可以调整初始速度,然后你只需要计算出角度。这是假设游戏具有2D特性。另外,向量3如何描述抛物线?如果你澄清这些问题,我会尽力回答。当然,这并没有考虑任何阻力。(从空中等)
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;