Rectangle.Intersect(矩形)。功能上有错吗?

时间:2014-03-28 14:24:31

标签: c#

尝试编写程序,找到许多矩形之间的交集。试图交叉示例矩形(x,y,宽度,高度) - “2 5 5 3”和“4 7 2 4”,答案必须是“4 5 2 2”,但程序告诉我答案是“4 7 2 1“不可能!请帮我找错,我看不到。 我的程序代码:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;

namespace MyProgramm
{
 class Rectangles
 {
    private List<Rectangle> List = new List<Rectangle>();

    public void AddRectangle(int X, int Y, int Width, int Height)
    {
        List.Add(new Rectangle(X, Y, Width, Height));
    }
    public int[] CrossRectangles()
    {
        if (List.Count != 0)
        {
            if (List.Count != 1)
            {
                Rectangle answer = List [0];
                for (int i = 1; i < List.Count; i++)
                    answer.Intersect(List[i]);
                return new int[] { answer.X, answer.Y, answer.Width, answer.Height };
            }else
                return new int[] { List.First().X, List.First().Y, List.First().Width, List.First().Height };
        }else 
            return new int[] { 0, 0, 0, 0 };
    }
 }
 class Program
 {
    static void Main(string[] args)
    {
        Rectangles P = new Rectangles();

        P.AddRectangle(2, 5, 5, 3);
        P.AddRectangle(4, 7, 2, 4);

        foreach (int num in P.CrossRectangles())
            Console.WriteLine(num);

    }
 }
}

2 个答案:

答案 0 :(得分:5)

节目是对的,好的答案是&#34; 4 7 2 1&#34;。

很可能你对第二对参数的宽度和高度感到困惑,而不是&#34;右上角&#34;角。

但是在一张纸上绘制矩形,你会看到答案实际上是&#34; 4 7 2 1&#34;。

答案 1 :(得分:4)

这对我来说是正确的。

这是一个图形版本:

 123456789   123456789   123456789
1.........  1.........  1.........
2.........  2.........  2.........
3.........  3.........  3.........
4.........  4.........  4.........
5.│││││...  5.........  5.│││││...
6.│││││...  6.........  6.│││││...
7.│││││...  7...──....  7.││┼┼│...
8.........  8...──....  8...──....
9.........  9...──....  9...──....
X.........  X...──....  X...──....

正如您可以清楚地看到的那样,交点确实位于坐标{4,7}处,尺寸为2x1。