2013-02-06 173 views
1

我正在为我的项目创建一个自定义方法,它将创建多边形。 我有这样的:使用贝塞尔曲线

var c2 = document.getElementById('c').getContext('2d'); 
c2.fillStyle = '#f00'; 
c2.beginPath(); 
c2.moveTo(10, 20); 
c2.lineTo(20, 10); 
c2.lineTo(60, 10); 
c2.lineTo(60, 30); 
c2.lineTo(20, 30); 
c2.lineTo(10, 20); 
c2.closePath(); 
c2.fill(); 

现场演示:http://jsfiddle.net/yd7Wv/4292/ 现在,我需要用贝塞尔曲线,因为我需要圆边 你能帮助我与贝塞尔曲线,好吗? 最好的问候,丹尼尔

回答

1

您可以绘制使用

canvas_context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); 

canvas_context.quadraticCurveTo(cpx, cpy, x, y); 

贝塞尔曲线这些文档将帮助您

  1. http://www.w3.org/html/wg/drafts/2dcontext/html5_canvas/
  2. http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element
+0

感谢朋友:-) –

+0

如果您对此ans满意然后plz接受它,让其他c一个按照这个答案没有任何犹豫, –

+0

好吧,请稍等片刻 –

3

要么使用bezierCurveTo方法已经实施:

bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); 

http://www.w3schools.com/tags/canvas_beziercurveto.asp

或者你可以写类似下面,其中有一个更大的逼近自己bazier曲线法:

coord = function (x,y) { 
    if(!x) var x=0; 
    if(!y) var y=0; 
    return {x: x, y: y}; 
} 

function B1(t) { return t*t*t } 
function B2(t) { return 3*t*t*(1-t) } 
function B3(t) { return 3*t*(1-t)*(1-t) } 
function B4(t) { return (1-t)*(1-t)*(1-t) } 

function getBezier(percent,C1,C2,C3,C4) { 
    var pos = new coord(); 
    pos.x = C1.x*B1(percent) + C2.x*B2(percent) + C3.x*B3(percent) + C4.x*B4(percent); 
    pos.y = C1.y*B1(percent) + C2.y*B2(percent) + C3.y*B3(percent) + C4.y*B4(percent); 
    return pos; 
} 
+0

对不起,但我无法获得我想要的... –

+0

但你已经接受了答案;) –

+0

嗨,对不起。 。我接受了它,因为在它之后,我获得了它......但我用中风来绘制边框,并且我还使用了linejoin ='round'来使边框变圆....感谢亲爱的! –