2012-03-11 123 views
0

我想知道是否有任何JavaScript庫來幫助渲染圖形。我搜索谷歌,沒有找到任何工具。我想在畫布上製作高斯曲線。Html5 Canvas Javascript庫?

+0

我預計這將在不到20分鐘內作爲重複或投票問題關閉。目前您發現了哪些工具? – 2012-03-11 03:20:12

+0

唯一值得的地方是html5畫布教程...但沒有「圖書館」 – Delarn 2012-03-11 03:25:14

+3

https://www.google.com/search?q=canvas+libraries - > [第一個搜索結果](http:/ /javascript.open-libraries.com/utilities/drawing/10-best-javascript-drawing-and-canvas-libraries/)。 – 2012-03-11 03:30:12

回答

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 2012-03-11 03:32:52

+0

@Delarn過一段時間後你會習慣它) – 2012-03-11 03:34:17

+0

我知道,我已經離開了web開發10年,現在新的有趣的技術已經出來了,我重新打了一遍。尋求好的信息是非常困難的。謝謝你的幫助。 – Delarn 2012-03-11 03:36:03

2

有幾個html5 canvas javascript庫。一個更完整的人是paper.js

+0

謝謝你會看看! – Delarn 2012-03-12 02:49:25

2

Here是JavaScript庫

+0

謝謝......我正在開發Android系統,所以rapahel是個大不了;)但是謝謝! – Delarn 2012-03-12 02:48:56

3

我已經使用並推薦KineticJS library在拉斐爾,紙和加工之間砸雜誌比較不錯。它會定期進行維護和更新。

1

Paper.js對於HTML5畫布非常有用。如前所述,您應該避免使用基於SVG或VML的庫,因爲大多數庫不能在Android設備上運行。