algorithm - 从位置获取螺旋索引

标签 algorithm language-agnostic

我正在使用 Alberto Santini 对此问题的解决方案来获取基于项目索引的螺旋网格引用

Algorithm for iterating over an outward spiral on a discrete 2D grid from the origin

这不是公认的解决方案,但它是满足我需求的最佳解决方案,因为它避免了使用循环。

它运行良好,但我现在想要的是逆向操作。基于已知的 x 和 y 坐标返回位置的索引。

这是退还给定位置周围元素的前奏。

最佳答案

帕斯卡代码:

if y * y >= x * x then begin
  p := 4 * y * y - y - x;
  if y < x then
    p := p - 2 * (y - x)
end
else begin
  p := 4 * x * x - y - x;
  if y < x then
    p := p + 2 *(y - x)
end;

描述:左上半对角线 (0-4-16-36-64) 包含平方层数 (4 * layer^2)。外部 if 语句定义层并在左上半平面的相应行或列中找到(预)位置的结果,内部 if 语句校正镜像位置的结果。

关于algorithm - 从位置获取螺旋索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9970134/

相关文章:

c# - 对具有重复值的数组进行线性搜索

regex - 将有限状态机转换为正则表达式

algorithm - 给定序列的平衡索引 : What is the best algorithm to find one?

sorting - 将 ISO 8601 日期向前或向后排序

java - 这种冒泡排序变体如何有效地进行排序?

mysql - 从多个表中合并排序数据的有效方法

python - 构造一个KMP算法要回溯多次的例子

algorithm - 按位和处理添加和删除项目的有效方法

c# - 对象内的链接是否被视为反模式?

oop - 与面向对象设计相关的组合是什么?