canvas(四)绘制曲线
1.绘制圆弧轨迹
- 相关语法:ctx.arc(x,y,r,startRadian,endRadian,direction),前5个参数必填:
| 参数 | 说明 |
|---|---|
| x | 圆心x轴坐标 |
| y | 圆心y轴坐标 |
| r | 半径大小 |
| startRadian | 起始弧度(单位Math.PI) |
| endRadian | 结束弧度(单位Math.PI) |
| direction | 绘制方向(可选),默认false顺时针方向,true为逆时针 |
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d")
//圆心坐标50,50
//半径100
//起始弧度和结束弧度为0,PI/2
ctx.arc(50,50,100,0,Math.PI/2)
//描边
ctx.stroke()
//开启新路径
ctx.beginPath()
//绘制新弧度(逆时针绘制)
ctx.arc(250,200,100,0,Math.PI/2,true)
//描边
ctx.stroke()
</script>

- 注意:这个语法只是绘制轨迹,需要自己描边或者填充
2.绘制扇形
- 思路:通过将绘制的圆弧与圆心连接起来即可绘制出一个扇形
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d")
//设置圆心坐标和半径
var x=150,y=80,r=150
//设置起始弧度和结束弧度
var startRadian = 0
var endRadian = Math.PI/4*3
//绘制基于此圆心的圆弧
ctx.arc(x,y,r,startRadian,endRadian)
//连接圆心
ctx.lineTo(x,y)
//关闭路径
ctx.closePath()
//描边
ctx.stroke()
//设置填充颜色
ctx.fillStyle = "lightBlue"
//填充
ctx.fill()
</script>

3.根据数据绘制饼图
- 实例:用饼图展现出每个年龄段的人群比例
- 数据来源:每个年龄区间的人数由随机数产生,通过数组下标来匹配对应的填充颜色
- 思路:计算每个区间所占的角度大小,后一个区间的起始弧度为上一个区间的结束弧度
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d")
//定义可能的颜色值
var colorArr = ["red","blue","green","yellow"]
//16-22的年龄人数
//23-30的年龄人数
//31-35的年龄人数
//36及以上的年龄人数
var section = [0,0,0,0]
//模拟数据(产生50个数据)
var num = 50
for(var i=0;i<num;i++){
//随机产生16-40的整数
var age = Math.floor(16 + Math.random()*25)
if(age < 23){
section[0]++
}else if(age < 31){
section[1]++
}else if(age < 36){
section[2]++
}else{
section[3]++
}
}
//记录每个区间所占的弧度
var radian = []
for(var i=0;i<section.length;i++){
//计算弧度并添加到数组中
radian.push(section[i]/num * Math.PI*2)
}
//设置圆心和半径
var x = canvas.width/2
var y = canvas.height/2
var r = 100
//定义起始弧度和结束弧度
var startRadian = 0
var endRadian = 0
//依次绘制每个扇形
for(var i=0;i<radian.length;i++){
//计算结束弧度
endRadian = startRadian + radian[i]
//开启新路径
ctx.beginPath()
//绘制圆弧轨迹
ctx.arc(x,y,r,startRadian,endRadian)
//连接圆心
ctx.lineTo(x,y)
//关闭路径
ctx.closePath()
//设置填充颜色
ctx.fillStyle = colorArr[i]
//填充
ctx.fill()
//更新开始弧度
startRadian = endRadian
}
</script>

