2011-06-16 17 views
7

Yeniden boyutlandırılabilir (sayfa içeriğine göre), ancak düz yerine elle çizilmiş gibi görünen dikey bir çizgi çizmek istiyorum.svg/canvas kullanarak düzensiz/elle çizilmiş çizgi nasıl çizilir?

Bunu başarmak için SVG veya Canvas kullanmayı düşünüyorum. Hat, web sayfamın yanından aşağıya doğru ilerleyecek, dolayısıyla kabın üst ve alt kısmı arasında ölçeklenebilmesi gerekiyor. Bunu nasıl başarabilirim?

+0

zor Sesler:

İşte başlangıç ​​için bir örnek. Tekrarlanan bir arka plan resmi kullanamayacağınızdan emin misiniz? – nkorth

+0

Sadece y'yi tekrarlamak, kalıbın sonuna ulaşmadığınız sürece çizginin hizalanmadığı noktalar olacaktır. – Jeepstone

+0

Eh, bu sadece bir trackpad ile çizildi, ancak GIMP'deki Shear aracıyla çalışmayı başarabiliyordum: http://jsfiddle.net/nkorth/K6r3u/embedded/result/ – nkorth

cevap

10

Yani jitter ile bir çizgi çizmek ister misiniz?

Y ekseni noktası parçalarının tümü eşit aralıklarla bir dizi ardışık Bezier eğrisi çizmeyi deneyin ve x değerlerini bir miktarına rasgele hale getirin.

var can = document.getElementById('canvas1'); 
 
var ctx = can.getContext('2d'); 
 

 
function addJitteryBezier(fromx, fromy, tox, toy) { 
 
var diffx = tox - fromx; 
 
var diffy = toy - fromy; 
 
    
 
var neg = Math.random()*diffy/5; // so the x value can go positive or negative from the typical 
 
    
 
    
 
ctx.bezierCurveTo(
 
-neg + fromx + 2*(Math.random()*diffy/8), fromy + .3*diffy, 
 
-neg + fromx + 2*(Math.random()*diffy/8), fromy + .6*diffy, 
 
tox, toy 
 
); 
 
} 
 

 
ctx.beginPath(); 
 
ctx.moveTo(50,0); 
 

 
var i = 0; 
 
while (i < 500) { 
 
    addJitteryBezier(50, i, 50, i+50); 
 
    i+= 50; 
 
} 
 

 
ctx.stroke();
<canvas id="canvas1" width="500" height="500"></canvas>

http://jsfiddle.net/GfGVE/9/

+0

Tam olarak yeni başlıyordum. dene, ama bir süredir Tuval'i kodlamadım. – nkorth

+1

Mükemmel örnek Simon. Çok teşekkürler. Ben de tamam oldu http://29a.ch/2010/2/10/hand-drawn-lines-algorithm-javascript-canvas-html5 bulundu. Tek sorun, hatların bazen eğrilerin buluştuğu noktada bir tepe noktası oluşturmasıdır. – Jeepstone

+0

Evet, bunun etrafında yollar var ... Bir eğrinin LAST kontrol noktasında gerçekten negatif X değeri varsa, bir sonraki eğrinin İLK kontrol noktasının pozitif bir değere sahip olmasını istersiniz. Böylece ek kontroller yapabilir ve 2. eğrinin ilk kontrol noktasının daima tersi işaret olduğundan emin olabilirsiniz. Bu kafa karıştırıcı geliyorsa, örneğimi bu gibi –

İlgili konular