Пример: http://www.zhaojz.com.cn/demo/draw9.html
Кода -копия выглядит следующим образом:
// нарисовать тангенс
//точка
// DOT Center
// r радиус
Функция trailcircletangent (точка, точка, r) {
// Нарисуйте вспомогательные линии
var color = 'Darkred'; // цвет касания
var color2 = "#ccc"; // цвета других вспомогательных линий
Linkline (dot, [dot [0]+9*r, dot [1]], {color: color2}); // расширить горизонтальную линию, где центр круга
Linkline (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 (точка, [точка [0], точка [1]], {color: color2}); // Нарисуйте вертикальную линию от точки к оси x
Drawline (точка, точка, {color: color2}); // подключить точку и точку
Linkline ([точка [0] -2*r, точка [1]], [точка [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; // 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, точка находится в первом и третьем квадрантах, +1, точка находится во втором и четвертом квадрантах, а когда 0, точка находится на оси
Switch (HV) {
Случай 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;
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]; // положение касательной точки А
Drawline (Point, TangentPointa, {Color: Color}); // Нарисуйте касательную линию
Drawline (dot, tangentpointa, {color: color2}); // подключать точки и касательные точки
// drawarc (точка, 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 (точка, 27, (квадрант == 1 || Quadrant == 4? 180: 0)-(Quadrant == 2 || Quadrant == 3? (-1): 1)*Math.asin (SIND)*180/MATH.PI, 0);
Drawpoint ({// трагка точка
PW: 3, ph: 3, цвет: «Темный», точка: Tangentpointa
});
Drawpoint ({// трагка точка
PW: 3, ph: 3, цвет: «Darkred», Point: TangentPointb
});
// Нарисовать вспомогательную дугу
// (Quadrant == 1 || Quadrant == 4? 360: 0)
drawarc (точка, B, 60, (Quadrant == 1 || Quadrant == 4? 180: 0)-(Quadrant == 2 || Quadrant == 3? (-1): 1)*Math.asin (SINC)*180/MATH.PI-5);
}