我一直在试图做一个遍历两个指定点之间的所有数组元素的代码,但我被卡住了。 让我们假设它就像一个数组:JAVA - 返回两点之间的数组元素
int[][] new_array = new int[100][100];
,我如何获得可以在我们之间直线的所有元素的说
new_array[17][2];
和
new_array[5][90];
这是我想实现:
我一直在试图做一个遍历两个指定点之间的所有数组元素的代码,但我被卡住了。 让我们假设它就像一个数组:JAVA - 返回两点之间的数组元素
int[][] new_array = new int[100][100];
,我如何获得可以在我们之间直线的所有元素的说
new_array[17][2];
和
new_array[5][90];
这是我想实现:
让我们假设你的数组是一个笛卡尔坐标系统的first quadrant。第一列位于Y轴上,最后一行位于X轴上。
有了这个假设,您可以找到一个函数来描述阵列中任意两点之间的直线。
你需要解决的功能:
y = ax + b
这是一个标准的linear function。你有两点,解决你会发现你的方程(值为a
和b
)。
当您知道方程式时,您需要为每个x
值计算阵列中的点数。这样做,你会发现所有y
值低于/在线上。
继@Marcin Pietraszek的答案该函数可以通过这种方式来获得:
考虑到两个点(A,B)和(c,d),通过这两个点通过直线被
给出a + K * (x - a) = c AND b + K (y - b) = d
其中K
是标量数字。
这解析为:
y
=
((d - b) * x - (d - b) * a + (c - a) * b)
/
(c - a)
因此能够满足这一条件将在直线上的任何一点(x, y)
。
您将需要通过矩阵,逐个检查以查看哪些点符合条件。
如果你只想要段内的点,那么你需要检查边界。
我忘了,这是我想要做的图像 https://i.imgur.com/B27PFo3.png –
帮助我们为您提供帮助 - 请提供一些示例数据和您试图获得的结果它。 – Mureinik
目前尚不清楚如果斜率与元素不完全一致(即插值,舍入等)应该发生什么。例如,从[0] [0]到[1] [2]不一定清楚。但是,您可能想将[Bresenham Line算法](https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)作为开始,并可能根据您的需求(或[Wu的算法](https:/ /en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm),如果你打算插入/ antialias反正) – hexafraction