[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)
之前,我写了一个arc函数的用法:[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形).
arcTo:
cxt.arcTo( cx, cy, x2, y2, 半径 )
cx,cy表示控制点的坐标,x2,y2表示结束点的坐标,如果我们想画一条弧线,需要提供3个坐标,开始点,控制点和结束点. 开始点一般可以通过moveTo或者lineTo提供.arcTo提供控制点和结束点.
<style>
body {
background: #000;
} #canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); var x1 = 50,
y1 = 100,
cx = 500,
cy = 100,
x2 = 450,
y2 = 200;
oGc.lineWidth = '2px';
oGc.strokeStyle = 'red';
oGc.moveTo( x1, y1 );
oGc.arcTo( cx, cy, x2, y2, 50 );
oGc.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

加大半径( 其他代码保持不变,半径调成100 )弧度将会变大!
如果调整结束点,把结束点与控制点形成一个直角,那么弧度将不会这么弯曲
var x1 = 50,
y1 = 100,
cx = 500,
cy = 100,
x2 = 500,
y2 = 200;
oGc.lineWidth = '2px';
oGc.strokeStyle = 'red';
oGc.moveTo( x1, y1 );
oGc.arcTo( cx, cy, x2, y2, 100 );
oGc.stroke();

如果把开始点的横坐标放大,半径也放大,那么得到的形状是这样的!
var x1 = 400,
y1 = 100,
cx = 500,
cy = 100,
x2 = 500,
y2 = 200;
oGc.lineWidth = '2px';
oGc.strokeStyle = 'red';
oGc.moveTo( x1, y1 );
oGc.arcTo( cx, cy, x2, y2, 300 );
oGc.stroke();

看到这些形状,你知道他能用在哪些地方吗?
贝塞尔曲线:
如果你初次了解贝塞尔曲线,这里有一篇非常不错的文章可以参考下:
http://www.html-js.com/article/1628
再来一个工具,这个工具提供了canvas中贝塞尔曲线的开始点,控制点与结束点的坐标:
http://myst729.github.io/bezier-curve/
canvas二次贝塞尔曲线的函数语法:
cxt.quadraticCurveTo( cx, cy, x2, y2 );
cx,cy控制点坐标,x2,y2:结束点坐标, 开始点一般由moveTo, lineTo提供.
画一个二次贝塞尔曲线:
<style>
body {
background: #000;
}
#canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); oGc.strokeStyle = 'red';
oGc.moveTo( 140, 80 );
oGc.quadraticCurveTo( 411, 77, 418, 277 );
oGc.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

三次贝塞尔曲线
canvas三次贝塞尔曲线的函数语法:
cxt.bezierCurveTo( cx1, cy1, cx2, cy2, x2, y2 );
cx1,cx2 表示第一个控制点,cx2,cy2表示第二个控制点,x2, y2表示结束点坐标。开始点一般由moveTo, lineTo提供.
画一个三次贝塞尔曲线:
<style>
body {
background: #000;
}
#canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); oGc.strokeStyle = 'red';
oGc.moveTo( 234, 224 );
oGc.bezierCurveTo( 301, 68, 454, 361, 555, 162 );
oGc.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

画一个饼图:
<style>
body {
background: #000;
}
#canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); oGc.beginPath();
oGc.fillStyle = 'red';
oGc.moveTo( 300, 200 );
oGc.arc( 300, 200, 100, 0 * Math.PI / 180, 120 * Math.PI / 180, false );
oGc.closePath();
oGc.fill(); oGc.beginPath();
oGc.fillStyle = 'orange';
oGc.moveTo( 300, 200 );
oGc.arc( 300, 200, 100, 120 * Math.PI / 180, 240 * Math.PI / 180, false );
oGc.closePath();
oGc.fill(); oGc.beginPath();
oGc.fillStyle = '#09f';
oGc.moveTo( 300, 200 );
oGc.arc( 300, 200, 100, 240 * Math.PI / 180, 360 * Math.PI / 180, false );
oGc.closePath();
oGc.fill();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

