public static bool GetCircumcircle(Vector2 a, Vector2 b, Vector2 c, out Vector2 center, out double radius) { Vector2 edgeA = (b - a); Vector2 edgeB = (c - b); Vector2 edgeC = (a - c); Vector2 edgeCenterA = (a + b) * 0.5; Vector2 edgeCenterB = (b + c) * 0.5; if (GeometryMath.Intersect(edgeCenterA, edgeA.Cross(), edgeCenterB, edgeB.Cross(), out center)) { double lengthA = edgeA.Length(); double lengthB = edgeB.Length(); double lengthC = edgeC.Length(); double divider = Math.Sqrt((lengthA + lengthB + lengthC) * (lengthB + lengthC - lengthA) * (lengthA + lengthC - lengthB) * (lengthA + lengthB - lengthC)); if (divider > 0) { radius = (lengthA * lengthB * lengthC) / divider; return(true); } } radius = 0.0; // All triangle points are on a line -> Infinite radius of circumcircle, cannot calculate radius return(false); }
public bool PointInCircumcircle(List <Vector2> points, Vector2 point) { Vector2 a = points[A]; Vector2 b = points[B]; Vector2 c = points[C]; return(GeometryMath.PointInCircumcircle(point, a, b, c)); }
public bool GetBarycentricCoordinates(List <Vector2> points, Vector2 point, out double t, out double u, out double v) { Vector2 a = points[A]; Vector2 b = points[B]; Vector2 c = points[C]; return(GeometryMath.GetBarycentricCoordinates(point, a, b, c, out t, out u, out v)); }