例:http://www.zhaojz.com.cn/demo/draw9.html
コードコピーは次のとおりです。
//接線を描きます
//ポイント
//ドットセンター
// r半径
関数drawcirletangent(point、dot、r){
//補助ラインスタートを描きます
var color = 'darkred'; //接線の色
var color2 = "#ccc"; //他の補助線の色
ドローライン(dot、[dot [0]+9*r、dot [1]]、{color:color2}); //円の中心がある水平線を拡張します
ドローライン(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']
});
ドローライン(ポイント、[ポイント[0]、dot [1]]、{color:color2}); //垂直線をポイントからx軸まで描画します
ドローライン(ポイント、ドット、{color:color2}); //ポイントとドットを接続します
ドローライン([ポイント[0] -2*r、ポイント[1]]、[ポイント[0]+2*r、ポイント[1]、{color:color2}); //ポイントがある場所に水平線を描画します
//補助ラインエンドを描きます
//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]; //ポイントからx軸までの距離の正方形
var point_h = point [0] -dot [0]; //ポイントからy軸までの距離の正方形
var c_square = math.pow(point_v、2) + math.pow(point_h、2); //ポイントから円の中心までの距離の正方形
var c = math.sqrt(c_square); //ポイントから中央までの距離
var sina = math.abs(point_v)/c; // sina
var cosa = math.abs(point_h)/c; // cosa
var b_square = c_square-r_square; //ポイントから接線までの距離の正方形
var b = math.sqrt(b_square); //ポイントから接線までの距離
var sinb = b/c; // sinb
var cosb = r/c; // cosb
//円の中心が座標ドットとしてポイントが配置されている象限を決定します
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、ポイントが最初と3番目の象限、+1、ポイントが2番目と4番目の象限に、0が軸上にある場合
switch(hv){
ケース1:
if((pm_h+pm_v)== -2){
Quadrant = 2; // 2番目の象限
}それ以外{
Quadrant = 4; // 4番目の象限
}
壊す;
ケース-1:
if((pm_h-pm_v)== -2){
Quadrant = 3; // 3番目の象限
}
壊す;
ケース0:
if((pm_h+pm_v)== -1){//ポイントがx軸の負の半軸またはy軸の正の半軸上にある場合、ポイントが2番目の象限にあると判断されます
Quadrant = 2;
}
if((pm_h+pm_v)== 1){//ポイントがx軸の正の半軸またはy軸の負の半軸にある場合、ポイントが4番目の象限にあると判断されます
Quadrant = 4;
}
壊す;
デフォルト:
}
var sinc = 0;
var conc = 0;
var Sind = 0;
var cond = 0;
switch(quadrant){
ケース1:
sinc = cosb*cosa+sinb*sina; // sinc = sin(90+(ba))= cos(ba)= cosb*cosa+sinb*sina
conc = - (sinb*cosa -cosb*sina); // cosc = cos(90+(ba))= -sin(ba)= - (sinb*cosa -cosb*sina)
sind = - (cosa*cosb -sina*sinb); // sind = sin(270-(a+b))
cond = - (sina*cosb+cosa*sinb); // cond = cos(270-(a+b))
壊す;
ケース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+(ab))
cond = - (sina*cosb -cosa*sinb); // cond = cos(90+(ab))
壊す;
ケース3:
sinc = - (cosa*cosb+sina*sinb); // sinc = sin(-90+(ab))
conc = - (sina*cosb -cosa*sinb); // conc = cos(-90+(ab))
sind =(cosa*cosb-sina*sinb);
cond = sina*cosb+cosa*sinb;
壊す;
ケース4:
sinc = cosa*cosb-sina*sinb;
conc = - (sina*cosb+cosa*sinb)
sind = - (cosa*cosb+sina*sinb); // sind = sin(270+(ab))
cond =(sina*cosb-cosa*sinb); // cond = cos(270+(ab))
壊す;
デフォルト:
}
var tangentpointa = [point [0]+b*conc、point [1]+b*sinc]; //接線点aの位置a
ドローライン(Point、TangentPointa、{color:color}); //接線線を描きます
ドローライン(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の位置b
drawline(point、tangentpointb、{color:color}); //接線線を描きます
ドローライン(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);
}