Форум программистов, компьютерный форум, киберфорум
JavaScript: HTML5 Canvas
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 25.10.2017
Сообщений: 119

Построение графика в Canvas

16.05.2018, 22:56. Показов 6049. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Построил график в канвасе, но выводится не в правильной четверти. [del]
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <canvas id="myCan" width="520" height="520" style="border: 2px solid #000000"></canvas>
      <button type="button" onclick="drawgrid();">Нарисовать решетку</button>
      <button type="button" onclick="clearGrid();">Стереть</button>
      <button type="button" onclick="drawAxle();">Нарисовать оси</button>
      <button type="button" onclick="drawGraph();">Нарисовать график</button>
        <p>Мышь: <span id="x">0</span></p>
        <p> <span id="y">0</span></p>
        <hr>
</body>
<script>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
var can = document.getElementById('myCan');
var ctx = can.getContext('2d');
var step = 20;//шаг решотки
//рисуем
function func(x) {
    return(Math.pow(Math.tan(x/180*Math.PI),2));
}
function drawgrid(){
    for (var i = step; i<can.width; i+=step){//рисуем вертикальные
        ctx.beginPath();
        ctx.strokeStyle = '#eee';
        ctx.lineWidth = 1;
        ctx.moveTo(i, 0);
        ctx.lineTo(i, can.height);
        ctx.closePath();
        ctx.stroke();
}
    for (var i = step; i<can.height; i+=step){//рисуем Горизонтальные
        ctx.beginPath();
        ctx.moveTo(0, i);
        ctx.lineTo(can.width, i);
        ctx.closePath();
        ctx.stroke();
    }
 
}
  //стираем
  function clearGrid(){
    ctx.clearRect(0, 0, can.width, can.height);
  }
  function drawAxle(){
    // Рисуем ось X красным цветом
    ctx.beginPath();
    ctx.moveTo(0, can.height/2);
    ctx.lineTo(can.width, can.height/2);
    ctx.strokeStyle = 'red';
    ctx.lineWidth = 3;
    ctx.closePath();
    ctx.stroke();
     
    // Рисуем ось Y зелёным цветом
    ctx.beginPath();
    ctx.moveTo(can.width/2, 0);
    ctx.lineTo(can.width/2, can.height);
    ctx.strokeStyle = 'green';
    ctx.closePath();
    ctx.stroke();
  }
function drawGraph(){
const pi = 3.14159 * 25;
//alert(canvas.width/10);
  ctx.strokeStyle = "blue";
  ctx.beginPath();
  cx = can.width / 2;
  cy = can.height / 2;
  ctx.moveTo(cx, cy);
  for (i = 0; i<180*10; i+=5) {
    x = i/5;
    y = func(i);
    ctx.lineTo(cx+x, cy+y);
  }
  ctx.lineWidth = 1;
  ctx.stroke()
}
 
  //мыша
  can.addEventListener('mousemove', function(evt){
    document.getElementById('x').innerHTML = evt.pageX;
    document.getElementById('y').innerHTML = evt.pageY;
  });
HTML5
1
2
</script>
</html>
Миниатюры
Построение графика в Canvas  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2018, 22:56
Ответы с готовыми решениями:

