热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

html5绘制立体感线条,HTML5Canvas绘制各种线条

直线就是从A点到B点的一条线段。绘制直线的示例代码如下:ctx.strokeStyleFF0000;线的颜色为红色ctx.lineWidth2;线宽为2像素ctx

直线就是从A点到B点的一条线段。绘制直线的示例代码如下:

ctx.strokeStyle ="FF0000"; //线的颜色为红色

ctx.lineWidth=2; //线宽为2像素

ctx.beginPath(); //开始路径

ctx.moveTo(10, 10); //给路径一个起点

ctx.lineTo(100, 100); //给路径一个终点

ctx.stroke();

ctx.closePath(); //关闭路径效果图如下:

093c74de74bc596356d8e913372b6b13.png

2. 折线折线就是从A点到B点再到C点的一个线段。绘制折线的示例代码如下:ctx.strokeStyle ="FF0000"; //线的颜色为红色

ctx.lineWidth=2; //线宽为2像素

ctx.beginPath(); //开始路径

ctx.moveTo(10, 10); //给路径一个起点

ctx.lineTo(400, 400); //给路径一个终点

ctx.moveTo(400, 400); //继承上一个起点

ctx.lineTo(200, 300); //再给路径一个终点

ctx.stroke();

ctx.closePath(); //关闭路径效果图如下:

c6abe2e0749d6b4bf60f181883c39184.png

3. 弧线

弧线就是从以A点为圆心,半径为B,角为C度的一段圆弧。绘制弧线的示例代码如下:ctx.strokeStyle ="FF0000"; //线的颜色为红色

ctx.lineWidth=2; //线宽为2像素

ctx.arc(200,200,100,0,Math.PI*(1/2),false);

//绘制一条90°的弧线,Math.PI等于180°半圆周

//arc方法里用到的角度是以弧度为单位而不是度,度和弧度直接的转换可以用这个表达式:var radians =

//(Math.PI/180)*degrees。

//参数说明(x,y,半径, 起始角度,结束角度,是否为逆时针方向显示),其中(x,y)是圆心坐标

ctx.stroke();

效果图如下:

0ff3c203f42e02fc12e62c1f3de9f098.png

注意 上面代码中的arc方法的详细工作示意图如下图:

1b73a6722c98e429c059fdc58f898d42.png

4. 曲线

曲线是一种复杂的弧线组合,涉及3种方法,即arcTo()、quadraticCurveTo()、bezier-CurveTo()。

本节只讲arcTo(),quadraticCurveTo()和bezierCurveTo()。

arcTo()方法用于画一条与两条射线相切的圆弧,其中一条射线穿过渲染上下文绘制起点,终点为 (x1, y1);另一条射线穿过 (x2, y2),终点为 (x1, y1),这条圆弧为与这两条射线相切的最小的圆弧。在调用完arcTo()方法后,将圆弧与射线 (x1, y1) (x2, y2) 的切点添加到当前路径中,作为下次绘制的起点。

示例代码如下:ctx.lineWidth=2;

ctx.strokeStyle = "#F00";

ctx.moveTo(10, 10);

ctx.arcTo(210, 60, 10, 210, 30);

ctx.stroke();

//上面的代码给出曲线,为了更好地辅助读者理解arcto()方法,特绘出两条射线的夹角

ctx.beginPath();

ctx.strokeStyle = "#000";

ctx.moveTo(10, 6);

ctx.lineTo(214, 60);

ctx.lineTo(10, 214);

ctx.stroke();

效果图如下:

758a87dd89ccef878da0b77d1623be81.png

5. 二次方曲线

quadraticCurveTo()是二次方曲线获取方法,其详细的工作示意图如下:

d5f61584cc8d0ac6f358cb4e2311ff78.png

示例代码如下:ctx.lineWidth=2;

ctx.strokeStyle = "#F00";

ctx.moveTo(100,100);

