示例#1
0
        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);
        }
示例#2
0
        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));
        }
示例#3
0
        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));
        }