[Java] Calculer les coordonnées et les points d'intersection d'un cercle inscrit à un angle formé par trois points.

fonction_getCircleInscrit.jpg Soit un angle ^ABC formé par les points A, B et C. Il est possible d'inscrire le cercle de centre C dans l'angle, avec V1 et V2 respectivement sur [AB] et [BC]. Cette méthode retourne un tableau de trois points, qui sont respectivement V1, V2 et C.


       /**
*
* Retourne un tableau de Point2d :
* indice 0 = point d'intersection entre BA et le cercle
* indice 1 = point d'intersection entre BC et le cercle
* indice 2 = point au centre du cercle
*/
public static Point2d[] getCircleInscrit(Point2d a, Point2d b, Point2d c,
double radius) {

// Soit O le centre du cercle inscrit
Point2d O = null;

// On calcule la valeur de l'angle ABC, et on le divise par deux
// pour trouver l'angle ABO
double alpha = getAngleRad(a, b, c) / 2;

// On cherche la distance sur BA et BC qui nous donne la position
// des points d'intersection entre les droites et le cercle
// po1 sur BA
// po2 sur BC
double bx = radius / Math.tan(alpha);

Point2d po1 = getPointOnLine(b, a, bx);
Point2d po2 = getPointOnLine(b, c, bx);

// On cherche la bissectrice de l'angle ABC
// Cette methode retourne un des points de cette bissectrice BX
Point2d X = getBissectricePoint(a, b, c);

// On calcule la longeur du sergment BO
double bo = Math.sqrt(bx*bx + radius*radius);

// On fabrique le vecteur BX
Vector2d vec = vector(b, X);
// On normalise le vecteur (recuperation du vecteur unitaire)
vec.normalize();
// On redimensionne le vecteur
vec.scale(bo);
// On replace le vecteur sur B
vec.add(b);

//O = getPointOnLine(b, O, bo);
O = new Point2d(vec.x, vec.y);

return new Point2d[] {
po1,
po2,
O
};

}

public static Vector2d vector(Point2d a, Point2d b) {
return new Vector2d(
b.x-a.x,
b.y-a.y
);
}

About the Author

Ted Marklor est un web designer, un web developer et un génie de la nature. Transcendant le web depuis bientôt 15 ans, Ted est une source d’inspiration et de conseil pour toute une génération de jeunes programmeurs. Le Web 2.0, c’est lui. Dans la vie, il aime aussi faire des avions en papier, s’inventer des pseudonymes et une vie de winner, et surtout parler de lui à la troisième personne. Ça se fait en ce moment sur les blogs…


Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.