Exemple: http://www.zhaojz.com.cn/demo/draw9.html
La copie de code est la suivante:
// dessiner tangent
//indiquer
// Dot Center
// RADIUS R
fonction drawCirCletangent (point, point, r) {
// dessiner des lignes auxiliaires de démarrer
var color = 'darkred'; // la couleur de la tangente
var color2 = "#ccc"; // les couleurs d'autres lignes auxiliaires
Drawline (point, [point [0] + 9 * r, dot [1]], {Color: Color2}); // étendez la ligne horizontale où se trouve le centre du cercle
Drawline (dot, [dot [0], dot [1] -4 * r], {Color: Color2}); // dessine la ligne verticale où se trouve le centre du cercle
Dirtpoint ({
PW: 2, Ph: 2, Couleur: 'Darkred', point: [Dot [0] + 9 * R, Dot [1], 'X']
});
Dirtpoint ({
PW: 2, Ph: 2, Couleur: 'Darkred', point: [Dot [0], Dot [1] -4 * R, 'Y']
});
Drawline (Point, [Point [0], Dot [1]], {Color: Color2}); // dessine la ligne verticale du point à l'axe x
Drawline (point, point, {Color: Color2}); // Connectez le point et le point
Drawline ([Point [0] -2 * R, Point [1]], [Point [0] + 2 * R, Point [1]], {Color: Color2}); // dessine la ligne horizontale où le point est
// dessine les lignes auxiliaires
//point.push('Point ');
Dirtpoint ({
PW: 2, PH: 2, Couleur: «Darkred», point: point
});
//dot.push('centre ');
var r_square = math.pow (r, 2); // carré de r
var point_v = point [1] -dot [1]; // le carré de la distance du point à l'axe x
var point_h = point [0] -dot [0]; // le carré de la distance du point à l'axe y
var c_square = math.pow (point_v, 2) + math.pow (Point_h, 2); // le carré de la distance du point au centre du cercle
var c = math.sqrt (c_square); // Distance du point au centre
var sina = math.abs (point_v) / c; // Sina
var cosa = math.abs (point_h) / c; // COSA
var b_square = c_square-r_square; // le carré de la distance du point à la tangente
var b = math.sqrt (b_square); // la distance du point à la tangente
var sinb = b / c; // sinb
var cosb = r / c; // COSB
// déterminer le quadrant où le point est situé avec le centre du cercle comme point de coordonnée
var quadrant = 1; // Valeur par défaut
var pm_h = point_h == 0? Point_h: point_h / math.abs (point_h); // Direction horizontale
var pm_v = point_v == 0? Point_v: point_v / math.abs (point_v); // Direction verticale
var hv = pm_h * pm_v; // multiplier, lorsque -1, le point est dans les premier et troisième quadrants, +1, le point est dans les deuxième et quatrième quadrants, et lorsque 0, le point est sur l'axe
commutateur (hv) {
Cas 1:
if ((pm_h + pm_v) == - 2) {
quadrant = 2; // le deuxième quadrant
}autre{
quadrant = 4; // le quatrième quadrant
}
casser;
cas -1:
if ((pm_h-pm_v) == - 2) {
quadrant = 3; // le troisième quadrant
}
casser;
Cas 0:
if ((pm_h + pm_v) == - 1) {// Lorsque le point est sur le demi-axe négatif de l'axe x ou du demi-axe positif de l'axe y, il est déterminé que le point est dans le deuxième quadrant
quadrant = 2;
}
if ((pm_h + pm_v) == 1) {// Lorsque le point est sur le demi-axe positif de l'axe x ou du demi-axe négatif de l'axe y, il est déterminé que le point est dans le quatrième quadrant
quadrant = 4;
}
casser;
défaut:
}
var sinc = 0;
var conc = 0;
var sind = 0;
var cond = 0;
commutateur (quadrant) {
Cas 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))
casser;
Cas 2:
sinc = - (cosb * cosa-sinb * sina); // sinc = sin (-90+ (a + b))
con = sina * cosb + cosa * sinb; // con = cos (-90+ (a + b))
Sind = cosa * cosb + sina * sinb; // Sind = sin (90+ (AB))
cond = - (sina * cosb-Cosa * sinb); // cond = cos (90+ (AB))
casser;
Cas 3:
sinc = - (cosa * cosb + sina * sinb); // sinc = sin (-90+ (ab))
Conc = - (sina * cosb-Cosa * sinb); // con = cos (-90+ (ab))
Sind = (cosa * cosb-sina * sinb);
cond = sina * cosb + cosa * sinb;
casser;
Cas 4:
sinc = cosa * cosb-sina * sinb;
con = - (sina * cosb + cosa * sinb)
Sind = - (cosa * cosb + sina * sinb); // Sind = sin (270+ (AB))
cond = (sina * cosb-Cosa * sinb); // cond = cos (270+ (AB))
casser;
défaut:
}
var tangentpointa = [point [0] + b * con, point [1] + b * sinc]; // position du point tangent
Drawline (point, tangentpointa, {couleur: couleur}); // dessine la ligne tangente
Drawline (dot, tangentpointa, {Color: Color2}); // Connectez les points et les points tangents
// 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]; // position du point tangent B
Drawline (point, tangentPointB, {couleur: couleur}); // dessine la ligne tangente
Drawline (dot, tangentPointB, {Color: Color2}); // Connectez les points et les points tangents
// drawarc (point, 27, (quadrant == 1 || quadrant == 4? 180: 0) - (quadrant == 2 || quadrant == 3? (- 1): 1) * math.asin (Sind) * 180 / math.pi, 0);
Dirtpoint ({// Trag le point
PW: 3, Ph: 3, Couleur: «Darkred», point: Tangentpointa
});
Dirtpoint ({// Trag le point
PW: 3, Ph: 3, Couleur: «Darkred», point: TangentPointB
});
// dessiner l'arc auxiliaire
// (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);
}