Хорошо, ребята, потому что вам не понравился мой ответ раньше, я попытаюсь объяснить, как рассчитать кривую Безье:
Я думаю, что самый простой способ - использовать представление кривых Бернштейна-Безье.
Чтобы сделать это, вы должны выяснить полиномы Бернштейна. Это не сложно. Для этого существует формуляр
n - количество точек вашей кривой и
я на самом деле точка.
Это значит, что у вас столько многочлен Бернштейна, сколько у вас очков.
Если вы знаете каждый полином Бернштейна, вы можете использовать следующую формулу для вычисления кривой.
n - общее количество очков и
i - индекс текущей точки.
P - это точка, а t всегда проходит от 0 до 1. 0 - это позиция слева, а 1 - позиция справа. r - новая точка кривой.
Теперь у вас есть два, вычислите формулу выше для x и y.
Это формула для х
Это формула для у
Как видите, единственный переменный параметр справа - это t. Это означает, что вы должны вычислять эту формулу много раз с t между 0 и 1. Самый простой способ сделать это - написать цикл for, подобный этому:
QList<QPointF> results = QList<QPointF>();
QList<QPointF> points = QList<QPointF>();
for(double i = 0; i <= 1; i+=0.01)
{
double x = //formular for rx
double y = //formular for ry
results << QPointF(x, y);
}
Надеюсь, это было не сложно. Если вы не поняли это краткое объяснение, вы можете посмотреть «Математический справочник». В шестом издании его на сайте от 1000 до 1001.
ISBN: 978-3-662-46220-1