首頁  >  文章  >  web前端  >  使用js畫圖之圓、弧、扇形_javascript技巧

使用js畫圖之圓、弧、扇形_javascript技巧

WBOY
WBOY原創
2016-05-16 16:20:522304瀏覽

半徑為r的圓上的點p(x,y)與圓心O(x0,y0)的關係: x = x0 rcosA;  y = y0 rsinA ,A為弧度

範例:http://www.zhaojz.com.cn/demo/draw6.html

一、圓

複製程式碼 程式碼如下:

//圓形/橢圓
//dot 圓點
//r 半徑
//compressionRatio 垂直壓縮比
function drawCircle(dot, r, compressionRatio, data){
    var pstart = [dot[0] r, dot[1]]; //起點
    var pre = pstart;
    for(var i=0; i         rad = i*Math.PI/180; //計算弧度
        //r*Math.cos(rad) 弧線的終點相對dot的水平偏移量
        //r*Math.sin(rad) 弧線的終點相對dot的垂直偏移量
        //compressionRatio 垂直壓縮比例
        var cur = [r*Math.cos(rad) dot[0], compressionRatio*r*Math.sin(rad) dot[1]];
        drawLine(pre,cur);
        pre = cur; //儲存目前點的座標
    }
    drawLine(pre,pstart);//使閉合
    //描圓點
    drawPoint({
        pw:2,ph:2,color:'DarkRed',point:dot
    });
}

二、弧

  就在畫出圓的一部分,演算法與圓相似

複製程式碼 程式碼如下:

//畫弧
//dot 圓點
//r 半徑
//angle 圓心角
//angleOfSlope 與x軸的夾角
//pop 是否彈出
//title 標籤
function drawArc(dot, r, angle, angleOfSlope, pop, title){
    var newDot = [dot[0], dot[1]];
    var a = (angleOfSlope angle/2)*Math.PI/180;
    if(pop){ //計算圓心的新座標
        newDot[0] = dot[0] 10*Math.cos(a);
        newDot[1] = dot[1] 10*Math.sin(a);
    }
    if(!angleOfSlope){
        angleOfSlope = 0;
    }
    var aos = angleOfSlope*Math.PI/180;
    var aos2 = (angleOfSlope angle)*Math.PI/180;
    var pstart = [newDot[0] r*Math.cos(aos), newDot[1] r*Math.sin(aos)]; //弧線的起點
    var pend = [newDot[0] r*Math.cos(aos2), newDot[1] r*Math.sin(aos2)]; //弧線的終點
    var pre = pstart;
    for(var i=0; i         rad = (i angleOfSlope)*Math.PI/180;
        var cur = [r*Math.cos(rad) newDot[0], r*Math.sin(rad) newDot[1]];
        drawLine(pre,cur);
        pre = cur;
    }
}

三、扇形

  將弧的兩端與圓心相連

複製程式碼 程式碼如下:

//扇形
//dot 圓點
//r 半徑
//angle 圓心角
//angleOfSlope 與x軸的夾角,求扇形的方向
//pop 是否彈出,即是否偏離圓心
//title 標籤
function drawSector(dot, r, angle, angleOfSlope, pop, title){
    var newDot = [dot[0], dot[1]];
    var a = (angleOfSlope angle/2)*Math.PI/180;
    if(pop){ //計算圓心的新座標
        newDot[0] = dot[0] 10*Math.cos(a);
        newDot[1] = dot[1] 10*Math.sin(a);
    }
    if(!angleOfSlope){
        angleOfSlope = 0;
    }
    var aos = angleOfSlope*Math.PI/180;
    var aos2 = (angleOfSlope angle)*Math.PI/180;
    var pstart = [newDot[0] r*Math.cos(aos), newDot[1] r*Math.sin(aos)]; //弧線的起點
    var pend = [newDot[0] r*Math.cos(aos2), newDot[1] r*Math.sin(aos2)]; //弧線的終點
    drawLine(newDot,pstart); //連結圓心與起點
    var pre = pstart;
    for(var i=0; i         rad = (i angleOfSlope)*Math.PI/180;
        var cur = [r*Math.cos(rad) newDot[0], r*Math.sin(rad) newDot[1]];
        drawLine(pre,cur);
        pre = cur;
    }
    drawPolyline([pre, pend, newDot]); //使閉合
    //描圓心
    drawPoint({
        pw:2,ph:2,color:'DarkRed',point:dot
    });
    //標籤
    if(title){
document.write("" title "");
    }
}

是不是很震撼,原來js也能做這麼酷炫的事。 。 。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn