Ruby on rails Ruby/C逻辑,用于确定类似excel的单元格位置是否重叠
我正在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块内,因此用户应该会收到一些错误消息(验证错误),说明这些是重叠位置 我想到的一个逻辑是将每个位置转换成一个唯一的整数值,并使用它进行区分,但到目前为止,我没有得到任何逻辑来跟踪这种情况 如果有人知道如何解决这个问题,请告诉我 谢谢,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块内,因此用户应该会收到一些错误消息(验证错误),说明
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)。如果你只处理,比方说,几十个矩形,那么你应该没问题。然而,如果您需要检查数千个矩形,那么您可能需要动态地构建两个间隔树,每个轴一个