【发布时间】:2019-06-09 03:34:53
【问题描述】:
我知道 Rectangle(和 RectangleF)ctor 允许负尺寸,但我不明白为什么 ctor 不将其转换为必须具有矩形的“实际值”,例如:
x:0, y:0, w:-100, h:200 == x:-100, y:0, w:100, h:200
等等。这没有意义。如果您在第一种情况下要求面积(W x H),您会得到......负面积。如果你要求周长,那么它就完全坏了。当逻辑和数学(基本数学)说“形状的大小不能为负数”时,它会迫使您编写大量样板文件Math.Abs。
如果你使用FromLTRB,那么你必须开始制作最小值和最大值,这是很多脏代码。
.net 团队以这种方式制作 Rectangle ctor 有什么微妙的原因吗?
最后,是否有任何包含“以正确方式”构建矩形的方法,还是我必须这样做?
编辑:我发现了另一个问题,我称之为错误;如果您使用负 x(例如:-100)和负宽度(例如:-200),它会显示“我的权利是 -300”。与顶部和底部和左侧相同。好的! 我可以理解他对待底片尺寸的方式,但这对我来说似乎是不可接受的。现在正确的不是正确的......
【问题讨论】:
-
不同的用例可能有不同的策略。例如,您可能有一个代表屏幕的一部分的矩形,并且您根据进入该空间的内容来缩小矩形。如果你有太多东西,矩形的宽度会变成负数,比如上面显示的
-100。这真的意味着 100 像素的内容有空间吗?不,这意味着你的空间用完了,宽度应该被视为零。此外,宽度可能会变为负数,但只是暂时的。例如,减去 50 个像素然后加上 50 个像素应该是一个 nop。 -
矩形(和其他结构)不仅仅用于绘图。它们可用于任何类型的计算。这就像想知道为什么会有负数,因为你不能花 -10 美元,所以为了你的方便,something 应该变成正数。
-
@Jimi 我明白,但是,如果我问矩形“嘿,你的宽度是多少?”我希望(恕我直言)一个“可能的”值,一个正值:宽度为 100,不同的是方向是“向左”。但是好的,我明白了,我已经构建了一个静态函数来满足我的要求。
-
@Jimi 你觉得我的编辑怎么样,你觉得还可以吗?
-
如果矩形是镜像的,那么-300 的右边就是右边。这在简单的矩形形状的情况下没有太大区别,因为无论您以这种方式或那种方式绘制它看起来都一样,但是考虑一个汽车的矩形图像,正确的方式(车牌可读)。现在用户抓住右手手柄并将矩形的右侧拖过原点并从另一侧拖出到-300。右侧仍然是右侧,但现在在视觉上位于左侧(汽车的右侧仍然是右侧),并且车牌向后。
标签: c# rectangles system.drawing