在一个二维平面上有 N 个随机点,求画出一条不交差路径,来串联这些点

2018-09-19 10:13:22 +08:00
 3img

现在情况是,按最小距离来画,画出来后,会有线交差情况,求一个思路

3074 次点击
所在节点    程序员
17 条回复
hearfish
2018-09-19 10:32:44 +08:00
不要求最短路径的话沿着一个方向连起来就行啊
NCry
2018-09-19 10:35:27 +08:00
画圆,这是我的第一反应
Hilong
2018-09-19 10:40:45 +08:00
贪吃蛇
northernlights
2018-09-19 10:43:08 +08:00
z 形的线,极端的情况就是 N 条平行的线全部覆盖了整个面。
jieee
2018-09-19 10:48:24 +08:00
有几个最短路径算法,也可以启发式算法搜索路径
coderluan
2018-09-19 11:15:49 +08:00
只是要求不交叉吗?直接按 x 轴顺序连接就完了呗,画完了是个心电图,肯定不交叉。
zagreb
2018-09-19 11:17:46 +08:00
旅行商问题。看你描述到下一个最近的点,这是局部优化解。用遗传算法吧,我以前用过,答案是很漂亮的不交叉的圈。当然也可能掉进局部优化的坑里,结果是 8 字形。
iloahz
2018-09-19 11:25:48 +08:00
从左到右,从上到下,从外到内,从内到外都可以吧。

写了个从左到右的 demo:jsfiddle.net/437p9e8b/37/show
Xs0ul
2018-09-19 11:26:04 +08:00
挑个坐标系,按其中一个轴单调增连起来不就行了。前面说的按 x 轴,或者选个中心点极坐标绕圈。
3img
2018-09-19 11:42:10 +08:00
@iloahz 感谢 demo,起点是中心点
3img
2018-09-19 11:43:05 +08:00
@Xs0ul 绕圈也考虑过,极限情况还是会出现线段重叠的
dlsflh
2018-09-19 11:54:07 +08:00
@3img #10 中心点?火影看过没?搓一个螺旋丸不就好了。阿基米德螺旋线这种的?
LuffyGu
2018-09-19 11:57:48 +08:00
找出最左,或最右,或最上,或最下的点。然后向这个点的反方向,把点一个一个的连接起来,一条折线。
SCaffrey
2018-09-19 11:59:24 +08:00
极角排序?
Yafeng043
2018-09-19 13:02:19 +08:00
以中心点为原点左右划分为竖向两块,分别按照楼上说的心电图的走法即可。应该解决问题了吧
limitsy
2018-09-19 13:25:24 +08:00
用凸包做?绕圈。
iloahz
2018-09-19 14:08:57 +08:00
给定起点的话感觉极角排序比较靠谱,只是注意选取起始角度的问题,当所有点在一个半平面内时需要从边上开始

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/490703

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX