2012-03-11 4 views
0

Я хотел бы знать, есть ли какие-либо библиотеки javascript, чтобы помочь в рендеринге графики. Я искал google и не нашел никаких инструментов. Я хочу сделать кривые Гаусса в холсте.Html5 Canvas Библиотеки Javascript?

+0

Я предсказываю, что это будет закрыто как дубликат или вопрос опроса менее чем за 20 минут. Какие инструменты вы нашли до сих пор? –

+0

Единственное место, где стоит html5 canvas tutorials ... но нет «библиотек» – Delarn

+3

https://www.google.com/search?q=canvas+libraries -> [результат первого поиска] (http://javascript.open-libraries.com/utilities/drawing/10-best-javascript-drawing-and-canvas-libraries/). –

ответ

2

Мне потребовалось 15 секунд, чтобы найти. Играйте с ним, пока не получите то, что вам нравится.

$(document).ready(drawGaussian); 

var canvasContext; 
var points; 
var noise = 0; 

function drawGaussian() 
{ 
canvasContext = document.getElementById("gaussian-canvas").getContext("2d"); 

document.getElementById("gaussian-canvas").onclick = cycleNoise; 

cycleNoise(); 
} 

function cycleNoise() 
{ 
canvasContext.clearRect(0, 0, 400, 400); 

var m = Math.random() > .4 
var amount = Math.round(Math.random() * 20000); 
var size = Math.round(Math.random() * 3)+1; 

document.getElementById("particles").innerHTML = amount; 
document.getElementById("size").innerHTML = size; 

switch(noise) 
{ 
    case 0: 
     drawGaussianField(amount, size, 200, 200, 400, 100, m); 
     document.getElementById("type").innerHTML = (m ? "Monochromatic" : "Chromatic") + " Field"; 
     break; 
    case 1: 
     drawGaussianCurves(amount, size, 200, 200, 400, 150, m); 
     document.getElementById("type").innerHTML = (m ? "Monochromatic" : "Chromatic") + " Curves"; 
     break; 
    case 2: 
     drawGaussianDiamond(amount, size, 200, 200, 400, 130, m); 
     document.getElementById("type").innerHTML = (m ? "Monochromatic" : "Chromatic") + " Diamond"; 
     break; 
    case 3: 
     drawGaussianOval(amount, size, 200, 200, 300, 300, m); 
     document.getElementById("type").innerHTML = (m ? "Monochromatic" : "Chromatic") + " Circle"; 
     break; 
    case 4: 
     drawGaussianBurst(amount, size, 200, 200, 120, 120, m); 
     document.getElementById("type").innerHTML = (m ? "Monochromatic" : "Chromatic") + " Burst"; 
     break; 
} 

noise++; 

if(noise > 4) noise = 0; 
} 


function drawGaussianField(amount, thickness, x, y, width, height, monochromatic) 
{ 
for(i = 0; i < amount; i++) 
{ 
    points = getGaussianPoints(); 

    setColor(monochromatic); 
    canvasContext.fillRect(x + ((width*.5) * points[3]), y + ((height*.5) * points[2]), thickness, thickness); 
} 
} 

function drawGaussianCurves(amount, thickness, x, y, width, height, monochromatic){ 
for(i = 0; i < amount; i++) 
{ 
    points = getGaussianPoints(); 

    setColor(monochromatic); 
    canvasContext.fillRect(x + ((width*.5) * points[0]), y + ((height*.5) * points[2]), thickness, thickness); 
} 
} 

function drawGaussianDiamond(amount, thickness, x, y, width, height, monochromatic){ 
for(i = 0; i < amount; i++) 
{ 
    points = getGaussianPoints(); 

    setColor(monochromatic); 
    canvasContext.fillRect(x + ((width*.5) * points[0]), y + ((height*.5) * points[3]), thickness, thickness); 
} 
} 

function drawGaussianOval(amount, thickness, x, y, width, height, monochromatic){ 
for(i = 0; i < amount; i++) 
{ 
    points = getGaussianPoints(); 

    setColor(monochromatic); 
    canvasContext.fillRect(x + ((width*.5) * points[0]), y + ((height*.5) * points[1]), thickness, thickness); 
} 
} 

function drawGaussianBurst(amount, thickness, x, y, width, height, monochromatic){ 
for(i = 0; i < amount; i++) 
{ 
    points = getGaussianPoints(); 

    setColor(monochromatic); 
    canvasContext.fillRect(x + ((width*.5) * points[2]), y + ((height*.5) * points[3]), thickness, thickness); 
} 
} 

function setColor(val){ 
if(val) 
{ 
    canvasContext.fillStyle = '#ffffff'; 
} 
else 
{ 
    canvasContext.fillStyle = "#"+Math.floor(Math.random()*16777215).toString(16); 
} 
} 

function getGaussianPoints(){ 
var x1, x2, w, y1, y2; 

do { 
    x1 = 2.0 * Math.random() - 1.0; 
    x2 = 2.0 * Math.random() - 1.0; 
    w = x1 * x1 + x2 * x2; 
} while (w >= 1.0); 

w = Math.sqrt((-2.0 * Math.log(w))/w); 
y1 = x1 * w; 
y2 = x2 * w; 

return [x1, x2, y1, y2]; 
} 
+0

Спасибо! Где вы это нашли? Интернет - странное место! – Delarn

+0

@ Delarn, вы привыкнете к нему через некоторое время;) –

+0

Я знаю, что 10 лет я оставил веб-разработчику, и теперь, когда я получаю удовольствие от новых технологий, я это переусердствую. И найти хорошую информацию довольно сложно. Спасибо за вашу помощь. – Delarn

2

Существует несколько javascript-библиотек html5. Один из наиболее полных из них является paper.js

+0

Спасибо, посмотрим! – Delarn

2

Here хорошее сравнение в разгроме журнала между Рафаэлем, и обработки бумаги Javascript библиотеки

+0

Спасибо ... Я разрабатываю для android, поэтому rapahel - большой нет;), но спасибо! – Delarn

3

Я использовал и рекомендовать KineticJS library. Он активно поддерживается и регулярно обновляется.

1

Paper.js довольно хорошо подходит для холста HTML5. Как уже упоминалось ранее, вы должны избегать библиотек на основе SVG или VML, потому что большинство из них не будут работать на устройствах Android.

Смежные вопросы