gpt4 book ai didi

algorithm - 以一个角度遍历二维数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:06:46 25 4
gpt4 key购买 nike

一般我们按行或按列遍历数组,但这里我想以一个角度遍历它。我会试着解释我的意思,所以假设如果角度是 45 度,那么它会搜索为 (0,0) 然后 (0,1) (1,0) 然后 (0,2) , (1,1) ,(2 ,0) 等等.. .(抱歉无法上传图像,因为我是新用户并且不允许这样做,可以尝试想象/绘制一个数组,这将有助于获得我想说的内容)但是如果用户输入像 20 度这样的角度会发生什么,我们如何确定如何搜索数组。

我只是想知道是否有任何算法可以做类似的事情?编程语言不是问题,我想这个问题更多是算法问题。欢迎任何想法。如果我无法清楚地解释我在寻找什么,请随时询问。

谢谢大家。

最佳答案

简单。取一个角度(比如说 45)。这对应于您的情况下的矢量 v=(1, 1) 。 (这可以归一化为酉向量(sqrt(2)/2, sqrt(2)/2),但这不是必需的)

对于数组中的每个点,您都有它们的坐标 (x, y)。只需将这些坐标与向量进行标量乘积即可。让我们调用 f(x, y) = scalarProduct((x, y), v)

f(x, y) 的值进行排序,您就得到了想要的“遍历”!


一个真实的例子。你的矩阵是 3x3标量积是:

(0,0).(1,1) = 0

(0,1).(1,1) = 1

(0,2).(1,1) = 2

(1,0).(1,1) = 1

(1,1).(1,1) = 2

(1,2).(1,1) = 3

(2,0).(1,1) = 2

(2,1).(1,1) = 3

(2,2).(1,1) = 4

如果您按升序对这些标量积进行排序,您将获得顺序 (0,0)、(1,0)、(1,0)、(2,0)、(1,1)、(0, 2), (2,1)...


如果你想用角度 20 来做,用 v=(cos(20), sin(20)) 替换所有出现的 v=(1, 1)


这是一个几何解释的例子。标量积对应于向量 v(红色)与蓝线的交点。

Illustration

关于algorithm - 以一个角度遍历二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6661711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com