Ошибка в логике рисования линий js [закрыто]

263
15 декабря 2016, 16:34

Прямые не проходят через узел(точку 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> 
  

Answer 1

Ответ из комментария:

Проблема решена. Неправильно считались лини. Верный вариант:

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);
READ ALSO
Как реализовать смену фона блока при прокрутке страницы?

Как реализовать смену фона блока при прокрутке страницы?

Есть див, который движется медленнее относительно других элементов страницы при прокруткеУ этого дива фон задан изображением

504
Где исправить настройку в .htaccess

Где исправить настройку в .htaccess

Всем привет! есть у меня на поддомене сайт с wordpress вида twinмой_домен С главной страницей все ок, а при переходе на другие возникает 500 внутренняя...

256
Ожидание загрузки страницы

Ожидание загрузки страницы

Здравствуйте, при открытии страницы выполняется скриптПодскажите способы как добавить надпись "пожалуйста подождите" а когда скрипт загрузится...

313