欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用js畫圖之畫切線

 更新時間:2015年01月12日 15:46:02   投稿:hebedich  
這篇文章主要介紹了使用js繪制幾何圖形系列教程中的畫切線篇,非常方便我們好好熟悉理解javascript,推薦給大家

樣例: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(tǒng)軸的距離的平方
    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);
}

相關文章

  • JS圖片壓縮(pc端和移動端都適用)

    JS圖片壓縮(pc端和移動端都適用)

    本文主要分享了JS圖片壓縮的方法。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • JS腳本根據(jù)手機瀏覽器類型跳轉(zhuǎn)WAP手機網(wǎng)站(兩種方式)

    JS腳本根據(jù)手機瀏覽器類型跳轉(zhuǎn)WAP手機網(wǎng)站(兩種方式)

    隨著移動互聯(lián)網(wǎng)的不斷普及,企業(yè)的網(wǎng)絡宣傳不僅只局限在PC端,還要在移動端發(fā)展。我們在自己的網(wǎng)站做了WAP手機完整之后,如果有用戶通過手機訪問我們的企業(yè)頂級域名網(wǎng)站,就要判斷跳轉(zhuǎn)到專為的WAP網(wǎng)站,下面小編給大家整理有關手機瀏覽器跳轉(zhuǎn)WAP手機網(wǎng)站的相關內(nèi)容
    2015-08-08
  • JS實現(xiàn)十分鐘倒計時代碼實例

    JS實現(xiàn)十分鐘倒計時代碼實例

    在本篇文章里我們給大家分享了關于JS實現(xiàn)十分鐘倒計時的相關實例代碼,有需要的朋友們可以學習下。
    2018-10-10
  • js 替換

    js 替換

    2008-02-02
  • Bootstrap每天必學之導航條

    Bootstrap每天必學之導航條

    Bootstrap每天必學之導航條,本文向大家講解了多種多樣的導航條,以及導航條中元素的實現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2015-11-11
  • Typescript中索引簽名使用詳解

    Typescript中索引簽名使用詳解

    這篇文章主要介紹了Typescript中索引簽名使用詳解,需要的朋友可以參考下
    2023-08-08
  • 聊聊JavaScript如何實現(xiàn)繼承及特點

    聊聊JavaScript如何實現(xiàn)繼承及特點

    “繼承”是面向?qū)ο缶幊汤锩娼?jīng)常提及到的概念,它的目的是實現(xiàn)代碼復用。這篇文章主要介紹了聊聊JavaScript如何實現(xiàn)繼承及特點,有興趣的可以了解一下。
    2017-04-04
  • JavaScript中的立即執(zhí)行函數(shù)表達式介紹

    JavaScript中的立即執(zhí)行函數(shù)表達式介紹

    這篇文章主要介紹了JavaScript中的立即執(zhí)行函數(shù)表達式介紹,本文著重講解了什么是立即調(diào)用函數(shù)表達式,需要的朋友可以參考下
    2015-03-03
  • JS復制到剪貼板示例代碼

    JS復制到剪貼板示例代碼

    復制到剪貼板的實現(xiàn)方法有很多,在本文將為大家詳細介紹下使用js是如何實現(xiàn)的,感興趣的朋友不要錯過
    2013-10-10
  • 詳解webpack打包后如何調(diào)試的方法步驟

    詳解webpack打包后如何調(diào)試的方法步驟

    這篇文章主要介紹了詳解webpack打包后如何調(diào)試的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11

最新評論