Квадратное уравнение из точек

Мне нужно реализовать функцию, которая находит траекторию снаряда и у меня есть три точки - исходная, пункт назначения и точка максимальной высоты.

Мне нужно найти правильную квадратичную функцию, которая включает эти точки.

Мне трудно понять, что делать. С чего начать?


person Sangratura    schedule 27.07.2016    source источник
comment
mathworld.wolfram.com/LagrangeInterpolatingPolynomial.html В частности, обратите внимание на уравнение 4.   -  person Pig    schedule 27.07.2016
comment
Интерполяция или Сплайн — это ключевые слова, которые вы ищете.   -  person OneCricketeer    schedule 27.07.2016
comment
Используйте общую формулу для параболы, axx + bx + c = y, и замените (x, y) координаты ваших трех точек. Это дает вам систему из 3 линейных уравнений (по одному для каждой точки) с 3 переменными (a, b, c), которые можно решить стандартными методами, такими как сокращение строк.   -  person pyon    schedule 27.07.2016
comment
Кроме того, Stack Overflow — неподходящее место для такого рода вопросов. Возможно, Math.SE был бы более подходящим?   -  person pyon    schedule 27.07.2016
comment
@pyon Как вычислить переменные без присвоения значений? Извините, я новичок.   -  person Sangratura    schedule 27.07.2016
comment
Я не говорил о том, как вы должны писать свою программу. Это я оставлю на ваше усмотрение. Я просто описывал алгебраические манипуляции, ведущие к решению. Допустим, ваши три точки (0,0), (2,12) и (4,0). Тогда, после подстановки, вы получите следующие уравнения: a(0)(0) + b(0) + c = 0, a(2)(2) + b(2) + c = 12 и a(4)(4) + b(4) + c = 0. Их можно упростить до c = 0, 4a + 2b + c = 12 и 16a + 4b + c = 0.   -  person pyon    schedule 27.07.2016
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он в первую очередь касается геометрии, а не программирования, и, вероятно, относится к math.stackexchange.com.   -  person m69 ''snarky and unwelcoming''    schedule 27.07.2016


Ответы (1)


Предположим, что у вас есть origin и destination на оси Y, а именно x1 и x2. Если нет, вы можете переместить их позже.

a*x*x + b*x + c = 0//equation
x1*x2=(c/a);
c = (x1*x2)*a;
x1+x2=(-b/a);
b = (x1+x2)/(-a);
a*((x1+x2)/2)^2 + b*((x1+x2)/2) + c = h//max height
let X=(x1+x2)/2;
a*X*X + ((2*X)/(-a))*X + (x1*x2)*a - h = 0;

Теперь вы можете повторять a=0 до тех пор, пока приведенное выше уравнение не станет истинным, поскольку у вас есть все значения X , x1 , x2 и h.

double eqn = (-h),a=0;//a=0.Assuming you have declared x1,x2 and X already
while(eqn!=0)
{
    a++;
    eqn = a*X*X + ((2*X)/(-a))*X + (x1*x2)*a - h;
}
b = (x1+x2)/(-a);
c = (x1*x2)*a;

Таким образом, вы получили все свои коэффициенты.

person yobro97    schedule 27.07.2016
comment
Цикл никогда не выходит. Правильно ли -h внутри цикла? но спасибо за вашу помощь, теперь у меня есть твердая почва для работы. - person Sangratura; 27.07.2016
comment
@Sangratura, на самом деле я никогда не собирался писать код / ​​тестировать его ... Я дал вам примерное представление о том, как действовать в программе. Можете ли вы опубликовать свой код? На самом деле нет необходимости, чтобы существовало целое число. Например, если a=PI(3.14...), то цикл никогда не завершится, так как не существует целого числа, кратного PI, которое является целым числом. - person yobro97; 27.07.2016
comment
@Sangratura ... так что это зависит от вашего уравнения. Если коэффициенты иррациональны, то целых чисел не существует, и, следовательно, цикл не завершится. Надеюсь, вы поняли мою мысль. - person yobro97; 27.07.2016
comment
Я понимаю, что таким образом я увеличивал с меньшими интервалами, но все равно то же самое. Я думаю, что этот метод слишком дорог для вычислений. Вот этот сайт, например, считает моментально, это как раз то, что мне нужно. Я не знаю, какой алгоритм они используют. - person Sangratura; 27.07.2016
comment
@Sangratura Почему бы тебе не попробовать это? После каждого цикла округляйте цифры до нужной точности. Если вы увеличиваете на 0.01, округляйте до 2 цифр. 2 десятичных знака в c">stackoverflow.com/questions/1343890/ для округления... - person yobro97; 27.07.2016
comment
Мне удалось выйти из цикла, ограничив уравнение значением менее 0,1, чтобы получить представление, но я получаю очень неправильные результаты. И вычисление занимает слишком много времени. В любом случае, я думаю, что-то не так в моей логике, я буду работать над этим. Спасибо за вашу помощь. - person Sangratura; 27.07.2016
comment
Три заданные точки однозначно определяют параболу. Нет необходимости в цикле, и действительно, ваш код почти всегда (в математическом смысле) будет давать сбой. - person AakashM; 27.07.2016