【发布时间】:2015-04-19 22:51:43
【问题描述】:
假设我生成了一个高度图数组,为简单起见,其中只有三个高度值:0、1 和 2。例如,它可能看起来像这样:
000000111111110000000000000000000000000000000000
001111111111111111000000000001111111111111000000
000011111111111111100000000000000011122111110000
000000000111111100000000000000000111221110000000
000000000000000000000000000001111122222111111100
000000000000000000000000111111111111111111000000
000000000000000000000111111111100000000000001111
000000000001111111111110000000000000000001111111
000000001111222222211100000000000000000000001110
000000000011112221100000000000000011111000000000
000000000000111111100000000000001111111110000000
000000001111111110000000000000000011111000000000
000000000000000000000000000000000000000000000000
我要做的是在这个高度图中找到“顶点”,并按逻辑顺序输出它们(这样我就可以画一条线到每个连续的点,最终将追踪形状的轮廓) .例如,对于右上角1s 的第一个“组”:
000000111111110000000 .1------2
001111111111111111000 8-' `--3
000011111111111111100 --> `7---. .4
000000000111111100000 6-----5'
000000000000000000000
第二张图中的数字是我需要找到的坐标(按正确的顺序),点和虚线是我从每个点开始绘制的线以获得形状的轮廓。
有什么算法可以用来找到这些顶点吗?如果没有,找到它们的最有效方法是什么?
我目前正在做的是使用递归来找到每个“岛”或“组”数字,然后将此形状的所有外部点作为顶点。但是,我的方法很慢,并且顶点的顺序不正确。
感谢您的帮助,我希望这一切都有意义。
编辑: 我从 cmets 中意识到,使用顶点会使我失去形状的某些区域。我认为我需要找到的不是顶点,而是 all 形状边缘的点,但顺序正确。所以我的例子应该是:
000000111111110000000 12345678
001111111111111111000 17 9,10
000011111111111111100 --> 16,15 11
000000000111111100000 14,13,12
000000000000000000000
很抱歉给您带来了困惑。
【问题讨论】:
-
假设高度图在数组
A中,左上角是单元格A[0][0],为什么A[1][6](第1行,第6列)不是顶点?你如何决定在哪里放置对角线?如果您要计算凸包,那么这些将是顶点,但凸包的侧面不会保留这些凹痕。 -
只有线条存在,所以更容易看到它们所描绘的形状。我试图让它看起来像从
8到1的对角线。
标签: java arrays algorithm terrain