学习Canvas基础-绘制弧线和曲线

绘制曲线和弧线的方法
  • ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise)
    用于绘制圆或部分圆。
    参数:
    x-圆弧中心(圆心)的 x 轴坐标。
    y-圆弧中心(圆心)的 y 轴坐标。
    radius-圆弧的半径。
    startAngle-圆弧的起始点,x 轴方向开始计算,单位以弧度表示。
    endAngle-圆弧的终点,单位以弧度表示。
    anticlockwise-可选的Boolean值,如果为 true,逆时针绘制圆弧,反之,顺时针绘制。

  • ctx.arcTo(x1, y1, x2, y2, radius)
    用于在画布上绘制介于两个切线之间的弧线。
    参数:
    x1-第一个控制点的 x 轴坐标。
    y1-第一个控制点的 y 轴坐标。
    x2-第二个控制点的 x 轴坐标。
    y2-第二个控制点的 y 轴坐标。
    radius-圆弧的半径。

  • ctx.quadraticCurveTo(cpx, cpy, x, y)
    绘制二次贝塞尔曲线路径的方法。
    参数:
    cpx-控制点的 x 轴坐标。
    cpy-控制点的 y 轴坐标。
    x-终点的 x 轴坐标。
    y-终点的 y 轴坐标。

  • ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
    绘制三次贝赛尔曲线路径的方法。
    参数:
    cp1x-第一个控制点的 x 轴坐标。
    cp1y-第一个控制点的 y 轴坐标。
    cp2x-第二个控制点的 x 轴坐标。
    cp2y-第二个控制点的 y 轴坐标。
    x-结束点的 x 轴坐标。
    y-结束点的 y 轴坐标。

事例一
绘制圆弧路径ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise)

arc() 方法用于创建用于创建圆或部分圆。
在这里插入图片描述

绘制一整个圆。
<!-- 兼容性写法,在低版本时标签内部的文字才会显示 -->
  <canvas id="cont" width="500px" height="500px">你的浏览器版本过低,请升级浏览器或者使用chrome打开!</canvas>
  <script>
    //  获取canvas画布
    const canvas = document.querySelector('#cont')
    // 获取画布的应用上下文
    const ctx = canvas.getContext('2d')
    //绘制圆弧的方法
    // ctx.arc(圆心X,圆心Y,半径,开始角度,结束角度,顺时针还是逆时针)默认是顺时针,逆时针更改为true
    //绘制圆心在(200,200,半径为100的圆。
    ctx.beginPath()
    ctx.arc(200, 200, 100, 0, Math.PI*2 )
    ctx.lineWidth = 5
	// 显示路径
    ctx.stroke()
    ctx.closePath()
  </script>

在这里插入图片描述

绘制笑脸图像。
<!-- 兼容性写法,在低版本时标签内部的文字才会显示 -->
 <canvas id="cont" width="500px" height="500px">你的浏览器版本过低,请升级浏览器或者使用chrome打开!</canvas>
 <script>
   //  获取canvas画布
   const canvas = document.querySelector('#cont')
   // 获取画布的应用上下文
   const ctx = canvas.getContext('2d')
   //绘制圆弧的方法
   // ctx.arc(圆心X,圆心Y,半径,开始角度,结束角度,顺时针还是逆时针)默认是顺时针,逆时针更改为true
   // 绘制嘴巴
   ctx.beginPath()
   ctx.arc(200, 200, 70, 0, Math.PI )
   // 设置颜色
   ctx.strokeStyle='red'
   // 显示路径
   ctx.stroke()
   ctx.closePath()

   // 绘制脸蛋
   ctx.beginPath()
   ctx.arc(200, 200, 100, 0, Math.PI*2 )
   ctx.strokeStyle='#000'
   ctx.stroke()
   ctx.closePath()

   // 绘制左眼睛
   ctx.beginPath()
   ctx.arc(160, 170, 10, 0, Math.PI*2 )
   ctx.strokeStyle='#000'
   ctx.stroke()
   ctx.closePath()

   // 绘制右眼睛
   ctx.beginPath()
   ctx.arc(240, 170, 10, 0, Math.PI*2 )
   ctx.strokeStyle='#000'
   ctx.stroke()
   ctx.closePath()
 </script>

在这里插入图片描述

事例二
ctx.arcTo(x1, y1, x2, y2, radius)

