2011-07-04 20 views
7

Bir html kanvasında eğri oklar çizmeye çalışıyorum. Eğri çizgi çizmek için hiç problemim yok ama > hattının sonuna (yön) nasıl ekleyeceğimi bilmiyorum.HTML Kanvas - Eğri okları çiz

ctx.beginPath(); 
    ctx.fillStyle = "rgba(55, 217, 56,"+ opacity +")"; 
    ctx.moveTo(this.fromX,this.fromY); 
    ctx.quadraticCurveTo(this.controlX, this.controlY, this.toX, this.toY); 
ctx.stroke(); 

Fikrim sonunda çizginin küçük bir bölümünü alıyor ve bir üçgen çiziyor. Satırdaki bir noktanın koordinatını nasıl alabilirim?

Aşağıda daha iyi anlaşılması için görüntü verilmiştir. Yani aşağı atmak

enter image description here

: Bir kuadratik eğrisi kullandığınız yana

Curve with arrow

cevap

15

, size ok başının "yönünde" işaret eden bir çizgi oluşturan iki puan biliyorum trig bir smidge ve kendine bir çözüm var. İşte sizin için yapacağım bir genelleştirilmiş fonksiyon var:

http://jsfiddle.net/SguzM/

function drawArrowhead(locx, locy, angle, sizex, sizey) { 
    var hx = sizex/2; 
    var hy = sizey/2; 

    ctx.translate((locx), (locy)); 
    ctx.rotate(angle); 
    ctx.translate(-hx,-hy); 

    ctx.beginPath(); 
    ctx.moveTo(0,0); 
    ctx.lineTo(0,1*sizey);  
    ctx.lineTo(1*sizex,1*hy); 
    ctx.closePath(); 
    ctx.fill(); 

    ctx.translate(hx,hy); 
    ctx.rotate(-angle); 
    ctx.translate(-locx,-locy); 
}   

// returns radians 
function findAngle(sx, sy, ex, ey) { 
    // make sx and sy at the zero point 
    return Math.atan2((ey - sy), (ex - sx)); 
} 
+5

+1, keşke burada yapılan değiştirin: http://jsfiddle.net/SguzM/1/ atan 'kullanımını değiştirmektir negatif açıları desteklemek ve sıfıra sıfıra inmeyi önlemek için "a" a "a" denir. – Variant

+0

Ah, İyi düşün! –

+0

çok iyi teşekkürler ikiniz de – deep