Прямые не проходят через узел(точку 0 0). На этой странице я ищу корни системы Д.У. С постоянными коэффициентами. Предполагаю что линии будут проходить через центр и всегда существовать. Проверяю вещественные корни (лямбда) одного знака. Пожалуйста, помогите найти ошибку.
function calculate(a, b, c, d) {
t1.value = "Нажмите кнопку, чтобы посчитать.";
var xr = 0,
xi = 0,
yr = 0,
yi = 0,
state = -1;
var c1 = 1,
c2 = -a - d;
c3 = a * d - b * c;
t2.value = "x^2+" + c2 + "x+" + c3;
var D = c2 * c2 - 4 * c1 * c3;
t3.value = "Дискриминант =" + D;
if (D > 0) {
state = 1;
xr = (-c2 - Math.sqrt(D)) / 2 / c1;
yr = (-c2 + Math.sqrt(D)) / 2 / c1;
} else if (D == 0) {
state = 2;
xr = -c2 / 2 / c1;
yr = xr;
} else if (D < 0) {
state = 3;
xr = -c2 / 2 / a;
xi = -Math.sqrt(-D) / 2 / c1;
yr = -c2 / 2 / c1;
yi = Math.sqrt(-D) / 2 / c1;
}
t4.value = " x=" + xr.toFixed(4);
if (state == 3) {
t4.value += " " + xi.toFixed(4) + "i";
}
if (state != 2) {
t4.value += " x=" + yr.toFixed(4);
if (state == 3) {
t4.value += " " + yi.toFixed(4) + "i";
}
}
if (state == 1) {
if (xr < 0 && yr < 0) {
t5.value = "Корни вещественные и одного знака. Узел устойчивый.";
} else if (xr < 0 && yr > 0) {
t5.value = "Корни вещественные и разных знаков. Седло.";
} else if (xr > 0 && yr > 0) {
t5.value = "Корни вещественные и одного знака. Узел неустойчивый.";
}
}
if (state == 2) {
if (xr != 0) {
t5.value = "Корни вещественные, одинаковые. Вырожденный узел.";
} else {
t5.value = "Корни равны нулю. Параллельные линии."
}
}
if (state == 3) {
if (xr > 0) {
t5.value = "Вещественная часть больше нуля. Неустойчивый фокус.";
} else if (xr < 0) {
t5.value = "Вещественная часть меньше нуля. Устойчивый фокус.";
} else if (xr == 0) {
t5.value = "Вещественная часть равна нулю. Центр.";
}
}
t6.value = state;
var vx1, vx2, vy1, vy2
if (state != 3) {
var a2 = a - xr,
b2 = b;
if (a2 < 0) a2 = -a2;
if (b2 < 0) b2 = -b2;
while (a2 != b2) {
if (a2 > b2)
a2 = a2 - b2;
else b2 = b2 - a2;
}
vx1 = (a - xr) / b2;
vy1 = b / b2;
t7.value = vx1 + " вектор";
t8.value = vy1;
var a2 = d - yr,
b2 = c;
if (a2 < 0) a2 = -a2;
if (b2 < 0) b2 = -b2;
while (a2 != b2) {
if (a2 > b2)
a2 = a2 - b2;
else b2 = b2 - a2;
}
vx2 = c / b2;
vy2 = (d - yr) / b2;
t9.value = vx2 + " вектор";
t10.value = vy2;
}
var canva = document.getElementById("CANV");
var cont = canva.getContext("2d");
cont.clearRect(0, 0, 600, 600);
var limC1 = 1,
limC2 = 1;
for (C1 = -limC1; C1 < limC1; C1++) {
for (C2 = -limC2; C2 < limC2; C2++) {
if (C1 == 0 && C2 == 0) break;
var step = 0.1;
for (t = -10; t < 10; t += step) {
cont.beginPath()
var shx = 300,
shy = 300,
zx = 10,
zy = 10;
cont.moveTo(zx * C1 * vx1 * Math.exp(xr * t) + shx, zy * C2 * vx2 * Math.exp(yr * t) + shy);
cont.lineTo(zx * C1 * vy1 * Math.exp(xr * (t + step)) + shx, zy * C2 * vy2 * Math.exp(yr * (t + step)) + shy);
cont.stroke();
}
}
}
};
<html>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<head>
<title>
No title
</title>
<script src="Calc.js"></script>
</head>
<body>
<input id="a" type='number' value="0" step="0.0001">
<input id="b" type='number' value="0" step="0.0001">
<input type="button" onclick="calculate(parseFloat(a.value),parseFloat(b.value),parseFloat(c.value),parseFloat(d.value))" value="Посчитать"/></br>
<input id="c" type='number' value="0" step="0.0001">
<input id="d" type='number' value="0" step="0.0001">
<output id="t1" type="">Нажмите кнопку, чтобы посчитать</output></br>
<output id="t2" type=""></output></br>
<output id="t3" type=""></output></br>
<output id="t4" type=""></output></br>
<output id="t5" type=""></output></br>
<output id="t6" type=""></output></br></br>
<output id="t7" type=""></output></br>
<output id="t8" type=""></output></br></br>
<output id="t9" type=""></output></br>
<output id="t10" type=""></output></br>
<canvas id="CANV" width="600" height="600"></canvas>
</body>
</html>
Ответ из комментария:
Проблема решена. Неправильно считались лини. Верный вариант:
cont.moveTo(zx*C1*vx1*Math.exp(xr*t)+zx*C2*vx2*Math.exp(yr*t) +shx,zx*C1*vy1*Math.exp(xr*(t))+shx,zy*C2*vy2*Math.exp(yr*(t))+shy);
cont.lineTo(zx*C1*vx1*Math.exp(xr*(t+step))+zx*C2*vx2*Math.exp(yr*(t+step)) +shx,zx*C1*vy1*Math.exp(xr*(t+step))+shx,zy*C2*vy2*Math.exp(yr*(t+step))+shy);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть див, который движется медленнее относительно других элементов страницы при прокруткеУ этого дива фон задан изображением
Всем привет! есть у меня на поддомене сайт с wordpress вида twinмой_домен С главной страницей все ок, а при переходе на другие возникает 500 внутренняя...
Здравствуйте, при открытии страницы выполняется скриптПодскажите способы как добавить надпись "пожалуйста подождите" а когда скрипт загрузится...