2012-06-29 3 views
4

Я пытаюсь представить некоторые данные на холсте HTML, и я столкнулся с проблемой, подобной this one. То есть размер моих данных не соответствует размеру моего холста.Javascript библиотека для передискретизации массива?

В одном случае я хотел бы построить сигнал шириной 1024 точки на холсте шириной 100 пикселей. (Например, звуковой сигнал.)

В другом экземпляре я хотел бы показать матрицу размером от 1024 до 5000 точек на холсте, высота которого составляет 100 пикселей в ширину и ширину 500 пикселей. (Например, звуковая спектрограмма.)

В обоих случаях мне нужно будет пересчитать данные, чтобы они помещались на холст. Кто-нибудь знает библиотеку/инструментарий/функцию в Javascript, который может это сделать?

** EDIT **

Я знаю, что есть много методов, я мог бы использовать здесь. Одна из возможностей - просто сбросить или дублировать точки данных. Известно, что отбрасывание/дублирование приводит к результатам, которые, как правило, выглядят «зубчатыми» или «блочными» (см. here и here). Я предпочел бы использовать немного более сложный алгоритм, который выводит более гладкие изображения, такие как Lanczos, bilinear или bicubic передискретизация. Любой из них удовлетворит мои потребности.

Мой вопрос не в том, какой алгоритм использовать, однако, речь идет о том, были ли какие-либо из них реализованы в библиотеках javascript с открытым исходным кодом. Удивительно, но я не смог найти много в JS. Кодирование моей собственной функции передискретизации, очевидно, является опцией, но я хотел сначала проверить сообщество SO, чтобы убедиться, что я не изобретал колесо.

(This) Ответ дает список кодов, который очень близок к тому, что я хочу, за исключением того, что он работает непосредственно с объектами canvas, а не с массивами данных, и это заставляет пропорции ввода и вывода быть одинаковыми. Если ничего не доступно, я могу определенно работать с этим, но я надеялся на решение, это немного более общий и гибкий, вдоль линий Matlab-х resample.)

+0

do yo означает только выборку каждого n-го значения? Это часть основ циклов/алгоритмов на любом языке. – FlavorScape

+1

Я не думаю, что эти типы алгоритмов были созданы в сообществе с открытым исходным кодом. В основном потому, что если вы используете такие алгоритмы, вы, вероятно, собираетесь использовать нечто более мощное, например, Java, C#, C++, Python, R или Matlab. Я думаю, вам, возможно, придется реализовать свою собственную библиотеку. – kevin628

+0

Хммм ... хорошо, хорошо знать. Спасибо за ваш вклад. –

ответ

1

использование холст масштаб

ctx.scale(xscale,yscale); 

вы можете определить масштабирование, вычислив скорость между вашим холстом и данные

ctx.scale(canvas_x/data_x,canvas_y/data_y) 
Смежные вопросы