• JavaScript+canvas 利用贝塞尔曲线绘制曲线


    效果图:

    <body>
    <canvas id="test" width="800" height="300"></canvas>
    <script type="text/javascript">
    //一个工具函数,用于将角度从角度制转化成弧度制
    function rads(x){ return Math.PI*x/180;}
    
    var canvas = document.getElementById('test');
    var c = canvas.getContext("2d");
    
    //绘制一个图形,如果需要椭圆的话则进行相应的缩放和旋转即可
    //由于没有当前点,因此绘制的图形不需要当前点到圆形起点之间的直线
    c.beginPath();
    c.arc(75,100,50,	//圆心位于(75,100),半径为50
    	0,rads(360),false);	//从0度到360顺时针旋转
    
    //绘制一个楔,角度从x轴正向顺时针度量
    //要注意的是arc()方法会将当前点和弧形起点用直线相连
    c.moveTo(200,100);		//从圆心开始
    c.arc(200,100,50,		//圆心和半径
    	rads(-60),rads(0),	//从-60度到0度
    	false);				//顺时针
    c.closePath();			//将半径添加到圆心
    
    //同样的楔,但方向不同
    c.moveTo(325,100);		
    c.arc(325,100,50,		
    	rads(-60),rads(0),	//从-60度到0度
    	true);				//逆时针
    c.closePath();			
    
    //使用acrTo()方法来绘制圆角,绘制一个一点(400,50)位左上角同时还带有不同半径角的正方形
    c.moveTo(450,50);			//从上边的中点开始
    c.arcTo(500,50,500,150,30);	//添加部分上边和右上角
    c.arcTo(500,150,400,150,20);	//添加右上角和右下角
    c.arcTo(400,150,400,50,10);	//添加底边和坐下角
    c.arcTo(400,50,500,50,0);	//添加走遍左上角
    c.closePath();
    
    //二次贝塞尔曲线,一个控制点
    c.moveTo(75,250);			//从点(75,200)开始
    c.quadraticCurveTo(100,200,175,250);	//画一条以一直到到点(175,250)结束的曲线
    c.fillRect(100-3,200-3,6,6);		//标记控制点(100,200)
    
    //三次贝塞尔曲线
    c.moveTo(200,250);		//从点(200,250)开始
    c.bezierCurveTo(220,220,280,280,300,250);	//画一条以一直到点(300,250)结束的曲线
    c.fillRect(200-3,220-3,6,6);		//标记控制点
    c.fillRect(280-3,280-3,6,6);
    
    //定义一些图形属性并绘制曲线
    c.fillStyle="#aaa";
    c.lineWidth = 5;
    c.fill();
    </script>
    </body>
    

      

  • 相关阅读:
    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    Centos安装openjdk
    centos7安装nodejs
    Linux服务器集群性能监控之Performance Co-Pilot(PCP)部署
    asp.net(c#)网页跳转七种方法小结
    C# 获取文件名及扩展名
    C#中的 具名参数 和 可选参数
    数据契约(DataContract)
    用LINQ在集合中查询特定对象
    jQuery中append、insertBefore、after与insertAfter方法注意事项
  • 原文地址:https://www.cnblogs.com/ctsch/p/6932649.html
Copyright © 2020-2023  润新知