利用Canvas怎样画椭圆,方法及代码是什么
Admin 2022-07-15 群英技术资讯 985 次浏览
今天这篇我们来学习和了解“利用Canvas怎样画椭圆,方法及代码是什么”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“利用Canvas怎样画椭圆,方法及代码是什么”有一定的帮助。有这方面学习需要的朋友就继续往下看吧!首先我们来看一下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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了CSS中的导航栏和下拉菜单的实现的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在使用表单提交数据的时候,为了减少用户的一些操作,使用选择框是一个好主意。本章给大家介绍html如何实现获取选择框信息
什么是盒子呢?拿下举例,我们可以把每个红框都比作一个盒子,他们可以是任意的HTML元素。盒子模型所谓盒子模型:就是把HTML页面中的布局元素看作是一个矩形的盒子,也就...
这篇文章主要介绍了HTML页面缩小后显示滚动条的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
css自定义属性的继承:1、如果给定的element没有属性值,就会继承父类的元素值。2、css自定义属性的最终表现形式是computed值,子样式风格中找不到这个变量。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008