arcTo() 方法用于在画布上绘制介于两个切线之间的弧。
这是一段绘制圆弧的简单的代码片段。基础点是蓝色的,两个控制点是红色的。在这里插入图片描述

 <!-- 兼容性写法,在低版本时标签内部的文字才会显示 -->
  <canvas id="cont" width="500px" height="500px">你的浏览器版本过低,请升级浏览器或者使用chrome打开!</canvas>
  <script>
    //  获取canvas画布
    const canvas = document.querySelector('#cont')
    // 获取画布的应用上下文
    const ctx = canvas.getContext('2d')
    ctx.beginPath()
    // 移动到起点位置
    ctx.moveTo(100,100)
    // ctx.arcTo(第一个控制点X,第一个控制点点Y,第二个控制点X,第二个控制点Y, 圆弧半径);
    ctx.arcTo(200,100,200,200, 50);
    //	ctx.fill() 
  	ctx.stroke()
    ctx.closePath()
  </script>

在这里插入图片描述

事例三
二次贝塞尔曲线ctx.quadraticCurveTo(cpx, cpy, x, y)

二次贝塞尔曲线需要两个点。第一个点是用于二次贝塞尔计算中的控制点,第二个点是曲线的结束点。曲线的开始点是当前路径中最后一个点。所以如果路径不存在,那么需要先使用 beginPath() 和 moveTo() 方法来定义开始点。
在这里插入图片描述

绘制一个聊天气泡
<!-- 兼容性写法,在低版本时标签内部的文字才会显示 -->
  <canvas id="cont" width="600px" height="400px">你的浏览器版本过低,请升级浏览器或者使用chrome打开!</canvas>
  <script>
    //  获取canvas画布
    const canvas = document.querySelector('#cont')
    // 获取画布的应用上下文
    const ctx = canvas.getContext('2d')

    //  使用quadraticCurveTo绘制二次贝塞尔曲线,完成消息框效果。
    //  ctx.quadraticCurveTo(控制点x, 控制点Y, 结束点x, 结束点y);
    //  放下画笔
    ctx.beginPath()
    // 移动画笔位置
    ctx.moveTo(200,200)
    ctx.quadraticCurveTo(150,200,150,150);
    ctx.quadraticCurveTo(150,100,200,100);
    //  画一条线段
    ctx.lineTo(300,100)
    ctx.quadraticCurveTo(350,100,350,150);
    ctx.quadraticCurveTo(350,200,250,200);
    ctx.quadraticCurveTo(250,240,180,250);
    ctx.quadraticCurveTo(200,240,200,200);
    //  绘制边框效果
	ctx.stroke()
    // ctx.fill()
    ctx.closePath()
  </script>

轮廓效果
在这里插入图片描述
填充效果
在这里插入图片描述

事例四
三次贝塞尔曲线 ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)

三次贝塞尔曲线需要三个点。前两个点是用于三次贝塞尔计算中的控制点,第三个点是曲线的结束点。曲线的开始点是当前路径中最后一个点。如果路径不存在,那么也是需要先使用 beginPath() 和 moveTo() 方法来定义开始点。
在这里插入图片描述

绘制一个填充的爱心
<!-- 兼容性写法,在低版本时标签内部的文字才会显示 -->
  <canvas id="cont" width="600px" height="400px">你的浏览器版本过低,请升级浏览器或者使用chrome打开!</canvas>
  <script>
    //  获取canvas画布
    const canvas = document.querySelector('#cont')
    // 获取画布的应用上下文
    const ctx = canvas.getContext('2d')
    
    //  使用bezierCurveTo绘制三次贝塞尔曲线,绘制爱心效果。
    //  ctx.bezierCurveTo(控制点x, 控制点Y, 第二控制点x,第二控制点Y,结束点x, 结束点y);
    //  放下画笔
    ctx.beginPath()
    // 移动画笔位置
    ctx.moveTo(300,180)
    ctx.bezierCurveTo(350,100,500,200,300,350)
    ctx.bezierCurveTo(100,200,250,100,300,180)

    //  添加描边的颜色
    // ctx.strokeStyle  = 'red'
    //  绘制边框效果
    ctx.stroke()
     //  添加填充的颜色
     ctx.fillStyle  = 'red'
    //  绘制填充效果
    ctx.fill()
    ctx.closePath()
  </script>

在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值