Все привет, хочу сделать сайт чтобы строить график линейной функции через canvas.
Самое простое что придумал вот:
let k = +document.getElementById("k").value;
let b = +document.getElementById("b").value;
let x1 = +document.getElementById("x1").value;
let x2 = +document.getElementById("x2").value;
let posX1, posY1, posX2, posY2;
var canvas = document.getElementById("canvas2d");
var context = canvas.getContext("2d");
context.fillStyle = "#e6f0d3";
context.fillRect(0, 0, canvas.width, canvas.height);
// Рисуем ось X красным цветом
context.beginPath();
context.moveTo(0, canvas.height / 2);
context.lineTo(canvas.width, canvas.height / 2);
context.strokeStyle = '#ff0000';
context.stroke();
// Рисуем ось Y зелёным цветом
context.beginPath();
context.moveTo(canvas.width / 2, 0);
context.lineTo(canvas.width / 2, canvas.height);
context.strokeStyle = '#00ff00';
context.stroke();
context.font = "8px Verdana";
context.strokeStyle = "black";
context.strokeText("(x:0;y:0)", canvas.width / 2 + 5, canvas.height / 2 + 10);
function drawGraph() {
k = +document.getElementById("k").value;
b = +document.getElementById("b").value;
x1 = +document.getElementById("x1").value;
x2 = +document.getElementById("x2").value;
posY1 = k * x1 + b;
posY2 = k * x2 + b;
context.beginPath();
context.moveTo(x1, posY1);
context.lineTo(x2, posY2);
context.strokeStyle = '#00ff00';
context.stroke();
}
<main id="app">
<header>
<h1>Построение графика линейной функции</h1>
</header>
<h3>Чтобы построить график функции вида - y = kx + b,<br>введите коэффициенты k и b ...</h3>
<br>
<br>
<br>
<form id="form">
<input type="text" id="k" name="k" placeholder="введите k">
<input type="text" id="b" name="b" placeholder="введите b"><br><br>
<input type="text" id="x1" name="x1" placeholder="введите x1">
<input type="text" id="x2" name="x2" placeholder="введите x2">
<a type="button" name="submit" id="submit" onclick="drawGraph()">Построить график</a>
<br>
<br>
</form>
<div id="answer">
<h3>Чтобы построить график линейной функции,<br> которым является прямая нужно минимум две точки.<br>Для этого возмем какие нибудь 2 значения x,<br>и посчитаем координаты по y ..</h3>
<br>
<h3>1 Точка:Пусть X1 = 3, тогда y = k3 + b,подставим наши значения получим координату Y для первой точки.</h3><br>
<h3>2 Точка:Пусть X2 = -2, тогда y = -k2 + b,подставим наши значения получим координату Y для второй точки.</h3>
</div>
<canvas id="canvas2d" width="698" height="500"></canvas>
</main>
В общем пытаюсь получать координаты и коэффициенты из html input, преобразовать их в число и находить координату по y.
Функция drawGraph()
выполняется по нажатию и в ней рисуется именно график функции, я уже поместил код где я присваиваю переменным значения из input прямо в функцию думал проблема в том, что он берет начальные (т.e никакие значения).
Кто нибудь может глянуть, что я делаю не так?
На самом деле код работает. Просто не учтено два условия
x
отличающимися на 2-3 единицы, построенную линию будет практически невозможно заметить.Для решения можно воспользоваться функциями canvas такими как:
В итоге может получиться следующий код:
let k = +document.getElementById("k").value;
let b = +document.getElementById("b").value;
let x1 = +document.getElementById("x1").value;
let x2 = +document.getElementById("x2").value;
let posX1, posY1, posX2, posY2;
var canvas = document.getElementById("canvas2d");
var context = canvas.getContext("2d");
context.fillStyle = "#e6f0d3";
context.fillRect(0, 0, canvas.width, canvas.height);
// Рисуем ось X красным цветом
context.beginPath();
context.moveTo(0, canvas.height / 2);
context.lineTo(canvas.width, canvas.height / 2);
context.strokeStyle = '#ff0000';
context.stroke();
// Рисуем ось Y зелёным цветом
context.beginPath();
context.moveTo(canvas.width / 2, 0);
context.lineTo(canvas.width / 2, canvas.height);
context.strokeStyle = '#00ff00';
context.stroke();
context.font = "8px Verdana";
context.strokeStyle = "black";
context.strokeText("(x:0;y:0)", canvas.width / 2 + 5, canvas.height / 2 + 10);
function drawGraph() {
k = +document.getElementById("k").value;
b = +document.getElementById("b").value;
x1 = +document.getElementById("x1").value;
x2 = +document.getElementById("x2").value;
posY1 = k * x1 + b;
posY2 = k * x2 + b;
context.save();
context.translate(canvas.width / 2, canvas.height / 2);
context.scale(1, -1);
context.beginPath();
context.moveTo(x1, posY1);
context.lineTo(x2, posY2);
context.strokeStyle = '#0000ff';
context.stroke();
context.restore();
}
<main id="app">
<form id="form">
<input type="text" id="k" name="k" placeholder="введите k" value="1">
<input type="text" id="b" name="b" placeholder="введите b" value="0"><br>
<input type="text" id="x1" name="x1" placeholder="введите x1" value="-70">
<input type="text" id="x2" name="x2" placeholder="введите x2" value="70">
<a type="button" name="submit" id="submit" onclick="drawGraph()">Построить график</a>
</form>
<canvas id="canvas2d" width="140" height="140"></canvas>
</main>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый вечер проблема следуйщая, при респонсиве слайдера пропадают его картинки
На странице есть span <span id="chart_title">Cur</span> Как сделать так, чтобы ему присваивались значения переменной, даже если переменная меняет свое...
API на ASPNET отдает мне xml, как вытянуть данные из него на nodejs? Пытался конвертнуть xml в json, но из входящих 3 страниц xml я получил 12 страниц json