亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用js畫圖之畫切線

2019-11-20 13:25:57
字體:
來源:轉載
供稿:網友

樣例:http://www.zhaojz.com.cn/demo/draw9.html

復制代碼 代碼如下:

//畫切線
//point 圓外的一點
//dot 圓心
//r 半徑
function drawCircleTangent(point, dot, r){
    //畫輔助線-start
    var color = 'DarkRed'; //切線的顏色
    var color2 = "#ccc"; //其它輔助線的顏色
    drawLine(dot, [dot[0]+9*r,dot[1]], {color: color2}); // 延長圓心所在的水平線
    drawLine(dot, [dot[0],dot[1]-4*r], {color: color2}); // 畫出圓心所在的垂直線
    drawPoint({
        pw:2,ph:2,color:'DarkRed',point: [dot[0]+9*r,dot[1],'x']
    });
    drawPoint({
        pw:2,ph:2,color:'DarkRed',point: [dot[0],dot[1]-4*r,'y']
    });
    drawLine(point, [point[0],dot[1]], {color: color2}); // 畫point到x軸的垂直線
    drawLine(point, dot, {color: color2}); // 連接point與dot
    drawLine([point[0]-2*r, point[1]], [point[0]+2*r, point[1]], {color: color2}); //畫point所在的水平線
    //畫輔助線-end
    //point.push('point');
    drawPoint({
        pw:2,ph:2,color:'DarkRed',point: point
    });
    //dot.push('centre');
    var r_square = Math.pow(r,2); // r的平方
    var point_v = point[1]-dot[1]; //point到x軸的距離的平方
    var point_h = point[0]-dot[0]; //point到y軸的距離的平方
    var c_square = Math.pow(point_v,2) + Math.pow(point_h,2); //point到圓心的距離的平方
    var c = Math.sqrt(c_square); //point到圓心的距離
    var sinA = Math.abs(point_v)/c; //sinA
    var cosA = Math.abs(point_h)/c; //cosA
    var b_square = c_square-r_square; //point到切點的距離的平方
    var b = Math.sqrt(b_square); //point到切點的距離
    var sinB = b/c; //sinB
    var cosB = r/c; //cosB
    //以圓心為坐標圓點,確定point所在的象限
    var quadrant  = 1; //默認值
    var pm_h = point_h == 0? point_h: point_h/Math.abs(point_h); //水平方向
    var pm_v = point_v == 0? point_v: point_v/Math.abs(point_v); //垂直方向
    var hv = pm_h*pm_v; //相乘,-1時point在一三象限,+1時point在二四象限,0時point在軸上
    switch(hv){
        case 1:
            if((pm_h+pm_v)==-2){
                quadrant = 2; //第二象限
            }else{
                quadrant = 4; //第四象限
            }
            break;
        case -1:
            if((pm_h-pm_v)==-2){
                quadrant = 3; //第三象限
            }
            break;
        case 0:
            if((pm_h+pm_v)==-1){ //point在x軸的負半軸或者y軸的正半軸時,斷定point在第二象限
                quadrant = 2;
            }
            if((pm_h+pm_v)==1){ //point在x軸的正半軸或者y軸的負半軸時,斷定point在第四象限
                quadrant = 4;
            }
            break;
        default:
    }
    var sinC = 0;
    var conC = 0;
    var sinD = 0;
    var conD = 0;
    switch(quadrant){
        case 1:
            sinC = cosB*cosA+sinB*sinA; //sinC = sin(90+(B-A)) = cos(B-A) = cosB*cosA+sinB*sinA
            conC = -(sinB*cosA-cosB*sinA); //cosC = cos(90+(B-A)) = -sin(B-A) = -(sinB*cosA-cosB*sinA)
            sinD = -(cosA*cosB-sinA*sinB); //sinD = sin(270-(A+B))
            conD = -(sinA*cosB+cosA*sinB); //conD = cos(270-(A+B))
            break;
        case 2:
            sinC = -(cosB*cosA-sinB*sinA); //sinC = sin(-90+(A+B))
            conC = sinA*cosB+cosA*sinB; //conC = cos(-90+(A+B))
            sinD = cosA*cosB+sinA*sinB; //sinD = sin(90+(A-B))
            conD = -(sinA*cosB-cosA*sinB); //conD = cos(90+(A-B))
            break;
        case 3:
            sinC = -(cosA*cosB+sinA*sinB); //sinC = sin(-90+(A-B))
            conC = -(sinA*cosB-cosA*sinB); //conC = cos(-90+(A-B))
            sinD = (cosA*cosB-sinA*sinB); 
            conD = sinA*cosB+cosA*sinB;
            break;
        case 4:
            sinC = cosA*cosB-sinA*sinB;
            conC = -(sinA*cosB+cosA*sinB)
            sinD = -(cosA*cosB+sinA*sinB); //sinD = sin(270+(A-B))
            conD = (sinA*cosB-cosA*sinB); //conD = cos(270+(A-B))
            break;
        default:
    }
    var tangentPointA = [point[0]+b*conC, point[1]+b*sinC]; //切點A位置
    drawLine(point, tangentPointA, {color: color}); //畫出切線
    drawLine(dot, tangentPointA, {color: color2}); //連接圓點與切點
    //drawArc(point, 17, (quadrant ==1 ||quadrant==4?180:0)-(quadrant ==2 ||quadrant==3?(-1):1)*Math.asin(sinC)*180/Math.PI, 0);
    var tangentPointB = [point[0]+b*conD, point[1]+b*sinD]; //切點B位置
    drawLine(point, tangentPointB, {color: color}); //畫出切線
    drawLine(dot, tangentPointB, {color: color2}); //連接圓點與切點
    //drawArc(point, 27, (quadrant ==1 ||quadrant==4?180:0)-(quadrant ==2 ||quadrant==3?(-1):1)*Math.asin(sinD)*180/Math.PI, 0);
    drawPoint({ //描切點
        pw:3,ph:3,color:'DarkRed',point: tangentPointA
    });
    drawPoint({ //描切點
        pw:3,ph:3,color:'DarkRed',point: tangentPointB
    });
    //畫輔助弧
    //(quadrant ==1 ||quadrant==4?360:0)
    drawArc(point, b, 60, (quadrant ==1 ||quadrant==4?180:0)-(quadrant ==2 ||quadrant==3?(-1):1)*Math.asin(sinC)*180/Math.PI-5);
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
xxav国产精品美女主播| 国产精品久在线观看| 俺去亚洲欧洲欧美日韩| 日韩高清av一区二区三区| 国产精品国产亚洲伊人久久| 国产精品99久久久久久白浆小说| 亚洲自拍欧美另类| 精品人伦一区二区三区蜜桃免费| 日韩免费黄色av| 久久久久久久亚洲精品| 成人福利视频在线观看| 亚洲精品suv精品一区二区| 亚洲在线观看视频| 国产三级精品网站| 欧美大码xxxx| 国产精品h片在线播放| 亚洲最大在线视频| 亚洲免费电影一区| 日韩有码在线观看| 日韩免费在线免费观看| 国产极品精品在线观看| 久久精品青青大伊人av| 日本高清视频一区| 亚洲第一精品自拍| 亚洲国产精品资源| 国产精品第100页| 欧美xxxx做受欧美| 亚洲老头同性xxxxx| 欧美激情免费看| 亚洲欧美三级在线| 色777狠狠综合秋免鲁丝| 亚洲性线免费观看视频成熟| 欧美视频二区36p| 日韩欧美精品在线观看| 最近中文字幕2019免费| 91av在线视频观看| 欧美多人乱p欧美4p久久| 主播福利视频一区| 日本精品视频在线| 国产精品丝袜久久久久久不卡| 亚洲成人久久久| 在线成人免费网站| 欧美巨大黑人极品精男| 日韩av在线高清| 日韩免费观看av| 日韩欧美在线观看| 午夜美女久久久久爽久久| 久久99久国产精品黄毛片入口| 久久久精品国产亚洲| 久久乐国产精品| 国产欧美一区二区三区久久人妖| 欧美激情国产精品| 7m精品福利视频导航| 日本高清视频精品| 国产美女精品免费电影| 一区二区三区在线播放欧美| 欧美精品在线免费播放| 少妇高潮 亚洲精品| 国产精品久久久久久久久久ktv| 欧美精品免费看| 欧美视频国产精品| 欧美一级大片在线免费观看| 欧美在线性视频| 97超视频免费观看| 青青久久aⅴ北条麻妃| 国产免费一区二区三区在线观看| 456国产精品| 国产日韩精品在线播放| 亚洲精品99久久久久中文字幕| 4388成人网| 91久久综合亚洲鲁鲁五月天| 久久久久久久久久国产精品| 亚洲色图av在线| 68精品国产免费久久久久久婷婷| 久久久精品一区| 成人h片在线播放免费网站| 色综合色综合网色综合| 91精品综合视频| 成人亚洲欧美一区二区三区| 伊人男人综合视频网| 久久精品国产欧美激情| 国产精品专区第二| 91精品视频免费观看| 欧美孕妇毛茸茸xxxx| 97欧美精品一区二区三区| 国产精品xxxxx| 97视频色精品| 国产男人精品视频| 亚洲欧美国产一本综合首页| 国产日本欧美一区二区三区| 亚洲理论片在线观看| 欧美精品在线极品| 国产精品亚洲美女av网站| 亚洲精品久久久久国产| 精品视频在线观看日韩| 国内精品模特av私拍在线观看| 国产热re99久久6国产精品| 成人女保姆的销魂服务| 91久久久久久久久久久| 亚洲free嫩bbb| 久久久久久com| 色777狠狠综合秋免鲁丝| 久久影视三级福利片| 在线观看免费高清视频97| 国产精品三级美女白浆呻吟| 久久久久在线观看| 亚洲福利视频专区| 国产一区二区三区精品久久久| 日韩电影在线观看免费| 色婷婷综合久久久久中文字幕1| 欧美激情第99页| 久久久999精品| 国产精品成人一区二区三区吃奶| 在线观看不卡av| 亚洲精品网址在线观看| 欧美日韩国产影院| 深夜精品寂寞黄网站在线观看| 亚洲国产精品成人va在线观看| 夜夜躁日日躁狠狠久久88av| 中文字幕精品视频| 国产日韩在线看片| 欧美成人免费一级人片100| 欧美一区亚洲一区| 精品magnet| 欧美专区在线观看| 亚洲欧洲中文天堂| 国产一区二区丝袜高跟鞋图片| 精品久久久中文| 大桥未久av一区二区三区| 国模私拍视频一区| 国语自产精品视频在免费| 久久久久久久久综合| 韩国三级电影久久久久久| 国产欧美日韩高清| 日韩中文字幕在线免费观看| 精品香蕉在线观看视频一| 久久久久久久久综合| 91av视频在线免费观看| 色综合久久久久久中文网| 国产69精品久久久久久| 日韩精品高清在线观看| 国产精品久久久久影院日本| 国产91在线播放| 欧美大荫蒂xxx| 91精品在线影院| 亚洲精品美女视频| 欧美高清视频一区二区| 中文字幕日韩欧美在线| 色av吧综合网| 91美女片黄在线观| 欧美大片在线看免费观看| 国产精品视频资源| 欧美极品在线播放| 国产精品www| 91精品国产91久久久久| 在线观看国产精品91| 日韩有码在线播放| 一个色综合导航| 中文字幕免费国产精品| 成人午夜在线影院| 久久亚洲精品中文字幕冲田杏梨| 亚洲欧洲自拍偷拍| 欧美大片免费看| 久久久久久久久91|