Html 如何在画布上制作药丸形状?(圆角矩形)
玩一个突破克隆人,想做圆角加电 有人能给我指出正确的方向吗 谢谢 您可以执行以下操作: HTML: 如图所示,您可以执行以下操作: HTML: 如图所示,一种简单的方法是使用直角曲线平滑拐角Html 如何在画布上制作药丸形状?(圆角矩形),html,canvas,Html,Canvas,玩一个突破克隆人,想做圆角加电 有人能给我指出正确的方向吗 谢谢 您可以执行以下操作: HTML: 如图所示,您可以执行以下操作: HTML: 如图所示,一种简单的方法是使用直角曲线平滑拐角 function roundRect(x0, y0, x1, y1, r, color) { var w = x1 - x0; var h = y1 - y0; if (r > w/2) r = w/2; if (r > h/2) r = h/2; ctx
function roundRect(x0, y0, x1, y1, r, color)
{
var w = x1 - x0;
var h = y1 - y0;
if (r > w/2) r = w/2;
if (r > h/2) r = h/2;
ctx.beginPath();
ctx.moveTo(x1 - r, y0);
ctx.quadraticCurveTo(x1, y0, x1, y0 + r);
ctx.lineTo(x1, y1-r);
ctx.quadraticCurveTo(x1, y1, x1 - r, y1);
ctx.lineTo(x0 + r, y1);
ctx.quadraticCurveTo(x0, y1, x0, y1 - r);
ctx.lineTo(x0, y0 + r);
ctx.quadraticCurveTo(x0, y0, x0 + r, y0);
ctx.closePath();
ctx.fillStyle = color;
ctx.fill();
}
一个简单的方法是使用直角曲线来平滑拐角
function roundRect(x0, y0, x1, y1, r, color)
{
var w = x1 - x0;
var h = y1 - y0;
if (r > w/2) r = w/2;
if (r > h/2) r = h/2;
ctx.beginPath();
ctx.moveTo(x1 - r, y0);
ctx.quadraticCurveTo(x1, y0, x1, y0 + r);
ctx.lineTo(x1, y1-r);
ctx.quadraticCurveTo(x1, y1, x1 - r, y1);
ctx.lineTo(x0 + r, y1);
ctx.quadraticCurveTo(x0, y1, x0, y1 - r);
ctx.lineTo(x0, y0 + r);
ctx.quadraticCurveTo(x0, y0, x0 + r, y0);
ctx.closePath();
ctx.fillStyle = color;
ctx.fill();
}
副本;请特别参阅。下次,请先在网站或网页上搜索答案;请特别参阅。下一次,请先在网站上搜索答案。很好的图片,但使用arcTo要简单得多,不是吗?正如我在你大概正在写答案时发现并链接到的重复问题所证明的那样。@Phrogz:使用贝塞尔圆弧进行各向异性舍入非常简单,四分之一圆和二次贝塞尔圆弧之间的差异非常小,在大多数情况下都可以接受。在我看来,Canvas-arc/arcTo的设计相当糟糕,我甚至发现过去浏览器之间存在兼容性问题:我通常使用arc只是为了画一个完整的圆圈。你说的是对的,但是我认为贝塞尔二次曲线更适合这个用途。很好的图形,但是使用arcTo要简单得多,不是吗?正如我在你大概正在写答案时发现并链接到的重复问题所证明的那样。@Phrogz:使用贝塞尔圆弧进行各向异性舍入非常简单,四分之一圆和二次贝塞尔圆弧之间的差异非常小,在大多数情况下都可以接受。在我看来,Canvas-arc/arcTo的设计相当糟糕,我甚至发现过去浏览器之间存在兼容性问题:我通常使用arc只是为了画一个完整的圆圈。关于重复项你是对的,但我认为贝塞尔二次型更适合这种用途。它在一些地方被破坏了。JSFIDLE也不起作用。它在几个地方坏了。jsfiddle也不起作用。
function roundRect(x0, y0, x1, y1, r, color)
{
var w = x1 - x0;
var h = y1 - y0;
if (r > w/2) r = w/2;
if (r > h/2) r = h/2;
ctx.beginPath();
ctx.moveTo(x1 - r, y0);
ctx.quadraticCurveTo(x1, y0, x1, y0 + r);
ctx.lineTo(x1, y1-r);
ctx.quadraticCurveTo(x1, y1, x1 - r, y1);
ctx.lineTo(x0 + r, y1);
ctx.quadraticCurveTo(x0, y1, x0, y1 - r);
ctx.lineTo(x0, y0 + r);
ctx.quadraticCurveTo(x0, y0, x0 + r, y0);
ctx.closePath();
ctx.fillStyle = color;
ctx.fill();
}