当前位置: 首页 > 面试题库 >

如何在html5画布中绘制椭圆形?

祖翰音
2023-03-14
问题内容

似乎没有绘制椭圆形形状的本机功能。我也不是在寻找蛋形。

是否可以绘制具有2个贝塞尔曲线的椭圆形?有人遇到过吗?

我的目的是画一些眼睛,实际上我只是使用弧线。提前致谢。

因此,scale()更改所有下一个形状的缩放比例。Save()之前保存设置,还原用于还原设置以绘制新形状而无需缩放。

感谢Jani

ctx.save();
ctx.scale(0.75, 1);
ctx.beginPath();
ctx.arc(20, 21, 10, 0, Math.PI*2, false);
ctx.stroke();
ctx.closePath();
ctx.restore();

问题答案:

更新:

  • 缩放方法可能会影响笔触宽度的外观
  • 正确的缩放方法可以保持笔画宽度不变
  • 画布具有Chrome现在支持的椭圆方法
  • 向JSBin添加了更新的测试

JSBin测试示例(已更新以测试其他人的答案以进行比较)

  • 贝塞尔曲线-基于包含矩形和宽度/高度的左上方绘制
  • 带中心的贝塞尔曲线-根据中心和宽度/高度绘制
  • 圆弧和缩放-基于绘制圆和缩放进行绘制
  • 二次曲线-用二次曲线绘制
    • 测试看起来不太一样,可能是实现
  • 画布椭圆-使用W3C标准ellipse()方法
    • 测试看起来不太一样,可能是实现

原版的:

如果您想要一个对称的椭圆形,您总是可以创建一个半径宽度的圆,然后将其缩放到所需的高度( 编辑:请 注意,这将影响笔触宽度的外观-
请参阅acdameli的答案),但是如果您想完全控制椭圆形这是使用贝塞尔曲线的一种方法。

<canvas id="thecanvas" width="400" height="400"></canvas>

<script>
var canvas = document.getElementById('thecanvas');

if(canvas.getContext) 
{
  var ctx = canvas.getContext('2d');
  drawEllipse(ctx, 10, 10, 100, 60);
  drawEllipseByCenter(ctx, 60,40,20,10);
}

function drawEllipseByCenter(ctx, cx, cy, w, h) {
  drawEllipse(ctx, cx - w/2.0, cy - h/2.0, w, h);
}

function drawEllipse(ctx, x, y, w, h) {
  var kappa = .5522848,
      ox = (w / 2) * kappa, // control point offset horizontal
      oy = (h / 2) * kappa, // control point offset vertical
      xe = x + w,           // x-end
      ye = y + h,           // y-end
      xm = x + w / 2,       // x-middle
      ym = y + h / 2;       // y-middle

  ctx.beginPath();
  ctx.moveTo(x, ym);
  ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
  ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
  ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
  ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
  //ctx.closePath(); // not used correctly, see comments (use to close off open path)
  ctx.stroke();
}

</script>


 类似资料:
  • 我想用javascript在响应画布上画一个圆圈。我得到了画布的宽度和高度,但由于div标签的宽度和高度%,我能够正确地画出圆圈。div标记的宽度和高度以%为单位,因为我想在单个页面上显示5个画布。是否有其他方法可以在一页上放置5块画布,并使用画布的高度和宽度在每个画布上画一个圆圈?还有一件事,我不想要绝对位置,因为根据浏览器的宽度,我想要改变画布的位置 图片:192.168。10.29/1.巴布

  • 实际上,我可以使用函数来完成。我从“HTML5画布-如何在图像背景上画一条线?”中得到的东西。但是我需要在不使用from函数的情况下绘制图像,如下所示:

  • 问题内容: 我想按画布画圆。这是我的代码: [MyActivity.java]: [View.java]: 所以我只有黑屏,没有圆圈。为什么不起作用?如何解决? 问题答案: 您可以覆盖视图的onDraw方法并绘制圆。 有关绘制自定义视图的更好参考,请查看官方的Android文档。 http://developer.android.com/training/custom-views/custom-

  • 主要内容:示例可以使用类的方法在图像上绘制椭圆形。 以下是这种方法的语法 - 该方法接受以下参数 - mat - 表示要在其上绘制矩形的图像的对象。 pt1 和 pt2 - 两个对象,表示要绘制的矩形的顶点。 color - 表示矩形颜色的标量对象(BGR)。 thickness - 表示矩形厚度的整数; 默认情况下,厚度值为。 类的构造函数接受类的对象,Size类的对象和double类型的变量,如下所示。 示

  • 问题内容: 我需要知道如何在画布上绘制多边形。不使用jQuery或类似的东西。 问题答案: 使用和创建一个路径:

  • 问题内容: 我发现只能填充矩形,而没有圆角,该怎么办? 问题答案: HTML5画布没有提供绘制带有圆角的矩形的方法。 如何使用和方法? 您也可以使用方法代替方法。