构造函数文档指出
Rectangle(Int32,Int32,Int32,Int32)初始化的新实例 具有指定位置和大小的Rectangle类。
位置:
参数
x
Int32矩形左上角的x坐标。
y
Int32矩形左上角的y坐标。
宽度
Int32矩形的宽度。
高度
Int32矩形的高度。
请记住,这是我的几个测试矩形:
Rectangle1(25,43,11,9)
Rectangle2(35,45,9,1)
根据MS文档,x和y坐标都与
相关左上角
,即:
矩形1 x坐标从25变到36,y从43变到34
Rectangles2 x坐标从35降低到44,y从45降低到44
这意味着它们不会重叠,因为Rectangle2底部(y = 44)比Rectangle1顶部(y = 43)高1个单位
事实上,它与以下简单测试冲突:
class Program
{
static void Main(string[] args)
{
Rectangle r1 = new Rectangle(25,43,11,9);
Rectangle r2 = new Rectangle(35, 45, 9, 1);
Rectangle r3 = new Rectangle();
r3 = Rectangle.Intersect(r1, r2);
if (!r3.IsEmpty)
{
Console.WriteLine("X = "+ r3.X);
Console.WriteLine("Y = " + r3.Y);
Console.WriteLine("Width = " + r3.Width);
Console.WriteLine("Height = " + r3.Height);
}
else
Console.WriteLine("r1 and r2 do not intersect");
Console.ReadLine();
}
}
我现在很困惑,因为测试矩形结果在一个单元的坐标35,45处重叠。我无法解释。
答案 0 :(得分:2)
似乎您在弄错y轴。 R1从25、43到35、51,R2从35、45到43、45。我的值现在是INCLUSIVE界,因此它是x +宽度-1和y +高度-1。因此,相交正好像素为35、45,大小为1x1像素。因此计算正确。
答案 1 :(得分:0)
x坐标向右增加; y坐标从 从上到下。
其次:
对于屏幕坐标,原点是屏幕坐标的左上角 屏幕。
因此,屏幕的左上角为(0,0),并且您从顶部到底部 DOWN 时Y值 INCREASE 。
基本上,Y轴已从您惯用的标准数学类绘图中翻转出来。
在这里,我不仅使用Left和Top来显示坐标,还使用Right和Bottom属性来显示坐标:
Console.WriteLine(String.Format("r1: ({0}, {1}) --> ({2}, {3})", r1.Left.ToString(), r1.Top.ToString(), r1.Right.ToString(), r1.Bottom.ToString()));
Console.WriteLine(String.Format("r2: ({0}, {1}) --> ({2}, {3})", r2.Left.ToString(), r2.Top.ToString(), r2.Right.ToString(), r2.Bottom.ToString()));
这将产生以下输出:
r1: (25, 43) --> (36, 52)
r2: (35, 45) --> (44, 46)
希望能帮助您了解正在发生的事情。