Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.06.2014, 12:24
him him вне форума
Аспирант
Отправить личное сообщение для him Посмотреть профиль Найти все сообщения от him
 
Регистрация: 19.08.2013
Сообщений: 93

как рисовать графики
в какой то момент заинтересовался рисование графиков.
погуглился... какие то варианты нашел.
их достаточно много оказалось.
поэтому вопрос!

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

посоветуйте, кто чем рисует...
я пробовал http://dumpz.org/13715/
но что то график как был прямолинеен так и остался...

хочется что то типа:
http://www.hi-fi.ru/sven/i/ht-435d/dimension_2b.jpg
Ответить с цитированием
  #2 (permalink)  
Старый 23.06.2014, 13:12
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Я ошибаюсь, или это рисуется просто множеством .lineTo(x, y)???
Ответить с цитированием
  #3 (permalink)  
Старый 23.06.2014, 13:41
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от Sweet
это рисуется просто множеством .lineTo(x, y)
Т.е. уот так уот:
<canvas id="canvas" width="400" height="100"></canvas>

<script>

var context = canvas.getContext("2d");
var y0 = canvas.height / 2;

context.beginPath();
context.moveTo(0, y0);

for (var x = 0; x < canvas.width; x++) {
  var y = f(x);
  context.lineTo(x, y + y0);
}

context.stroke();


function f(x) {
  return Math.sin(x / 16) * 48;
}

</script>
Ответить с цитированием
  #4 (permalink)  
Старый 23.06.2014, 16:02
him him вне форума
Аспирант
Отправить личное сообщение для him Посмотреть профиль Найти все сообщения от him
 
Регистрация: 19.08.2013
Сообщений: 93

возможно я как то не правильно изложил мысль. есть напимер точки:
$points1 = array(
    array(0,1)
    , array(1,3)
    , array(2,-4)
    , array(3,2)
    , array(4,0.5)
    , array(5,0.7)
    , array(6,-1)
    , array(7,4)
    , array(8,2)
);

надо красиво нарисовать график.
речь не идет о синусах и других матиматических функциях.
Ответить с цитированием
  #5 (permalink)  
Старый 27.08.2020, 18:57
Аватар для Nlk
Nlk Nlk вне форума
Кандидат Javascript-наук
Отправить личное сообщение для Nlk Посмотреть профиль Найти все сообщения от Nlk
 
Регистрация: 25.12.2016
Сообщений: 146

Sweet,
Интересный пример, спасибо
Ответить с цитированием
  #6 (permalink)  
Старый 28.08.2020, 01:46
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от him
надо красиво нарисовать график.
Если имеется всего несколько точек, то рисование lineTo сделает ломаную. Потому что за единицу размера (расстояние по оси Х между соседними точками) придется взять не один, а несколько пикселей.

Тебе нужен bezierCurveTo.
https://msiter.ru/references/html5-canvas/beziercurveto

Контрольные точки (см.картинку в статье) лежат на касательных, проходящих через твои точки. Остаётся только смекнуть углы наклона этих касательных.

Для любой точки (кроме двух крайних) можно считать, что касательная параллельна линии, проходящей через соседнюю точку слева и соседнюю точку справа. Какую касательную брать для первой и последней точки, сходу не придумывается, тут поэкспериментируй сам..

Ну и второй момент - где именно на этих касательных ставить контрольные точки. Навскидку подойдёт вариант брать по 1/3 единичного расстояния по оси Х, хотя опять же тут надо экспериментировать.

Последний раз редактировалось Alexandroppolus, 28.08.2020 в 03:38.
Ответить с цитированием
  #7 (permalink)  
Старый 29.08.2020, 00:59
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Alexandroppolus, на дату публикации поста обратите внимание.
Вряд ли автор все 6 лет дожидается ответа
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как включить синхронное выполнение строк? SkaN Элементы интерфейса 1 26.04.2012 22:28
Как писать код который легко поддерживать, расширять, читать. Policeman Общие вопросы Javascript 3 24.03.2012 05:40
Как при быстром многократном клике по кнопке обрабатывать только первый клик battrack jQuery 3 22.03.2012 10:47
Как отловить обратное событие "click" ? jsuse Общие вопросы Javascript 2 18.01.2012 00:16
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56