ctx.quadraticCurveTo(125,225,225,166);

ctx.stroke();

执行效果如下图:

2ab817366af74904cc0de7441e11e744.png

在网上有人甚至给出了用quadraticCurveTo()做出会话气泡图形的案例,其代码如下:ctx.lineWidth=2;

ctx.strokeStyle = "#F00";

ctx.moveTo(75,25);

ctx.quadraticCurveTo(25,25,25,62.5);

ctx.quadraticCurveTo(25,100,50,100);

ctx.quadraticCurveTo(50,120,30,125);

ctx.quadraticCurveTo(60,120,65,100);

ctx.quadraticCurveTo(125,100,125,62.5);

ctx.quadraticCurveTo(125,25,75,25);

ctx.stroke();

执行效果如下图:

ccc62c6ce9da9b9fe3d4a42d8af3a5a3.png

6. 贝塞尔曲线贝塞尔曲线(Bezier curve)是数值分析和计算机图形学中相当重要的参数曲线。更高维度的贝塞尔曲线被称作贝塞尔曲面。

bezierCurveTo()方法比前面的quadraticCurveTo()方法多出了一个控制点,因此,表现更加丰富。

bezierCurveTo()方法的工作示意图如下图所示:

e7b3a93516cde8e6e52c7d7c7f60aa11.png

画一条贝塞尔曲线的具体代码如下:ctx.lineWidth=2;

ctx.strokeStyle = "#F00";

ctx.moveTo(50,150);

ctx.bezierCurveTo(150,50,250,150,350,50);

ctx.stroke();

执行效果图如下:

8b2acaa940cefd2dfb52132307d541fa.png

在网上还有一个bezierCurveTo()的制作心形案例,此处也一并提供给大家参考:ctx.lineWidth=2;

ctx.strokeStyle = "#F00";

ctx.moveTo(75,40);

ctx.bezierCurveTo(75,37,70,25,50,25);

ctx.bezierCurveTo(20,25,20,62.5,20,62.5);

ctx.bezierCurveTo(20,80,40,102,75,120);

ctx.bezierCurveTo(110,102,130,80,130,62.5);

ctx.bezierCurveTo(130,62.5,130,25,100,25);

ctx.bezierCurveTo(85,25,75,37,75,40);

ctx.stroke();

执行效果如下图:

17f68fbdb947750cbb5d749889d5caa1.png

使用二次方和三次方贝塞尔曲线是相当有挑战的。因为不像在矢量绘图软件Adobe Illustrator 里那样有即时的视觉反馈,所以用它来画复杂图形比较麻烦。但是从理论上来说,任何复杂的图形都可以用贝塞尔曲线绘制出来。

注意 二次方转三次方是可能的,但是反之则不一定能行,仅当三次方程中的三次项为零时才可能转换为二次方贝塞尔曲线。通常可以用多条二次方曲线通过细分算法来近似模拟三次方贝塞尔曲线。



推荐阅读
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入理解ASP.NET MVC中的_ViewStart.cshtml
    本文介绍了_ViewStart.cshtml文件在ASP.NET MVC 3.0及以上版本中的作用和使用方法。该文件位于Views目录下,主要用于统一配置视图布局和其他全局设置。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 基于JQuery实现的评分插件
    本文介绍了一个使用JQuery创建的交互式评分控件。当用户将鼠标悬停在星星上时,左侧的星星会变为实心,右侧保持空心,并显示对应的评分等级;移开鼠标后,所有星星恢复为空心状态。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • 本文详细介绍了如何使用 HTML 和 CSS 创建一个功能齐全的联系我们表单,包括布局和样式设计。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 树莓派摄像头配置与应用指南
    本文详细介绍了如何在树莓派上配置和使用摄像头,包括启用摄像头接口、简单的图片和视频捕捉方法以及如何通过网络实时传输视频流。 ... [详细]
author-avatar
KenNaNa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有