当前位置:编程学习 > C#/ASP.NET >>

一堆坐标,求连成无交叉封闭的曲线算法。


如题,很多点的坐标,没有顺序,

求算法,把这些点排序后,就可连接成一条  无交叉封闭的曲线 --------------------编程问答-------------------- 是生成多边形把. --------------------编程问答-------------------- 这个是楼主需要的吗??

http://www.codeproject.com/KB/cs/SplineInterpolation.aspx --------------------编程问答-------------------- 是多边形,也可以是不规则多边形,只要不交叉,一个点连接一个点就行。 --------------------编程问答-------------------- 判断一下,交叉就是有相同坐标出现,重新生成一下坐标不就行了吗 --------------------编程问答--------------------
引用 3 楼 ws9288 的回复:
是多边形,也可以是不规则多边形,只要不交叉,一个点连接一个点就行。


那你的需求更简单了....点与点之间是有序的, 根据这个序列, 再在两点之间画线, 不就Ok了? 


List<Point> lstPoint = new List();

for(int i =0; i< lstPoint.Length; i++)
{
   DrawLine(new Pen(...), lstPoint[i], lstPoint[i+1]);
}
--------------------编程问答-------------------- 坐标是固定的,要的效果就是例如

入口 :point[x1,y1],point[x2,y2],point[x3,y3]......

经过算法后

出口:point[x3,y3],point[x2,y2],point[x1,y1]......(有顺序的)

只要把出口所有的点连接起来,就是能画出一个封闭曲线,不交叉。
求算法。

--------------------编程问答--------------------
要得就是其中的排序算法,如何排序呢?
--------------------编程问答-------------------- 忘说了最关键一句,所连曲线距离最短 --------------------编程问答-------------------- 这个规格应该需要你自己定义吧, 一般比较简单的图形通常像这样:

起始点: X=最小, Y=最大,   结束点: X=最小-1, Y=最小 --------------------编程问答-------------------- 起始点可以随便在这一堆点里面找,

只要能用算法排序,找其中算法。 --------------------编程问答-------------------- 设一个坐标为
class node
{
double x;
double y;
}

list<node> nodes = new list<node>;
变换坐标,将第一个点设为0,0(原点)。其它各点类推(如第一个点为 2,3,则各点均x=x-2,y=y-3)

nodes.sort(nodessort);

此时按nodes中排好序的次序连线,最后连回原点,再次变换坐标回原坐标(x=x+2,y=y+3)

其中nodessort为委托比较方法,比较的是当前点和x轴正向的夹角。如夹角相等则比较,当前点和原点之间的距离。

嗯,非常简单的解决方法。






--------------------编程问答-------------------- 拷没看到楼主又补了一句,那我想不到了。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,