HTML5 Canvas 绘制椭圆与椭圆弧的实现

本文介绍了如何使用HTML5 Canvas API来绘制椭圆和椭圆弧线,包括椭圆的圆心坐标、长半轴和短半轴长度、旋转角度以及弧线的起始和结束角度。同时提到了前端标准中角度单位的混乱,并推荐了Google的canvas-5-polyfill.js库以提高Canvas的兼容性。
摘要由CSDN通过智能技术生成

由于HTML Canvas 2D Context标准中并没有直接绘制椭圆与椭圆弧的方法,所以浏览器普遍没有这个方法,不过,Chrome支持ellipse方法,至于从哪个版本开始支持的,我就未查证了。IE11,Edge, Firefox, Safari目前最新版都还不支持。。。


所以,我们需要用JS来实现这个方法。原理就是用已经支持的其它方法来模拟ellipse方法,可以用lineTo, quadraticCurveTo, bezierCurveTo, arcTo, arc等方法来实现。


用lineTo来模拟的话,就是参数方程的形式,计算出椭圆上的点的坐标,逐点用lineTo绘制模拟椭圆。简单粗暴有效。


用quadraticCurveTo, bezierCurveTo是一种近似模拟,用贝塞尔曲线来拟合椭圆或椭圆弧,关键在于计算合适的控制点。有些特定场景下很适合。


用arcTo, arc来实现也比较简单,不需要复杂计算,由于arcTo, arc只提供了绘制正圆弧的功能,要绘制椭圆弧,配合scale变形就可以了。推荐使用该方法。实现代码如下:
 

if (CanvasRenderingContext2D.prototype.ellipse == undefined) {
  CanvasRenderingContext2D.prototype.ellipse = function(x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) {
    this.save();
    this.translate(x, y);
    this.rotate(rotation);
    this.scale(radiusX, radiusY);
    this.arc(0, 0, 1, startAngle, endAngle, antiClockwise);
    this.restore();
  }
}

使用示例:

//
var canvas = document.getElementById("canvas1"),
    ctx = canvas.getContext('2d');
//....
ctx.moveTo(100,200);
ctx.ellipse(300, 200, 100, 60, 0, 0, Math.PI, true);
ctx.stroke();

ellipse方法各参数的含义:

x, 椭圆圆心X坐标

y, 椭圆圆心Y坐标

radiusX, 长半轴长度

radiusY, 长半轴长度

rotation, 椭圆旋转角度 (单位是度不是弧度)

startAngle, 椭圆弧起始角弧度 (单位是弧度不是度!)

endAngle, 椭圆弧结束角弧度 (单位是弧度不是度!)

antiClockwise, 是否是逆时针方向绘制。true表示逆时针方向绘制椭圆弧,false顺时针方向绘制椭圆弧。


至于为什么一个方法内惊现 2 种角度单位,我只能说:前端标准就是这么乱!

Google出品的 canvas-5-polyfill.js 用于增强canvas兼容性,它也给canvas加上了ellipse方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值