html5画布拉伸一个矩形的一面

时间:2013-01-13 16:31:31

标签: html5 canvas

是否有可能我可以伸展一个矩形的边,并将其形状从直线改为其他类似圆弧的东西,或者从中心拉伸它,如下图所示

enter image description here

3 个答案:

答案 0 :(得分:3)

您可能不希望使用其他人建议的弧线,因为弧线只会给你一个弧线。更好的方法是将矩形(4边)表示为4立方贝塞尔曲线。具有与起点和终点共线的控制点的三次贝塞尔曲线将产生一条直线,因此您仍然可以表示一个普通的矩形。然后,当您想要将两侧拉伸成曲线时,只需根据所需的曲线向外,向上或向下移动控制点。得到quick understanding of beziers可能是有益的。

我会做一个图片来更好地说明这一点,并在几分钟内将其包括在内。

Constructing a rectangle out of cubic beziers

因此,当我们绘制矩形时,代码看起来像这样:

ctx.moveTo(p1.x,p1.y);
ctx.bezierCurveTo(cp1.x,cp1.y,cp2.x,cp2.y,p2.x,p2.y);
ctx.bezierCurveTo(cp3.x,cp3.y,cp4.x,cp4.y,p3.x,p3.y);
ctx.bezierCurveTo(cp5.x,cp5.y,cp6.x,cp6.y,p4.x,p4.y);
ctx.bezierCurveTo(cp7.x,cp7.y,cp8.x,cp8.y,p1.x,p1.y);

答案 1 :(得分:0)

只需绘制一个矩形即可实现此目的。但是,您可以绘制三条线并为第四条绘制弧形。 context.arc()上的Here's a tutorial

答案 2 :(得分:0)

你可以使用quadraticCurveTo函数它有4个参数并且很容易使用看看

的例子

http://jsfiddle.net/55Ws3/

<canvas width="800" height="800" id="world" style="border: 1px solid red;"><p class="noCanvas">You need a <a href="#">modern browser</a> to view this.</p></canvas>


var canvasElement = document.getElementById('world');
// Always check for properties and methods, to make sure your code doesn't break 
// in other browsers.
if (canvasElement && canvasElement.getContext) {
    // Get the 2d canvasContext.
    // Remember: you can only initialize one canvasContext per element.
    var canvasContext = canvasElement.getContext('2d');
    if (canvasContext) {
        canvasContext.beginPath();
        canvasContext.moveTo(100, 200);
        canvasContext.lineTo(200, 200);
        canvasContext.quadraticCurveTo(325, 250, 200, 300);
        canvasContext.lineTo(100, 300);
        canvasContext.lineTo(100, 200);
        canvasContext.fillStyle = 'red';
        canvasContext.strokeStyle = 'red';
        canvasContext.lineWidth = 2;
        canvasContext.fill();
        canvasContext.stroke();
        canvasContext.closePath();
    }
}