canvas(四)绘制曲线的更多相关文章
- Canvas:绘制曲线
前言 画曲线要用到二次贝塞尔曲线或三次贝塞尔曲线.贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具,如 PhotoShop. 二次贝塞尔曲线 二次贝塞尔曲线在 ...
- javascript -- canvas绘制曲线
绘制曲线有几种思路: 1.通过quadraticCurveTo(controlX, controlY, endX, endY)方法来绘制二次曲线 2.通过bezierCurveTo(controlX1 ...
- 用html5的canvas画布绘制贝塞尔曲线
查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...
- JavaScript+canvas 利用贝塞尔曲线绘制曲线
效果图: <body> <canvas id="test" width="800" height="300">< ...
- canvas绘制曲线
canvas绘制曲线 方法 quadraticCurveTo(cp1x, cp1y, x, y) 只有一个控制点的贝塞尔曲线(其实就是控制点分别与起始点和结束点连线的公切线) bezierCurveT ...
- canvas教程(三) 绘制曲线
经过 canvas 教程(二) 绘制直线 我们知道了 canvas 的直线是怎么绘制的 而本次是给大家带来曲线相关的绘制 绘制圆形 在 canvas 中我们可以使用 arc 方法画一个圆 contex ...
- Canvas上绘制几何图形
重要的类自定义View组件要重写View组件的onDraw(Canvase)方法,接下来是在该 Canvas上绘制大量的几何图形,点.直线.弧.圆.椭圆.文字.矩形.多边形.曲线.圆角矩形,等各种形状 ...
- 安卓自己定义View进阶-Canvas之绘制基本形状
Canvas之绘制基本形状 作者微博: @GcsSloop [本系列相关文章] 在上一篇自己定义View分类与流程中我们了解自己定义View相关的基本知识,只是,这些东西依然还是理论,并不能拿来(zh ...
- 浅谈JavaScript的Canvas(绘制图形)
HTML5中新增加的一个元素canvas,要使用canvas元素,浏览器必须支持html5.通过canvas标签来创建元素,并需要为canvas指定宽度和高度,也就是绘图区域的大小. <canv ...
- 自定义控件之Canvas图形绘制基础练习-青春痘笑脸^_^
对于自定义控件的意义不言而喻,所以对它的深入研究是很有必要的,前些年写过几篇关于UI效果的学习过程,但是中途比较懒一直就停滞了,而对于实际工作还是面试来说系统深入的了解自定义控件那是很有必要的,所以接 ...
随机推荐
- webpack系列-webpack内置插件ProvidePlugin的应用(定义全局变量,例如vue引入jquery全局使用)
vue+webpack使用ProvidePlugin插件引入jquery 先看一个实例,webpack+vue引入jquery并全局使用,这儿指通过配置,不是在静态页面使用script标签直接引入jq ...
- CSS – RWD (Responsive Web Design) 概念篇
介绍 Only PC 以前是没有手机的, 只有电脑, 所以做开发, 只需要开发电脑版本就可以了. Mobile Version 后来手机诞生, 有钱的公司就做两个版本, 一个手机版, 一个电脑版. 没 ...
- 痞子衡嵌入式:JLink命令行以及JFlash对于下载算法的作用地址范围认定
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是JLink命令行以及JFlash对于下载算法的作用地址范围认定. 最近痞子衡在给一个 RT1170 客户定制一个 Infineon Mi ...
- 【解决方案】Java 互联网项目中常见的 Redis 缓存应用场景
目录 前言 一.常见 key-value 二.时效性强 三.计数器相关 四.高实时性 五.排行榜系列 六.文章小结 前言 在笔者 3 年的 Java 一线开发经历中,尤其是一些移动端.用户量大的互联网 ...
- 暑假集训CSP提高模拟5
听好了: 7 月 22 日,比样的学长就此陷落.每个陷落的学长都将迎来一场模拟赛,为这些模拟赛带来全新的题面. 你所熟知的一切都将改变,你所熟悉的算法都将加诸比样的考验. 至此,一锤定音. 尘埃,已然 ...
- Git常用命令,分支合并与管理
Git 自我感觉最大的优点是对版本库和分支的管理 各自的电脑都对项目保存一份版本,分支合并也极其方便. 而且Git的目录操作命令跟Linux一样,使用起来还是非常顺手的. Git详解 Git 常用命令 ...
- foobar2000 v1.6.11 汉化版(更新于 2022.08.25)
foobar2000 v1.6.11 汉化版 -----------------------[软件截图]---------------------- -----------------------[软 ...
- 【首场重磅亮相】KaiwuDB 1.0 时序数据库线上发布会明日开启!邀您共同见证
首场重磅亮相 KaiwuDB 是浪潮集团控股的数据库企业,以多模数据库为核心,面向工业物联网.数字能源.交通车联网.智慧城市.数字政务等多种场景,提供领先创新的数据服务软件. 新生代数据库,扬帆起航正 ...
- element输入天数,获取当前时间加上天数 【时间获取】
handleInput (val) { // console.log(this.formModel.ITEM_PM) if (!(/[^\d]/g).test(val)) { // console.l ...
- 我对CMD 和 AMD 的理解 ?
都是模块规范,和 CommonJs 一样都是社区规范,ES-module 才是官方规范,而且官方规范是趋势 : AMD:Asynchronous Module Definition 异步模块定义,即 ...