演示:https://codesandbox.io/s/new-bird-rx8zxd
我有一个坐标对象数组,我需要实现一种排序机制,将它们按顺时针或逆时针方向排列。起点可以是任意的。在此示例中,图块大小为 54。相邻顶点具有相同的坐标。
这个数组:
[
{ x: 0, y: 108 },
{ x: 0, y: 54 },
{ x: 108, y: 108 },
{ x: 54, y: 54 },
{ x: 108, y: 0 },
{ x: 54, y: 0 }
]
应该分类为:
[
{ x: 54, y: 0 },
{ x: 108, y: 0 },
{ x: 108, y: 108 },
{ x: 0, y: 108 },
{ x: 0, y: 54 },
{ x: 54, y: 54 }
]
示例1:
示例2:
这个解决方案到按顺时针顺序排序点对我没有帮助。
特别是,它不适用于我描述的示例。
不要将其视为“排序”问题,而是将其视为“寻找邻居”问题;我们想要找到列表中每个点旁边的点。
一些观察:
因此,我们可以按如下方式对列表进行“排序”:
sortedByXThenY
,其中包含按 x 坐标排序的点,并回退到按 y 坐标排序。那么sortedByXThenY[0]
和sortedByXThenY[1]
是邻居,sortedByXThenY[2]
和sortedByXThenY[3]
是邻居,等等