コード例 #1
0
ファイル: Geometry.cs プロジェクト: drunkenninja/Elobuddy
        /// <summary>
        ///     Returns the two intersection points between two circles.
        /// </summary>
        public static Vector2[] CircleCircleIntersection(Vector2 center1, Vector2 center2, float radius1, float radius2)
        {
            var D = center1.Distance7(center2);
            //The Circles dont intersect:
            if (D > radius1 + radius2 || (D <= Math.Abs(radius1 - radius2)))
            {
                return new Vector2[] { };
            }

            var A = (radius1 * radius1 - radius2 * radius2 + D * D) / (2 * D);
            var H = (float)Math.Sqrt(radius1 * radius1 - A * A);
            var Direction = (center2 - center1).Normalized2();
            var PA = center1 + A * Direction;
            var S1 = PA + H * Direction.Perpendicular2();
            var S2 = PA - H * Direction.Perpendicular2();
            return new[] { S1, S2 };
        }
コード例 #2
0
ファイル: Prediction.cs プロジェクト: wearegodz/WeAreGodz
            internal static Vector2[] GetCandidates(Vector2 from, Vector2 to, float radius, float range)
            {
                var middlePoint = (from + to) / 2;
                var intersections = Geometry2.CircleCircleIntersection(
                    from, middlePoint, radius, from.Distance7(middlePoint));

                if (intersections.Length > 1)
                {
                    var c1 = intersections[0];
                    var c2 = intersections[1];

                    c1 = from + range * (to - c1).Normalized2();
                    c2 = from + range * (to - c2).Normalized2();

                    return new[] { c1, c2 };
                }

                return new Vector2[] { };
            }