画一个圆角矩形:
<style>
body {
background: #000;
}
#canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); oGc.strokeStyle = 'red';
oGc.lineWidth = '2px';
oGc.moveTo( 200, 100 );
oGc.lineTo( 500, 100 );
oGc.arcTo( 600, 100, 600, 200, 100 );
oGc.moveTo( 600, 200 );
oGc.lineTo( 600, 400 );
oGc.arcTo( 600, 500, 500, 500, 100 );
oGc.moveTo( 500, 500 );
oGc.lineTo( 200, 500 );
oGc.arcTo( 100, 500, 100, 400, 100 );
oGc.moveTo( 100, 400 );
oGc.lineTo( 100, 200 );
oGc.arcTo( 100, 100, 200, 100, 100 );
oGc.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)的更多相关文章
- [js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)
上文,写完弧度与贝塞尔曲线[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具),本文主要是关于线条的样式设置 lineWidth: 设置线条的宽 ...
- [js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API
我们接着上文[js高手之路] html5 canvase系列教程 - 认识canvas以及基本使用方法继续. 一.直线的绘制 cxt.moveTo( x1, y1 ): 将画笔移动到x1, y1这个点 ...
- [js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)
绘制曲线,经常会用到路径的知识,如果你对路径有疑问,可以参考我的这篇文章[js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解. arc:画 ...
- [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)
接着上文[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)继续,本文介绍的 ...
- [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)
接着上文线条样式[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)继续. canvas提供两种输出文本的方 ...
- [js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)
接着上文[js高手之路] html5 canvas系列教程 - 状态详解(save与restore),相信大家都应该玩过美颜功能,而我们今天要讲的就是canvas强大的像素处理能力,通过像素处理,实现 ...
- [js高手之路] html5 canvas系列教程 - 状态详解(save与restore)
本文内容与路径([js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解)是canvas中比较重要的概念.掌握理解他们是做出复杂canvas动 ...
- [js高手之路] html5 canvas系列教程 - 线形渐变,径向渐变与阴影设置
接着上文[js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)继续. 一.线形渐变 线形渐变指的是一条直线上发生的渐变. 用法: var linear ...
- [js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标
有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下: [js高手之路] html5 canvas系列教程 ...
随机推荐
- 从yum提示空间不足到根分区扩容
记录一次安装软件的报错 --1261065212@qq.com 1.系统版本(VMware 虚拟机) [root@ansible-admin ~]# cat /etc/redhat-r ...
- 史上最全前端面试题(含答案)-B篇
面试有几点需要注意面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑.深度↑.方向↑.题目类型: 技术视野.项目细节.理论知识型题,算法题,开放性题,案例题.进行追问: 可以确保问到你开始不懂 ...
- C# 爬虫 Jumony html解析
前言 前几天写了个爬虫,然后认识到了自己的不足.感谢 "倚天照海- -" ,我通过你推荐的文章,意外的发现了html解析的类库——Jumony. 研究了2天,我发现这个东西简单粗暴 ...
- HK2使用详解
HK2介绍 组件 生命周期 定义服务 注入服务 HK2介绍 HK2是一个轻量级动态依赖注入框架,它是JSR-330的实现. 组件 在HK2组件模型中,一个组件的功能是通过服务接口-服务实现的模式声明的 ...
- Centos 7系统启动修复
author:JevonWei 版权声明:原创作品 错误界面 这个错误界面应该为/boot文件损坏,故应该修复/boot和grub2 修复/boot及grub 1 . chroot /mnt/sysi ...
- chrome开发工具指南(六)
检查和编辑页面与样式 使用 Chrome DevTools 的 Elements 面板检查和实时编辑页面的 HTML 与 CSS. 在 Elements 面板中检查和实时编辑 DOM 树中的任何元素. ...
- java_jstl 标签库
jstl标签库的使用以及介绍 jstl:jsp标准标签库,是jsp的标签集合,它里面封装了jsp通用的核心功能,比如:建构化的任务,迭代,条件判断,xml 文档的操作,国际化标签,sql标签,还提供框 ...
- 交换机的Ethernet Channel
端口聚合也叫做以太通道(ethernet channel),主要用于交换机之间连接.由于两个交换机之间有多条冗余链路的时候,STP会将其中的几条链路关闭,只保留一条,这样可以避免二层的环 路产生.但是 ...
- FileInputStream 小Demo
要求:设计如下界面 文本框里面可以输入的路径和文件名 单机按钮可以读取在 指定的文件 并把文件内容显示到一个文本域里面来 代码: /** * */ package com.niit.homewo ...
- SNS团队第二次站立会议(2017.04.23)
一.当天站立式会议照片 本次会议主要内容:汇报工作进度,根据完成情况调整进度 二.每个人的工作 成员 今天已完成的工作 明天计划完成的工作 罗于婕 梳理清楚数据的每个类型和数据项 具体落实把相关数据 ...