Для простого рисования кривой Безье вы можете использовать это (для кубической кривой Безье ):
private Vector2 Bezier(int t, Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3)
{
var x = OrdinateX((float)t / 100, p0, p1, p2, p3);
var y = OrdinateY((float)t / 100, p0, p1, p2, p3);
return new Vector2(x, y);
}
private float OrdinateX(float t, Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3)
{
return (float)((Math.Pow((double)(1 - t), 3) * p0.Y) + (3 * Math.Pow((double)(1 - t), 2) * t * p1.X) + (3 * (1 - t) * (t * t) * p2.X) + ((t * t * t) * p3.X));
}
private float OrdinateY(float t, Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3)
{
return (float)((Math.Pow((double)(1 - t), 3) * p0.Y) + (3 * Math.Pow((double)(1 - t), 2) * t * p1.Y) + (3 * (1 - t) * (t * t) * p2.Y) + ((t * t * t) * p3.Y));
}
Итак, и в обновлении вы должны поставить это:
for (int t = 0; t <= 100; t++)
object.position = Bezier(t, new Vector(0, 0), new Vector(100, 100), new Vector(300,300), new Vector(0, 300));
Но я думаю, что более простой способ получить кривую - использовать сплайн Кэтмулла-Рома, как писал Эндрю Рассел.