Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby/C逻辑,用于确定类似excel的单元格位置是否重叠_Ruby On Rails_C_Ruby_Logic - Fatal编程技术网

Ruby on rails Ruby/C逻辑,用于确定类似excel的单元格位置是否重叠

Ruby on rails Ruby/C逻辑,用于确定类似excel的单元格位置是否重叠,ruby-on-rails,c,ruby,logic,Ruby On Rails,C,Ruby,Logic,我正在Rails应用程序中使用它编写一个ruby代码,在这个应用程序中,我必须接受用户提供的类似excel单元格的结构,还必须验证这些单元格结构 例如: 用户应能够通过冒号(如A1:B2)分隔指定单元格块 应覆盖表格中的A1、A2、B1、B2单元 同样,用户可以输入许多位置,如 A1:B1 A2:C2 A1:F1 但当用户进入重叠位置时,问题就出现了,例如: A1:D5和A2:C3以及D1:E1和A1:F2 在本例中,A2:C3位于A1:D5块内,因此用户应该会收到一些错误消息(验证错误),说明

我正在Rails应用程序中使用它编写一个ruby代码,在这个应用程序中,我必须接受用户提供的类似excel单元格的结构,还必须验证这些单元格结构

例如:

用户应能够通过冒号(如A1:B2)分隔指定单元格块 应覆盖表格中的A1、A2、B1、B2单元

同样,用户可以输入许多位置,如

A1:B1 A2:C2 A1:F1

但当用户进入重叠位置时,问题就出现了,例如:

A1:D5和A2:C3以及D1:E1和A1:F2

在本例中,A2:C3位于A1:D5块内,因此用户应该会收到一些错误消息(验证错误),说明这些是重叠位置

我想到的一个逻辑是将每个位置转换成一个唯一的整数值,并使用它进行区分,但到目前为止,我没有得到任何逻辑来跟踪这种情况

如果有人知道如何解决这个问题,请告诉我

谢谢,
Dean

您想要做的是简单的长方体或矩形碰撞检测,这是游戏和图形编程中一个广为人知且长期解决的问题

例如,请参阅以下博文:

您需要将字母数字单元格名称(列+行)转换为整数(x,y)坐标,以简化计算

因此,从
A1:D5
A2:C3
它们变成坐标:
(1,1):(4,5)
(1,2):(3,3)

然后,一个简单的方框碰撞检测算法将能够确定两个点
(1,2)
(3,3)
位于矩形
(1,1):(4,5)
,因此第二个矩形完全包含在第一个矩形中,即,您有重叠

在您的例子中,您还需要确保算法将“边”碰撞视为重叠。也就是说,
A1:B2
在技术上与
B1:C2
重叠,因为它们共享相同的“边缘”(即,两个单元格
B1:B2

注意:检查每个矩形与其他矩形是否相交的“天真”算法的复杂性为O(n^2)。如果你只处理,比方说,几十个矩形,那么你应该没问题。然而,如果您需要检查数千个矩形,那么您可能需要动态地构建两个间隔树,每个轴一个