예 : http://www.zhaojz.com.cn/demo/draw9.html
코드 사본은 다음과 같습니다.
// 탄젠트를 그립니다
//가리키다
// 도트 센터
// r 반경
함수 DrawCircLetangent (Point, Dot, R) {
// 보조 라인 시작을 그립니다
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, 색상 : 'Darkred', Point : [DOT [0]+9*R, DOT [1], 'X']
});
DrawPoint ({
PW : 2, pH : 2, 색상 : 'Darkred', Point : [DOT [0], DOT [1] -4*r, 'y']
});
Drawline (point, [point [0], dot [1]], {color : color2}); // 세로 선을 포인트에서 x 축으로 그립니다.
드로 라인 (point, dot, {color : color2}); // 연결점과 점을 연결합니다
DRAWLINE ([POINT [0] -2*R, POINT [1]], [POINT [0]+2*R, POINT [1]], {COLOR : COLOR2}); // 포인트가있는 수평선을 그립니다
// 보조 라인 엔드를 그립니다
//point.push('Point ');
DrawPoint ({
PW : 2, ph : 2, 색상 : '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; //시나
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, +1은 포인트가 두 번째 및 네 번째 사분면에 있고, 0은 0이 축에 있습니다.
스위치 (HV) {
case 1:
if ((pm_h+pm_v) == -2) {
사분면 = 2; // 두 번째 사분면
}또 다른{
사분면 = 4; // 네 번째 사분면
}
부서지다;
사례 -1 :
if ((pm_h-pm_v) ==-2) {
사분면 = 3; // 세 번째 사분면
}
부서지다;
케이스 0 :
if ((pm_h+pm_v) == -1) {// x 축의 음의 절반 축 또는 y 축의 양의 반 축에있을 때 포인트가 두 번째 사분면에있는 것으로 결정됩니다.
사분면 = 2;
}
if ((pm_h+pm_v) == 1) {// 포인트가 x 축의 양의 반 축 또는 y 축의 음의 절반 축에있을 때, 포인트는 네 번째 사분면에있는 것으로 결정됩니다.
사분면 = 4;
}
부서지다;
기본:
}
var sinc = 0;
var conc = 0;
var sind = 0;
var cond = 0;
스위치 (사분면) {
case 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))
부서지다;
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+ (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;
부서지다;
case 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
DrawLine (Point, TangentPointa, {Color : Color}); // 탄젠트 선을 그립니다
DRAWLINE (DOT, TangentPointa, {Color : Color2}); // 도트와 탄젠트 포인트를 연결합니다
// DrawArc (Point, 17, (사분면 == 1 || 사분면 == 4? 180 : 0)-(사분면 == 2 || Quadrant == 3? (-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, (사분면 == 1 || 사분면 == 4? 180 : 0)-(사분면 == 2 || 사분면 == 3? (-1)*Math.asin (sind)*180/math.pi, 0);
DrawPoint ({// 포인트를 비틀립니다
PW : 3, pH : 3, 색상 : 'Darkred', 포인트 : TannentPointa
});
DrawPoint ({// 포인트를 비틀립니다
PW : 3, ph : 3, 색상 : 'Darkred', 포인트 : TangentPointB
});
// 보조 아크를 그립니다
// (사분면 == 1 || 사분면 == 4? 360 : 0)
DrawArc (Point, B, 60, (사분면 == 1 || 사분면 == 4? 180 : 0)-(사분면 == 2 || 사분면 == 3?
}