Если начальные и конечные значения y одинаковы, вы можете описать параболу, используя параметрическое уравнение, которое может быть получено в несколько этапов.
дал startingHeight и apexHeight,
y(t) = A(t^2) + B(t) + C
y(0) = startingHeight
y(0.5) = apexHeight
y(1) = startingHeight
y(0) = startingHeight = A*0 + B*0 + C
C = startingHeight
y(t) = A(t^2) + B(t) + startingHeight
y(1) = startingHeight = A + B + startingHeight
0 = A+B
A = -B
y(t) = -B(t^2) + B(t) + startingHeight
y(0.5) = apexHeight = -B(0.25) + B(0.5) + startingHeight
apexHeight = B(0.5 - 0.25) + startingHeight
apexHeight - startingHeight = B(0.25)
B = (apexHeight - startingHeight)/4.0
Теперь, когда вы знаете, A, B и C, вы можете написать метод для нахождения у:
function y(startingHeight, apexHeight, t){
B = (apexHeight - startingHeight)/4;
A = -B;
C = startingHeight;
return A*t*t + B*t + C;
}
х и г являются более простыми, так как они просто увеличивайте линейно от начала до конца:
x(t) = At + B
x(0) = startX
x(1) = endX
x(0) = startX = A*0 + B
B = startX
x(t) = At + startX
x(1) = endX = A*1 + startX
A = endX - startX
x(t) = (endX - startX) * t + startX
(z имеет формулу, идентичную x - просто замените все x на Заболоцкого)
function x(start, end, t){
A = (end - start);
B = start;
return A*t + B;
}
function z(start, end, t){
A = (end - start);
B = start;
return A*t + B;
}
Теперь вы можете найти 3d позицию шахматной фигуры в момент времени т:
function parabola(xBegin, xEnd, zBegin, zEnd, yStart, yApex, t){
return [x(xBegin,xEnd,t), y(yStart,yApex,t), z(zBegin,zEnd,t)];
}
p1, p2 и p3 лежат на параболе и р2 апекс? – Ani
exacly !! p1 - начало, p2 - вершина, а p3 - конец. – Andrade
Проблема чрезмерно ограничена, если 'p2' является точно вершиной. Вам нужно рассмотреть их всего три точки в пространстве, принадлежащих параболе. – ja72