一堆坐标,求连成无交叉封闭的曲线算法。
如题,很多点的坐标,没有顺序,
求算法,把这些点排序后,就可连接成一条 无交叉封闭的曲线 --------------------编程问答-------------------- 是生成多边形把. --------------------编程问答-------------------- 这个是楼主需要的吗??
http://www.codeproject.com/KB/cs/SplineInterpolation.aspx --------------------编程问答-------------------- 是多边形,也可以是不规则多边形,只要不交叉,一个点连接一个点就行。 --------------------编程问答-------------------- 判断一下,交叉就是有相同坐标出现,重新生成一下坐标不就行了吗 --------------------编程问答--------------------
那你的需求更简单了....点与点之间是有序的, 根据这个序列, 再在两点之间画线, 不就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#