Redian新闻
>
问个小问题啊,有思路就可以
avatar
问个小问题啊,有思路就可以# CS - 计算机科学
r*o
1
有若干个点,坐标知道。怎么才能给他们排序,使得:如果一条线从第一个点连到最后一
个点再到第一个点,能组成一个封闭的形状。有时候可能有不同的连法,随便怎么都可以
,但是连线不能交叉。然后给这个封闭的形状填充颜色。
其实我很菜,是想用vb for excel来做这个问题。不知道可能吗?
avatar
j*h
2
1.选取屏幕最左边(x坐标最小)的点作为起点。
2.连接该起点与其余所有点的射线,计算所有的射线的幅角,并将这些俯角排序。
3.按排好的顺序,依次连接各点。就构成了你想要的多边形。

【在 r*******o 的大作中提到】
: 有若干个点,坐标知道。怎么才能给他们排序,使得:如果一条线从第一个点连到最后一
: 个点再到第一个点,能组成一个封闭的形状。有时候可能有不同的连法,随便怎么都可以
: ,但是连线不能交叉。然后给这个封闭的形状填充颜色。
: 其实我很菜,是想用vb for excel来做这个问题。不知道可能吗?

avatar
A*l
3
我的思路是:
0.initialize two array: beginning array and destination array.
1. 按X坐标大小给所有点编号( 1 has the smallest X value)
2. 连接1,2这样经过1,2的直线把平面分为两个部分。如果所有的点都在期中一个部分
,go on (将1,2放入目标数组中,并且从初始数组中删除). else, 连接1,3; 1,4 until条
件满足为止。
3.假设上面的算法连接的是点1,2,继续连接点2,3(就是现有的未连接的点中序号最小
的那一个,或者说初始数组中第一个元素) 如果所有的点都在直线2,3的一面,go on,否
则try 2,4..2,5
4.继续,知道所有的点都被连上(初始数组为空)。最后一个点连回点1。

后一
可以

【在 j*****h 的大作中提到】
: 1.选取屏幕最左边(x坐标最小)的点作为起点。
: 2.连接该起点与其余所有点的射线,计算所有的射线的幅角,并将这些俯角排序。
: 3.按排好的顺序,依次连接各点。就构成了你想要的多边形。

avatar
r*c
4
hoho

后一
可以

【在 j*****h 的大作中提到】
: 1.选取屏幕最左边(x坐标最小)的点作为起点。
: 2.连接该起点与其余所有点的射线,计算所有的射线的幅角,并将这些俯角排序。
: 3.按排好的顺序,依次连接各点。就构成了你想要的多边形。

avatar
y*I
5
sweep: nlog(n)

【在 r*******o 的大作中提到】
: 有若干个点,坐标知道。怎么才能给他们排序,使得:如果一条线从第一个点连到最后一
: 个点再到第一个点,能组成一个封闭的形状。有时候可能有不同的连法,随便怎么都可以
: ,但是连线不能交叉。然后给这个封闭的形状填充颜色。
: 其实我很菜,是想用vb for excel来做这个问题。不知道可能吗?

avatar
r*o
6
牛!谢谢!
不知道有没有高人知道在excel vb里面怎么给这个形状填充颜色?

后一
可以

【在 j*****h 的大作中提到】
: 1.选取屏幕最左边(x坐标最小)的点作为起点。
: 2.连接该起点与其余所有点的射线,计算所有的射线的幅角,并将这些俯角排序。
: 3.按排好的顺序,依次连接各点。就构成了你想要的多边形。

avatar
r*o
7
什么意思啊?blush

后一
可以

【在 y****I 的大作中提到】
: sweep: nlog(n)
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。