利用Canvas怎样画椭圆,方法及代码是什么
Admin 2022-07-15 群英技术资讯 535 次浏览
首先我们来看一下canvas自带的绘制椭圆的方法
ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)。
参数(从左到右):
(起点x,起点y,半径x,半径y,旋转的角度,起始角,结果角,顺时针还是逆时针)
我们来看canvas自带的绘制椭圆的方法代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>椭圆</title> </head> <body> <canvas id="canvas" style="border:1px solid #aaa;display:block;margin:50px auto;"> 当前浏览器不支持Canvas,请更换浏览器后再试 </canvas> <script> window.onload = function(){ var canvas = document.getElementById("canvas"); var ctx=canvas.getContext('2d'); canvas.width = 800; canvas.height = 800; if(ctx.ellipse){ ctx.ellipse(300,300,200,100,0,0,Math.PI*2); ctx.fillStyle="blue"; ctx.strokeStyle="#000"; ctx.fill(); ctx.stroke(); }else{ alert("no ellipse!"); } } </script> </body> </html>
canvas画的椭圆效果如下:
说明:这种方法目前似乎只有谷歌支持,其他浏览器还未存在ellipse()。
既然上述方法无法支持其他浏览器,我们就来看看其他canvas绘制椭圆的方法。
一、利用canvas画圆的方法来绘制一个椭圆
这种方法用到了一个canvas函数scale,scale函数能实现canvas的缩放。缩放有水平和垂直两个方向,代码中把canvas水平方向放大了,而垂直方向不变,因此,原来arc画出的圆形就变成了一个椭圆。
canvas绘制椭圆的代码如下:
<!DOCTYPE HTML> <html> <head> <style> body { margin: 0px; padding: 0px; } </style> </head> <body> <canvas id="myCanvas" width="578" height="200"></canvas> <script> var canvas = document.getElementById('myCanvas'); var context = canvas.getContext('2d'); var centerX = 0; var centerY = 0; var radius = 50; // save state context.save(); // translate context context.translate(canvas.width / 2, canvas.height / 2); // scale context horizontally context.scale(2, 1); // draw circle which will be stretched into an oval context.beginPath(); context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false); // restore to original state context.restore(); // apply styling context.fillStyle = 'pink'; context.fill(); context.lineWidth = 5; context.strokeStyle = 'black'; context.stroke(); </script> </body> </html>
canvas椭圆效果如下:
二、canvas画椭圆之使用贝赛尔曲线绘制椭圆
这种方法绘制椭圆是把一个椭圆分成了4条贝塞尔曲线,用他们连成了一个椭圆。
canvas绘制椭圆的代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>椭圆</title> </head> <body> <canvas id="canvas" style="border:1px solid #aaa;display:block;margin:50px auto;"> 当前浏览器不支持Canvas,请更换浏览器后再试 </canvas> <script> var canvas = document.getElementById("canvas"); canvas.width = 600; canvas.height = 600; var context = canvas.getContext("2d"); context.lineWidth = 10; context.strokeStyle="black"; BezierEllipse2(context, 470, 200, 100, 20); //椭圆 function BezierEllipse2(ctx, x, y, a, b){ var k = .5522848, ox = a * k, // 水平控制点偏移量 oy = b * k; // 垂直控制点偏移量</p> <p> ctx.beginPath(); //从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线 ctx.moveTo(x - a, y); ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b); ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y); ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b); ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y); ctx.closePath(); ctx.stroke(); }; </script> </body> </html>
canvas椭圆效果如下:
三、canvas画椭圆之使用两条贝赛尔曲线画出椭圆
canvas绘制椭圆的代码如下:
//椭圆 CanvasRenderingContext2D.prototype.oval = function (x, y, width, height) { var k = (width/0.75)/2, w = width/2, h = height/2; this.beginPath(); this.moveTo(x, y-h); this.bezierCurveTo(x+k, y-h, x+k, y+h, x, y+h); this.bezierCurveTo(x-k, y+h, x-k, y-h, x, y-h); this.closePath(); return this; }
注意:这个方法只需要记住这一点,椭圆的宽度与画出椭圆的贝赛尔曲线的控制点的坐标比例如下:
贝塞尔控制点x=(椭圆宽度/0.75)/2。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
css3怎样实现立体翻转效果transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。当该属性与rotateX()、rotateY()、rotateZ()和rotat
这篇文章主要介绍了CSS3实现文本垂直排列的方法,也就是运用了CSS的writing-mode属性,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
这篇文章主要介绍了利用Node实现HTML5离线存储的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
用CSS3能够实现很多有趣的文字效果,这篇文章给大家分享的是用CSS3怎样做凹凸和火焰的文字效果的内容。小编觉得挺实用的,因此分享给大家做个参考,文中示例代码介绍的很详细,感兴趣的朋友接下来一起跟随小编看看吧。
方法:1、利用animation属性给图片元素绑定动画;2、利用“@keyframes”规则控制动画动作,实现渐渐隐藏效果,语法为“@keyframes 动画名{0%{opacity:1}100%{opacity:0}}”。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008