canvas(四)绘制曲线

1.自定义方法绘制曲线

曲线可以看成是无数条极短的直线连接而成的,可以使用lineTo()来绘制一条曲线

圆的方程为:r^2 = x^2 + y^2
可得 y = Math.sqrt(r^2-x^2)
可以根据这个公式来绘制以0,0为圆心的1/4圆的曲线

<script>
    var canvas = document.querySelector("canvas")
    var ctx = canvas.getContext("2d")

    // 设置圆的半径和绘制起点
    var r = 200
    var x = 200
    var y = 0
    // 设置起点
    ctx.moveTo(x,y)
    for(;x>=0;x--){
        y = Math.sqrt(r*r - x*x)
        ctx.lineTo(x,y)
    }
    // 描边
    ctx.stroke()
</script>

2.封装绘制曲线的方法

这个方法根据传入的圆心坐标和半径大小来绘制曲线

<script>
    var canvas = document.querySelector("canvas")
    var ctx = canvas.getContext("2d")

    function drwacircle(canvas,x0,y0,r){
        // 获取绘制工具
        var ctx = canvas.getContext("2d")
        // x轴绘制坐标区间
        var xMin = x0 - r
        var xMax = x0 + r
        xMin<0? xMin=0:""
        xMax>canvas.width? xMax=canvas.width:""

        // x轴绘制起点坐标
        var x,y

        // 当前绘制点在x轴上到圆心的距离
        var distance

        // 开启路径
        ctx.beginPath()

        //开始绘制下半圆
        for(x=xMin;x<=xMax;x++){
            // 计算x轴到到圆心的距离
            distance = Math.abs(x-x0)
            // 计算y轴坐标
            y = Math.sqrt(r*r - distance*distance) + y0
            ctx.lineTo(x,y)
        }

        //开始绘制上半圆
        for(x=xMax;x>=xMin;x--){
            // 计算x轴到到圆心的距离
            distance = Math.abs(x-x0)
            // 计算y轴坐标
            y =  y0 - Math.sqrt(r*r - distance*distance)
            ctx.lineTo(x,y)
        }

        // 描边
        ctx.stroke()
    }

    // 调用函数绘制一个大圆
    drwacircle(canvas,50,50,200)
    // 调用函数绘制一个小圆
    drwacircle(canvas,300,200,80)
</script>

3.官方API绘制圆弧轨迹

ctx.arc(x,y,r,startRadian,endRadian):绘制圆弧要满足4点
圆心坐标:例如50,50
半径大小:例如100
起始弧度和结束弧度:
弧度单位Math.PI ,X轴方向为0弧度,弧度增加的方向为顺时针方向
绘制方向(可选),默认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>

4.绘制扇形

思路:通过将绘制的圆弧与圆心连接起来即可绘制出一个扇形。

<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>

5.根据数据绘制饼图

实例:用饼图展现出每个年龄段的人群比例
每个年龄区间的人数由随机数产生
根据每个区间所占的比例来绘制不同大小和颜色的扇形

<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>

原文地址:https://www.cnblogs.com/OrochiZ-/p/11644784.html

时间: 2024-08-30 07:43:23

canvas(四)绘制曲线的相关文章

详述Canvas(四)/绘制曲线

Canvas提供了4个绘制曲线的方法: arc(x,y,stratAngle,endAngle,true/false);//默认为false arcTo(x1,y1,x2,y2,r); x1,y2坐标一,x2,y2坐标2,r是圆弧半径 quadraticCurveTo(dx,dy,x,y); dx,dy控制点,x,y是结束点 bezierCurveTo(dx1,dy1,dx2,dy2,x,y); dx1,dy1是控制点一,dx2,dy2是控制点二,x,y是结束点 1.arc(x,y,startA

[ html canvas 绘制曲线三种方法 ] canvas绘图 绘制曲线三种方法属性实例演示

1 <!DOCTYPE html> 2 <html lang='zh-cn'> 3 <head> 4 <title>Insert you title</title> 5 <meta name='description' content='this is my page'> 6 <meta name='keywords' content='keyword1,keyword2,keyword3'> 7 <meta htt

HTML5之canvas 4 绘制曲线

一.圆弧 (x0,y0)当前坐标点,(x1,y1)控制点坐标,(x2,y2)圆弧终点坐标 Context.arcTo(x1,y1,x2,y2,radiusX) 二.二次贝塞尔曲线 开始点:moveTo(20,20) 控制点 1:quadraticCurveTo(20,100,200,20) 结束点:quadraticCurveTo(20,100,200,20) Context. quadraticCurveTo(cpx,cpy,x,y) (cpx,cpy)控制点坐标,(x,y)终点坐标 三.三次

canvas绘制曲线

绘制曲线有几种思路: 1.通过quadraticCurveTo(controlX, controlY, endX, endY)方法来绘制二次曲线 2.通过bezierCurveTo(controlX1, controlY1, controlX2, controlY2, endX, endY)方法,来绘制贝塞尔曲线 3.通过画圆的方法arc(x, y, radius, startAngle, endAngle, antiClockwise)来取得某一段圆弧,作为要画出的曲线 1.二次曲线quadr

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.getEle

canvas教程(三) 绘制曲线

经过 canvas 教程(二) 绘制直线 我们知道了 canvas 的直线是怎么绘制的 而本次是给大家带来曲线相关的绘制 绘制圆形 在 canvas 中我们可以使用 arc 方法画一个圆 context.beginPath(); context.arc(x, y, r, startRadian, endRadian, antclockwise); context.closePath(); 我们是第一次用到 beginPath 和 closePath 这两个方法,首先这两个方法故名思意就是开始路径

html5 canvas绘图-贝塞尔曲线

贝塞尔曲线(ezier curve)最迟是由法国物理学家与数学家paul de Casteljau发明的.它的广泛运用则要归功于法国工程师皮埃尔 贝塞尔 贝塞尔曲线期初被用在汽车车身的设计上.现在则多用于计算机图形系统中.例如Adobe Illustrator/Apple的Cocoa框架以及在Html5的canvas. 贝塞尔曲线分为两种:平方(quadratic)贝塞尔曲线及立方(cubic)贝塞尔曲线.平方贝塞尔曲线是一种二次曲线(second degree curve),意思就是说,它们是

安卓自己定义View进阶-Canvas之绘制基本形状

Canvas之绘制基本形状 作者微博: @GcsSloop [本系列相关文章] 在上一篇自己定义View分类与流程中我们了解自己定义View相关的基本知识,只是,这些东西依然还是理论,并不能拿来(zhuang)用(B), 这一次我们就了解一些能(zhaung)用(B)的东西. 在本篇文章中,我们先了解Canvas的基本用法,最后用一个小演示样例来结束本次教程. 一.Canvas简单介绍 Canvas我们能够称之为画布,能够在上面绘制各种东西,是安卓平台2D图形绘制的基础,非常强大. **一般来说

详述Canvas(五)/绘制圆角矩形

Canvas并没有提供绘制圆角矩形的方法,但是通过观察,我们可以发现,其实我们可以将圆角矩形分为四段,可以通过使用arcTo来实现. 我们假设起点为x,y.绘制的矩形宽高为w,h.圆角的半径为r;所以将起点设置在(x+r,y)处,然后acrTo(x+w,y,x+w,y+h,r),对于终点,其实只要y值大于绿色点的都是可以的(这部分在绘制曲线部分已经详述).此处我们将终点设为(x+w,y+h);这就是第一段曲线.第一段曲线绘制完毕之后,画笔落在了下图绿色点的位置. 现在再看下第二段曲线: 因此我们