PDA

Просмотр полной версии : Упростить выражение до квадратного уравнения у найти корни


PlutDem
16.09.2014, 18:58
Здравствуйте, имеется выражение ((x1 + xV1 * t) - (x2 + xV2 * t))^2 = r. Предполагается, что нам известны все переменные кроме t которую нужно вычислить. Для этого нужно упростить выражение до квадратного уравнения. Что бы быть уверенным, что я не ошибся в упрощении выражения я подставил во все переменные кроме r значения и вычислил результат: r = 4, далее, при упрощении сверялся с этим результатом.
var t:Number = 2;

var x1:Number = 2;
var xV1:Number = 2;

var x2:Number = 12;
var xV2:Number = -2;



var:Number res = Math.Pow((x1 + xV1 * t) - (x2 + xV2 * t), 2)// res == 4;
res = Math.Pow((x1 + xV1 * t), 2) - 2 * (x1 + xV1 * t) * (x2 + xV2 * t) + Math.Pow((x2 + xV2 * t), 2); // res == 4
res = x1 * x1 + 2 * x1 * xV1 * t + xV1 * xV1 * t * t + -2 * x1 * x2 + -2 * x1 * xV2 * t + -2 * xV1 * t * x2 + -2 * xV1 * t * xV2 * t + x2 * x2 + 2 * x2 * xV2 * t + xV2 * xV2 * t * t; // res == 4

Теперь нужно найти коэффициенты уравнения. Переносим результат(res) в левую сторону и складываем подобные слагаемые, убираем переменную t.

var r:Number = res;
var a:Number = xV1*xV1 + -2*xV1*xV2 + xV2*xV2;
var b:Number = 2*x1*xV1 + -2*x1*xV2 + -2*xV1*x2 + 2*x2*xV2;
var c:Number = x1*x1 + -2*x1*x2 + x2*x2 - r;
Вычисляем корни:
var dX:Number1 = (-b + Math.Sqrt(b*b - 4*a*c))/2*a;
var dX2:Number = (-b - Math.Sqrt(b*b - 4*a*c))/2*a;
Я ожидал, что один из корней будет равен t, то есть 2, но вместо этого получается 768 и 512.
Я уже несколько раз переделывал, но успеха добиться не удалось. Буду рад если кто нибудь поможет найти ошибку.

nubideus
16.09.2014, 20:16
//((x1 + y1 * t) - (x2 + y2 * t))**2 = r
var x1 = 10;
var y1 = 5;
var x2 = 11+5;
var y2 = 15+1;
var t = 4;
var r = Math.pow((x1 + y1 * t) - (x2 + y2 * t), 2);
r === ((x1 + y1 * t) - (x2 + y2 * t)) * ((x1 + y1 * t) - (x2 + y2 * t));
r === (x1 + y1 * t) * (x1 + y1 * t) - 2*(x1 + y1 * t)*(x2 + y2 * t) + (x2 + y2 * t)*(x2 + y2 * t);
r === (y2*y2 - 2*y1*y2 + y1*y1)*t*t + t*(-2*x1*y2 + 2*x1*y1 - 2*x2*y1 + 2*x2*y2) + x1*x1 - 2*x1*x2 + x2*x2;
0 === (y2*y2 - 2*y1*y2 + y1*y1)*t*t + t*(-2*x1*y2 + 2*x1*y1 - 2*x2*y1 + 2*x2*y2) + x1*x1 - 2*x1*x2 + x2*x2 - r;

var a = (y2*y2 - 2*y1*y2 + y1*y1);
var b = 2*(-x1*y2 + x1*y1 - x2*y1 + x2*y2);
var c = (x1*x1 - 2*x1*x2 + x2*x2 - r);

0 === a*t*t + b*t + c;

var r1 = (-b + Math.sqrt(b*b - 4*a*c)) / (2*a);
var r2 = (-b - Math.sqrt(b*b - 4*a*c)) / (2*a);

t === r1 || t === r2; // true

var t:Number = 2;
var x1:Number = 2;
var xV1:Number = 2;отсюда и ошибки, надо брать разные значения

+
var a = (y2 - y1) * (y2 - y1);
var b = 2*(x2 - x1) * (y2 - y1);
var c = (x1 - x2) * (x1 - x2) - r;

PlutDem
17.09.2014, 16:29
Оказалось, всего то забыл 2*a заключить в скобки.

nubideus
17.09.2014, 18:19
лол
(не могу трифорс)

Psijic
18.09.2014, 13:18
Казалось бы, причем здесь flash

Gerbert
18.09.2014, 13:36
Казалось бы, причем здесь flash
А компоненты feathers?

Psijic
19.09.2014, 16:40
А компоненты feathers?
Компоненты feathers здесь тем более ни при чем, а вообще если вопрос - как они относятся к flash, так это Adobe Gaming SDK (http://www.adobe.com/devnet/games.html)

Gerbert
19.09.2014, 17:08
При чем sdk? Вам же никто не сказал, что вопрос о компонентах обсуждается, как минимум в другой ветке и как максимум на офф сайте? Какая Вам разница относится это к флешу или нет, Вы идеологический лидер профсоюза флешеров чтоль?)