arrays - 计算导航 2d map (数组)的方向(向量)

标签 arrays algorithm vector 2d

是否可以创建一种算法,返回表示二维 map 上主要八个方向的有序向量列表?我不想对这些值进行硬编码,也不想尽可能使用巨大的 if/then/else 或 case 树。

以下是我需要按顺序计算的向量:

0, -1
1, -1
1, 0
1, 1
0, 1
-1, 1
-1, 0
-1, -1

根据下图,我需要先在顶部生成向量,然后顺时针迭代其余部分:

Diagram

(我有一个二维数组 - x 和 y 值 - 总共有八个字符位置。每个字符都从中心开始。我希望能够按顺序生成每个向量,因为我循环遍历字符然后将向量的 x 和 y 分量添加到关联字符的位置,以便每个字符从中心沿其关联方向向外移动。)

您从上面的数字中看出规律了吗?是否可以设计一种算法以正确的顺序生成这些对,或者我是否坚持对它们进行硬编码?

最佳答案

这是它的伪代码算法:

for i = 0 to 7
    x = ROUND(COS(i*PI/4.0), 0)
    y = ROUND(SIN(i*PI/4.0), 0)
next i

ROUND(n,d)函数与Excel公式函数相同

当然,使用 COS/SIN 是非常低效的。

此外,如果您想要特定的订单,您可能需要摆弄它。 (我认为将循环更改为 for i = 4 to -3 step -1 以获得您列出的顺序)。

关于arrays - 计算导航 2d map (数组)的方向(向量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022990/

相关文章:

C 编程。比较数组的内容。

arrays - 如何在perl中找到某个短语的行号?

c++ - 使用 vector 迭代器访问方法

c++ - 将单个字节的整数值复制到无符号字符的 vector

javascript - 如何分配尚未分配的尽可能低的数字

c++ - pop_back() 返回值?

javascript - 在 JavaScript 中,声明一个数组来存储单个值只是为了方便迭代它好吗?

javascript - 优雅地同时计算数字数组的最小值和最大值

c++ - Dijkstra 算法的复杂性

algorithm - 缩放 3D 模型,寻找原点