2017-12-02 36 views
-2

我一直在试图做一个遍历两个指定点之间的所有数组元素的代码,但我被卡住了。 让我们假设它就像一个数组:JAVA - 返回两点之间的数组元素

int[][] new_array = new int[100][100]; 

,我如何获得可以在我们之间直线的所有元素的说

new_array[17][2]; 

new_array[5][90]; 

这是我想实现:

enter image description here

+0

我忘了,这是我想要做的图像 https://i.imgur.com/B27PFo3.png –

+0

帮助我们为您提供帮助 - 请提供一些示例数据和您试图获得的结果它。 – Mureinik

+1

目前尚不清楚如果斜率与元素不完全一致(即插值,舍入等)应该发生什么。例如,从[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

回答

0

让我们假设你的数组是一个笛卡尔坐标系统的first quadrant。第一列位于Y轴上,最后一行位于X轴上。

有了这个假设,您可以找到一个函数来描述阵列中任意两点之间的直线。

你需要解决的功能:

y = ax + b 

这是一个标准的linear function。你有两点,解决你会发现你的方程(值为ab)。

当您知道方程式时,您需要为每个x值计算阵列中的点数。这样做,你会发现所有y值低于/在线上。

0

继@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)

您将需要通过矩阵,逐个检查以查看哪些点符合条件。

如果你只想要段内的点,那么你需要检查边界。