/// <summary> /// To find the center of the circumscribed circle of the triangle, we need to find /// the intersection point of the 3 perpendicular bisector of the triangle /// </summary> /// <returns></returns> public Vector3 GetCircleCenter(Vector3 A, Vector3 B, Vector3 C) { Vector3 AB = (B - A); Vector3 BC = (C - B); Vector3 CA = (A - C); // Je récupère un produit vectoriel que je pourai ensuite utiliser pour // trouver les médiatrices // Using Cross product to find perpendicular bisectors Vector3 cross = Vector3.Cross(AB, BC); cross.Normalize(); // Vertex from where the perpendicular bisectors comes off Vector3 M = A + (AB / 2.0f); Vector3 U = Vector3.Cross(AB, cross); U.Normalize(); Vector3 N = B + (BC / 2.0f); Vector3 V = Vector3.Cross(BC, cross); V.Normalize(); Vector3 result = new Vector3(); MathStuffs.SegmentIntersect(M, M + U, N, N + V, ref result); // Now looking for the intersection point between these 2 line segments // Pour se faire, on va résoudre l'équation à 2 inconnues utilisant l'équation //// paramétriques des 2 droites //float s = M.Y + ( ( N.X * U.Y ) / U.X ) - ( ( M.X * U.Y )/ U.X ) - N.Y; //float denominateur = U.Y - (( V.X * U.Y ) / U.X); //s = s / denominateur; //float x = N.X + s * V.X; //float y = N.Y + s * V.Y; return(new Vector3(result.X, result.Y, 0.0f)); }
/// <summary> /// Pour trouver le centre du cercle circonscrit au triangle, /// il faut trouver le point d'intersection des 3 médiatrices du triangle /// </summary> /// <returns></returns> public Vector3 GetCircleCenter(Vector3 A, Vector3 B, Vector3 C) { Vector3 AB = (B - A); Vector3 BC = (C - B); Vector3 CA = (A - C); // Je récupère un produit vectoriel que je pourai ensuite utiliser pour // trouver les médiatrices Vector3 cross = Vector3.Cross(AB, BC); cross.Normalize(); // Sommet d'ou part la médiatrice Vector3 M = A + (AB / 2.0f); Vector3 U = Vector3.Cross(AB, cross); U.Normalize(); Vector3 N = B + (BC / 2.0f); Vector3 V = Vector3.Cross(BC, cross); V.Normalize(); Vector3 result = new Vector3(); MathStuffs.SegmentIntersect(M, M + U, N, N + V, ref result); // Et maintenant on cherche le point d'intersection entre ces 2 segments // Pour se faire, on va résoudre l'équation à 2 inconnues utilisant l'équation //// paramétriques des 2 droites //float s = M.Y + ( ( N.X * U.Y ) / U.X ) - ( ( M.X * U.Y )/ U.X ) - N.Y; //float denominateur = U.Y - (( V.X * U.Y ) / U.X); //s = s / denominateur; //float x = N.X + s * V.X; //float y = N.Y + s * V.Y; return(new Vector3(result.X, result.Y, 0.0f)); }