Построение графика в JS
Необходимо построить график в js чтобы ось x - дата (лежит в виде строки в формате YYYY.MM.DD), y - время (лежит в виде строки в формате...

Построение графика
Всем привет. Есть такой готовый график Ссылка Я планирую его закинуть на сервер, как из файла вставить свои данные в этот...

Построение графика
Всем привет. Хочу вывести графики. Решил использовать highcharts.js. Подключил пример, работает. Только теперь не могу въехать как мне...

8
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
17.05.2018, 07:42
AbraHa, у Вас что-то с коэффициентами не то в строках 54-55 и начало рисования, по-видимому неправильно установлено.
0
1 / 1 / 0
Регистрация: 25.10.2017
Сообщений: 119
17.05.2018, 08:40  [ТС]
Цитата Сообщение от atanov Посмотреть сообщение
коэффициентами не то в строках 54-55
Вроде все правильно. В 54-55 строках я нахожу центр, начало координат.
Цитата Сообщение от atanov Посмотреть сообщение
начало рисования, по-видимому неправильно установлено
Это тоже правильно, как мне кажется. Проблема в том, что начало координат в самом Canvas`е - верхний левый угол. Это, я думаю, и есть причина ошибки. Я пробовал перевернуть Canvas - но тогда уже у меня график вообще не чертится. Вот код с перевернутым canvas`ом
Кликните здесь для просмотра всего текста

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
var can = document.getElementById('myCan');
var ctx = can.getContext('2d');
ctx.rotate(270/180*Math.PI);
ctx.translate(-520, 0);
var step = 20;//шаг решотки
//рисуем
function func(x) {
    return(Math.pow(Math.tan(x/180*Math.PI),2));
}
function drawgrid(){
    for (var i = step; i<can.width; i+=step){//рисуем вертикальные
        ctx.beginPath();
        ctx.strokeStyle = '#eee';
        ctx.lineWidth = 1;
        ctx.moveTo(i, 0);
        ctx.lineTo(i, can.height);
        ctx.closePath();
        ctx.stroke();
}
    for (var i = step; i<can.height; i+=step){//рисуем Горизонтальные
        ctx.beginPath();
        ctx.moveTo(0, i);
        ctx.lineTo(can.width, i);
        ctx.closePath();
        ctx.stroke();
    }
 
}
  //стираем
  function clearGrid(){
    ctx.clearRect(0, 0, can.width, can.height);
  }
  function drawAxle(){
    // Рисуем ось X красным цветом
    ctx.beginPath();
    ctx.moveTo(0, can.height/2);
    ctx.lineTo(can.width, can.height/2);
    ctx.strokeStyle = 'red';
    ctx.lineWidth = 3;
    ctx.closePath();
    ctx.stroke();
     
    // Рисуем ось Y зелёным цветом
    ctx.beginPath();
    ctx.moveTo(can.width/2, 0);
    ctx.lineTo(can.width/2, can.height);
    ctx.strokeStyle = 'green';
    ctx.closePath();
    ctx.stroke();
  }
function drawGraph(){
const pi = 3.14159 * 25;
//alert(canvas.width/10);
var i, cx, cy;
  ctx.beginPath();
  ctx.strokeStyle = "blue";
  cx = can.width / 2;
  cy = can.height / 2;
  ctx.moveTo(cx, cy);
  for(i = 0; i<180*10; i+=5) {
    x = i/5;
    y = Math.pow(Math.tan(x/180*Math.PI),2);
    ctx.lineTo(cx+x, cy+y);
  }
  ctx.lineWidth = 1;
  ctx.closePath();
  ctx.stroke();
}
 
  //мыша
  can.addEventListener('mousemove', function(evt){
    document.getElementById('x').innerHTML = evt.pageX;
    document.getElementById('y').innerHTML = evt.pageY;
  });
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
17.05.2018, 10:39
AbraHa, для начала, неплохо бы понять откуда у Вас должен рисоваться. Если от "0", "0", тогда он правильно выводит. А что выводит, так это надо с математической функцией разбираться. Форма графика правильно выходит?
0
1 / 1 / 0
Регистрация: 25.10.2017
Сообщений: 119
17.05.2018, 11:33  [ТС]
Цитата Сообщение от atanov Посмотреть сообщение
Форма графика правильно выходит?
Да. Форма графика очень даже похожа на правду
Миниатюры
Построение графика в Canvas  
0
1 / 1 / 0
Регистрация: 25.10.2017
Сообщений: 119
17.05.2018, 11:39  [ТС]
Как-то надо вывести график в первой четверти
Миниатюры
Построение графика в Canvas  
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
17.05.2018, 12:44
AbraHa, судя по всему у Вас что-то не так с математикой, поэксперементируйте с формулой в 6 строке.
0
87 / 48 / 24
Регистрация: 29.11.2016
Сообщений: 243
18.05.2018, 04:26
Всё у Вас нормально. Ось Y в canvas'e направлена вниз, а вам вверх нужно.
В функции drawGraph() вместо y = func(i) поставьте y = -func(i)
0
1 / 1 / 0
Регистрация: 25.10.2017
Сообщений: 119
21.05.2018, 21:20  [ТС]
Я так пробовал. Не помогло
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2018, 21:20
Помогаю со студенческими работами здесь

Построение графика функции на HTML
Помогите разобраться, как написать правильно график функции: sin2x. Если не сложно помочь написать или найти что-то подобное, заранее всем...

Динамическое построение графика по получаемым данным
всем привет, прошу помочь с записыванием данных в массив с целью построения графика изменения температуры, написана веб страничка которая...

Canvas html5, как разместить черный пискель в центре canvas'a?
как разместить черный пискель в центре canvas'a?

Построение графика функции (canvas)
Как построить функцию fabs(sin(x))+fabs(cos(x)) используя метод Canvas? Никак не могу реализовать на C++ builder. Даны такие исходники:...

Построение графика производной для каждого графика из 3 режимов
Дорогие друзья, прошу помочь доделать три программы. В каждой программе выводится по одному графику и нужно чтобы каждая программа выводила...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru