Exemplo: http://www.zhaojz.com.cn/demo/draw9.html
A cópia do código é a seguinte:
// Desenhe tangente
//apontar
// Centro de pontos
// raio r
função drawcircletangent (ponto, ponto, r) {
// Desenhe linhas auxiliares-start
var color = 'Darkred'; // a cor da tangente
var color2 = "#ccc"; // as cores de outras linhas auxiliares
DrawLine (DOT, [DOT [0]+9*R, DOT [1]], {color: color2}); // estende a linha horizontal onde o centro do círculo está
DrawLine (DOT, [DOT [0], DOT [1] -4*r], {color: color2}); // desenha a linha vertical onde o centro do círculo está
drawpoint ({
PW: 2, Ph: 2, cor: 'Darkred', Point: [DOT [0]+9*R, DOT [1], 'X']
});
drawpoint ({
PW: 2, Ph: 2, cor: 'Darkred', Point: [DOT [0], DOT [1] -4*R, 'Y']
});
drawline (ponto, [ponto [0], ponto [1]], {color: color2}); // desenha a linha vertical do ponto para o eixo x
drawline (ponto, ponto, {color: color2}); // Ponto de conexão e ponto
DrawLine ([ponto [0] -2*r, ponto [1]], [ponto [0]+2*r, ponto [1]], {color: color2}); // desenha a linha horizontal onde o ponto está
// desenha linhas auxiliares-final
//point.push('Point ');
drawpoint ({
PW: 2, Ph: 2, cor: 'Darkred', Point: Point
});
//dot.push('Centre ');
var r_square = math.pow (r, 2); // quadrado de r
var point_v = ponto [1] -dot [1]; // o quadrado da distância do ponto ao eixo x
var point_h = ponto [0] -dot [0]; // o quadrado da distância do ponto ao eixo y
var c_square = Math.pow (Point_V, 2) + Math.pow (Point_H, 2); // o quadrado da distância do ponto ao centro do círculo
var c = math.sqrt (c_square); // Distância de ponto a centro
var sina = math.abs (Point_v)/c; // Sina
var cosa = math.abs (Point_h)/c; // COSA
var b_square = c_square-r_square; // o quadrado da distância de ponto a tangente
var b = Math.sqrt (b_square); // a distância de ponto a tangente
var sinb = b/c; // sinb
var cosb = r/c; // Cosb
// determinar o quadrante onde o ponto está localizado com o centro do círculo como o ponto de coordenada
VAR quadrante = 1; // Valor padrão
var pm_h = Point_h == 0? Point_H: Point_H/Math.abs (Point_H); // direção horizontal
var pm_v = Point_V == 0? Point_V: Point_V/Math.abs (Point_V); // direção vertical
var hv = pm_h*pm_v; // Multiplique, quando -1, o ponto está no primeiro e terceiro quadrantes, +1, o ponto está no segundo e quarto quadrantes, e quando 0, o ponto está no eixo
switch (hv) {
Caso 1:
if ((pm_h+pm_v) ==-2) {
quadrante = 2; // O segundo quadrante
}outro{
quadrante = 4; // O quarto quadrante
}
quebrar;
Caso -1:
if ((pm_h-pm_v) ==-2) {
quadrante = 3; // O terceiro quadrante
}
quebrar;
Caso 0:
if ((pm_h+pm_v) ==-1) {// Quando o ponto está no meio eixo negativo do eixo x ou no meio eixo positivo do eixo y, é determinado que o ponto está no segundo quadrante
quadrante = 2;
}
if ((pm_h+pm_v) == 1) {// Quando o ponto está no meio eixo positivo do eixo x ou no meio eixo negativo do eixo y, é determinado que o ponto está no quarto quadrante
quadrante = 4;
}
quebrar;
padrão:
}
var sinc = 0;
var conc = 0;
var sind = 0;
var cond = 0;
Switch (quadrante) {
Caso 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))
quebrar;
Caso 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))
quebrar;
Caso 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;
quebrar;
Caso 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))
quebrar;
padrão:
}
var tangentPointA = [ponto [0]+b*conc, ponto [1]+b*sinc]; // posição do ponto tangente a
DrawLine (Point, TangentPointa, {Color: Color}); // desenha a linha tangente
DrawLine (DOT, TangentPoint, {color: color2}); // conectar pontos e pontos tangentes
// drawarc (ponto, 17, (quadrante == 1 || quadrante == 4? 180: 0)-(quadrante == 2 || quadrante == 3? (-1): 1)*math.asin (sinc)*180/math.pi, 0);
var TangentPointB = [ponto [0]+b*cond, ponto [1]+b*sind]; // posição do ponto tangente B
drawline (ponto, tangentpointb, {color: color}); // desenha a linha tangente
DrawLine (DOT, TangentPointB, {color: color2}); // conectar pontos e pontos tangentes
// drawarc (ponto 27, (quadrante == 1 || quadrante == 4? 180: 0)-(quadrante == 2 || quadrante == 3? (-1): 1)*math.asin (sind)*180/math.pi, 0);
drawpoint ({// trag o ponto
PW: 3, Ph: 3, cor: 'Darkred', Point: TangentPoint
});
drawpoint ({// trag o ponto
PW: 3, Ph: 3, cor: 'Darkred', Point: TangentPointB
});
// Desenhe arco auxiliar
// (quadrante == 1 || quadrante == 4? 360: 0)
drawarc (ponto, b, 60, (quadrante == 1 || quadrante == 4? 180: 0)-(quadrante == 2 || quadrante == 3? (-1): 1)*math.asin (sinc)*180/math.pi-5);
}