Example #1
0
		/// <summary>
		/// Combines two rectangle returning the mimimal rectangle containg both rectangles.
		/// </summary>
		/// <param name="r1"></param>
		/// <param name="r2"></param>
		/// <returns></returns>
		public static Rectangle Combine(Rectangle r1, Rectangle r2)
		{
			if (r1.Rank != r2.Rank)
				throw new ArgumentException("Rectangles are defined in spaces with different ranks.");

			Rectangle r = new Rectangle(r1.Rank);

			for (int i = 0; i < r1.origin.Length; i++)
			{
				int max = r1.shape[i] + r1.origin[i];

				r.origin[i] = Math.Min(r1.origin[i], r2.origin[i]);

				if (max < r2.origin[i] + r2.shape[i])
					max = r2.origin[i] + r2.shape[i];

				r.shape[i] = max - r1.origin[i];
			}
			return r;
		}
Example #2
0
		/// <summary>
		/// Combines two rectangle returning the mimimal rectangle containg both rectangles.
		/// </summary>
		/// <param name="r"></param>
		/// <exception cref="ArgumentException">Different ranks.</exception>
		public void CombineWith(Rectangle r)
		{
			if (Rank != r.Rank)
				throw new ArgumentException("Rectangles are defined in spaces with different ranks.");

			for (int i = 0; i < origin.Length; i++)
			{
				int max = shape[i] + origin[i];

				origin[i] = Math.Min(origin[i], r.origin[i]);

				if (max < r.origin[i] + r.shape[i])
					max = r.origin[i] + r.shape[i];
				shape[i] = max - origin[i];
			}
		}
Example #3
0
        /// <summary>
        /// Checks whether two rectangles intersect or not.
        /// </summary>
        /// <param name="r1"></param>
        /// <param name="r2"></param>
        /// <returns></returns>
        public static bool HasIntersection(Rectangle r1, Rectangle r2)
        {
            if (r1.IsEmpty || r2.IsEmpty)
                return false;
            if (r1.Rank != r2.Rank)
                throw new ArithmeticException("r1 and r2 have different rank");

            int r = r1.Rank;
            for (int i = 0; i < r; i++)
            {
                int a = Math.Max(r1.origin[i], r2.origin[i]);
                int b = Math.Min(r1.origin[i] + r1.shape[i] - 1, r2.origin[i] + r2.shape[i] - 1);
                if (a > b)
                    return false;
            }

            return true;
        }