马黑黑 发表于 2022-3-1 08:43

HTML画布:画圆

要在canvas画布上画圆,需要用到 arc() 方法。arc 一词是弧形、做弧形运动之意,在此引申为画弧。画圆的思路就是画一个闭合的弧,因此必须先弄清 arc() 方法。

context.arc(x,y,r,sAngle,eAngle,);

参数多,但容易理解:

x : 圆心的x坐标
y : 圆心的y坐标
r : 园的半径
sAngle : 即 startAngle,园的起始角(弧度单位)
eAngle : 即 endAngle,园的结束角(弧度单位)
counterclockwise : 可选参数(一般用中括号表示),是否是逆时针方向:true(是)/ false(否)

园的起始角一般定义在三点钟方向,也就是水平方向的右端,值设定为0,这是sAngle的值设定;六点钟方向是 0.5π,九点钟方向是 1π,十二点钟方向是 1.5π,结束角或称终止角在三点钟方向(这样才能闭合),那么结束角的值就是 2π了。用JS表示,2π要用到 PI 函数,且要用到 Math 方法,表示为:2*Math.PI。

故此,假如我们以(200,200)为圆心,画一个半径为100的园,不考虑画圆的方向,语法如下:

context.arc(200,200,100,0,2*Math.PI);

举个实例:

<canvas id="cvs" width="400" height="400">你的浏览器不支持画布</canvas>

<script language="javascript">

var cvs = document.getElementById('cvs'); //画布标识
var cct = cvs.getContext('2d'); // 创建2d画笔
cct.strokeStyle = "darkblue"; // 画笔颜色
cct.lineWidth = 8; // 线条粗细
cct.beginPath(); // 开启路径
cct.arc(200,200,100,0,2*Math.PI); // 用 arc 方法设置园
cct.stroke(); // 将上面设定画出来

</script>

如果需要画实心圆,则在已有设定的基础上补充:① 先用 fillStyle 设定填充颜色(不设定默认用黑色):

cct.fillStyle = "tomato"; //定义填充色

② 再用 fill() 方法给圆着上底色:

cct.fill(); // 画(填充)圆

这时,cct.stroke 可以去掉,没有它圆一样画出来。如果不需要边框,可将边框相关的 strokeStyle 和 lineWidth 两句去掉,但一定不可以缺少 arc 方法那句,它是画圆的关键。

马黑黑 发表于 2022-3-1 08:47

<canvas id="cvs" width="400" height="400">你的浏览器不支持画布</canvas>

<script language="javascript">

var cvs = document.getElementById('cvs');
var cct = cvs.getContext('2d');
cct.strokeStyle = "darkblue";
cct.lineWidth = 8;
cct.beginPath();
cct.arc(200,200,100,0,2*Math.PI);
cct.stroke();


</script>

红影 发表于 2022-3-1 10:24

谢谢黑黑,这个画布能画的东西还不少呢{:4_204:}

红影 发表于 2022-3-1 10:30

0度是从哪开始起算的?

红影 发表于 2022-3-1 10:38

<canvas id="hy" width="400" height="400">你的浏览器不支持画布</canvas>

<script language="javascript">

var cvs = document.getElementById('hy');
var cct2 = cvs.getContext('2d');
cct2.strokeStyle = "red";
cct2.lineWidth = 6;
cct2.beginPath();
cct2.arc(200,200,100,0.1745,1.0472);
cct2.stroke();


</script>

红影 发表于 2022-3-1 10:49

我画的是10-60度,知道了,基础度数是圆点向右手方向顺时针起算的。

红影 发表于 2022-3-1 10:50

为什么不能叠在一起?本来想把这红色圆弧放在蓝色圆环上,复制了两段代码放一起根本就不显示了。

红影 发表于 2022-3-1 10:58

<canvas id="hy1" width="400" height="400">你的浏览器不支持画布</canvas>

<script language="javascript">

var cvs = document.getElementById('hy1');
var hy2 = cvs.getContext('2d');
hy2.strokeStyle = "darkblue";
hy2.lineWidth = 8;
hy2.beginPath();
hy2.arc(200,200,100,200/180*Math.PI,340/180*Math.PI);


hy2.stroke();


</script>

红影 发表于 2022-3-1 11:01

看到有2*的算式存在,果然用/可以是除号。算式可以用很方便,不用先去算好弧度了。

红影 发表于 2022-3-1 11:13

这个好像不能像画线段一样,在同一个画布上画多个不同圆弧。

马黑黑 发表于 2022-3-1 11:38

红影 发表于 2022-3-1 11:13
这个好像不能像画线段一样,在同一个画布上画多个不同圆弧。

可以的,圆心设定好了就可以

红影 发表于 2022-3-1 20:23

马黑黑 发表于 2022-3-1 11:38
可以的,圆心设定好了就可以

哦哦,或者改变半径也行的吧。

加林森 发表于 2022-3-1 20:41

这个园还可以:另存为。。。。。老黑厉害。{:4_199:}

加林森 发表于 2022-3-1 20:43

本帖最后由 加林森 于 2022-3-1 20:49 编辑 <br /><br />画不出来呢?{:4_203:}

马黑黑 发表于 2022-3-1 20:58

加林森 发表于 2022-3-1 20:43
本帖最后由 加林森 于 2022-3-1 20:49 编辑 画不出来呢?

id是唯一的

加林森 发表于 2022-3-1 21:01

马黑黑 发表于 2022-3-1 20:58
id是唯一的

改天好好学习一下,这个一下还搞不定的。

马黑黑 发表于 2022-3-1 21:02

红影 发表于 2022-3-1 20:23
哦哦,或者改变半径也行的吧。

要结合圆心

马黑黑 发表于 2022-3-1 21:06

加林森 发表于 2022-3-1 21:01
改天好好学习一下,这个一下还搞不定的。

对你来说是全新的东东,应用场景也不见得合适,加之必须与JS配套,难度很大

加林森 发表于 2022-3-1 21:14

马黑黑 发表于 2022-3-1 21:06
对你来说是全新的东东,应用场景也不见得合适,加之必须与JS配套,难度很大

就是就是,所以这个得好好去研究了。

马黑黑 发表于 2022-3-1 21:21

红影 发表于 2022-3-1 10:30
0度是从哪开始起算的?

原帖讲过的:三点钟方向。但画弧,可以自己定义,不一定从0开始
页: [1] 2 3 4
查看完整版本: HTML画布:画圆