Math 矩形——一个数学问题

Math 矩形——一个数学问题,math,language-agnostic,Math,Language Agnostic,我发现矩形有点不好笑: 比方说,给定的是左、上、右和下坐标的值,所有这些坐标都是包含在内的 因此,计算宽度如下所示: width = right - left + 1 到目前为止,这是合乎逻辑的。但是 零宽度(有时有意义)必须存储为: right = left - 1 当涉及到以下操作时,会产生问题: 对矩形坐标进行排序(使其从左到右,从上到下) 循环 当然,对于Width==0的特殊情况,可以使用额外的代码来处理这些事情,但是,说真的,没有更好的解决方案、标准模式或最佳实践来处理这个问

我发现矩形有点不好笑:

比方说,给定的是左、上、右和下坐标的值,所有这些坐标都是包含在内的

因此,计算宽度如下所示:

width = right - left + 1
到目前为止,这是合乎逻辑的。但是

零宽度(有时有意义)必须存储为:

right = left - 1
当涉及到以下操作时,会产生问题:

  • 对矩形坐标进行排序(使其从左到右,从上到下)
  • 循环
当然,对于
Width==0
的特殊情况,可以使用额外的代码来处理这些事情,但是,说真的,没有更好的解决方案、标准模式或最佳实践来处理这个问题吗

编辑:


目前,我已经放弃了代码中坐标的“排序”,取而代之的是一个断言,声明矩形必须是左->右,上->下,但严重地…

为了解决这个问题,大多数图形库将从左坐标向上绘制矩形,但不包括右坐标。因此,如果left=10,right=20,那么将绘制10到19个像素

您可以将其视为像素坐标,它指的不是照亮部分,而是像素之间的网格线


当然,您可以找到解决方法,但真正的问题是超出范围

您的范围是一个矩形,即使宽度为零也很方便:没有宽度为零的矩形。

通常,所有函数都有收缩,函数的一个条件是
docalculation(par\u rectangle)
实际上par\u rectangle是一个矩形

如果你需要一个宽度为零的类似复角的物体,你首先需要定义它,不要只是断言矩形的规则适用于你的定义

所有这些坐标都包含在内

这意味着实际上有两个不同的矩形,一个在另一个内。这就是你被抓住的地方:当你写作的时候

width = right - left + 1
这真的意味着:

inner_width = outer_right - outer_left + thickness
其中,
厚度
是内外矩形对应边之间的距离


因此,为了处理抽象数学意义上的问题,必须考虑两个矩形而不是一个矩形。

区分坐标和像素是很重要的。可以将坐标系视为在像素之间运行的不可见网格。以这种方式考虑坐标,如果将rect定义为{0,3,0,5},则会得到预期的3像素乘5像素

   |  |  |  |  |  |
0 -x--+--+--+--+--x-
   |  |  |  |  |  | 
1 -+--+--+--+--+--+-
   |  |  |  |  |  | <- pixels are rectangular areas between coordinate grid
2 -+--+--+--+--+--+-
   |  |  |  |  |  | 
3 -x--+--+--+--+--x-
   |  |  |  |  |  | 
   0  1  2  3  4  5
| | | | ||
0-x--+--+--+--+--x-
|  |  |  |  |  | 
1 -+--+--+--+--+--+-

|| | | | |如果边(左、右、上、下)包含在内,则根据定义,矩形的宽度(和高度)不能为0。通过“包括”边(即像素),你是说它必须至少有1个像素宽。

这就是为什么矩形通常被处理为两个边和两个维度。什么?宽度=右-左,而不是右-左+1。从左=2.5到右=3.8的矩形宽度为1.3,而不是2.3。您使用的是哪种坐标?我使用(请不要笑,我们这里讨论的是一个控制台应用程序!)短裤::-)@史莱瓦沙尔:像素。。所以从像素1到像素2(包括)的宽度是2。循环有什么问题?在所描述的系统中,使用
循环矩形的列(x=left;x实际上是真的,但我需要呈现一个小部件中的项目,该项目太小,无法显示所有内容。谁说没有宽度为0的矩形?矩形是一组点,宽度为0的矩形对应于空集。这一切取决于您对“矩形”的定义;当然,通常的数学定义并不排除宽度0。确实是一群数学人。矩形需要斜角,宽度为0时我不可能做到这一点。当然,屏幕总是真实数学的简化,但坐标[0,0][0,1]和[1,0]形成了一个直角(或一般[x,y],[x,y+1]),[x+1,y]始终为最小宽度1),并且说矩形是一组点,是实现它的一种方式,而不是定义(所有屏幕元素都是一组点,或者至少是从向量到一组点的转换),当支持空集时,实际上超出了矩形逻辑的范围,这首先会导致此类问题。好的,用直角(ITYM直角,而不是“直角”)来定义适用于初等几何。矩形的另一种定义是两个区间的笛卡尔积,在这种情况下,可以允许空区间。重点是这是定义的问题。(事实上,也谈到了“交叉矩形”,它来自有向区间,没有直角。)另外,如果点积(A-B),(B-C)=0,则可以将点A、B、C定义为形成直角,当A=B时,这是非常令人满意的。这是最好的答案,但由于我实现了TUI框架,所以我不能真正使用这个(数学上和逻辑上绝对完美的)解决方案。不过,非常感谢大家:-)@是的,我也遇到过这样的情况:)不客气。
   |  |  |  |  |  |
0 -x--+--+--+--+--x-
   |  |  |  |  |  | 
1 -+--+--+--+--+--+-
   |  |  |  |  |  | <- pixels are rectangular areas between coordinate grid
2 -+--+--+--+--+--+-
   |  |  |  |  |  | 
3 -x--+--+--+--+--x-
   |  |  |  |  |  | 
   0  1  2  3  4  5