コード例 #1
0
ファイル: Distance.cs プロジェクト: codetriage-readme-bot/ZUI
        /// <summary>
        /// Gets the smallest of two distances.
        /// </summary>
        /// <param name="first">First distance.</param>
        /// <param name="second">Second distance.</param>
        /// <returns>Smallest distance.</returns>
        public static Distance Min(Distance first, Distance second)
        {
            Distance distance = new Distance
            {
                X = MathExtensions.AbsMin(first.X, second.X),
                Y = MathExtensions.AbsMin(first.Y, second.Y)
            };

            return(distance);
        }
コード例 #2
0
        /// <summary>
        /// Returns mininal distance between two rectangles.
        /// </summary>
        /// <param name="first">First rectangle.</param>
        /// <param name="second">Second rectangle.</param>
        /// <returns>Minimal distance.</returns>
        private Distance DistanceBetweenRectangles(Rect first, Rect second)
        {
            double x1 = DistanceBetweenRightEdgeAndRectangle(first, second);
            double x2 = DistanceBetweenLeftEdgeAndRectangle(first, second);
            double y1 = DistanceBetweenBottomEdgeAndRectangle(first, second);
            double y2 = DistanceBetweenTopEdgeAndRectangle(first, second);

            Distance distance = new Distance()
            {
                X = MathExtensions.AbsMin(x1, x2),
                Y = MathExtensions.AbsMin(y1, y2)
            };

            return(distance);
        }
コード例 #3
0
        /// <summary>
        /// Returns distance between the top edge of the rectangle and another rectangle.
        /// </summary>
        /// <param name="first">First rectangle.</param>
        /// <param name="second">Second rectangle.</param>
        /// <returns>Minimal distance.</returns>
        private double DistanceBetweenTopEdgeAndRectangle(Rect first, Rect second)
        {
            double snap;
            double distance = double.NaN;

            if (first.OverlapsHorizontally(second, Accuracy))
            {
                snap = second.Y;
                if (first.Y.IsNear(snap, SnapinDistance))
                {
                    distance = MathExtensions.AbsMin(snap - first.Y, distance);
                }

                snap = second.Y + second.Height + SnapinMargin;
                if (first.Y.IsNear(snap, SnapinDistance))
                {
                    distance = MathExtensions.AbsMin(snap - first.Y, distance);
                }
            }

            return(distance);
        }
コード例 #4
0
        /// <summary>
        /// Returns distance between the left edge of the rectangle and another rectangle.
        /// </summary>
        /// <param name="first">First rectangle.</param>
        /// <param name="second">Second rectangle.</param>
        /// <returns>Minimal distance.</returns>
        private double DistanceBetweenLeftEdgeAndRectangle(Rect first, Rect second)
        {
            double snap;
            double distance = double.NaN;

            if (first.OverlapsVertically(second, Accuracy))
            {
                snap = second.X;
                if (first.X.IsNear(snap, SnapinDistance))
                {
                    distance = MathExtensions.AbsMin(snap - first.X, distance);
                }

                snap = second.X + second.Width + SnapinMargin;
                if (first.X.IsNear(snap, SnapinDistance))
                {
                    distance = MathExtensions.AbsMin(snap - first.X, distance);
                }
            }

            return(distance);
        }