基于点的形状绘制,确保线不交叉

时间:2011-11-27 18:06:41

标签: algorithm graphics

说,我有100分,想要绘制一个封闭曲线(我正在使用C#和图形),如下所示:

Graphics g = this.CreateGraphics();
        Pen pen = new Pen(Color.Black, 2);
        Point[] points = new Point[DrawingPoints];
        for (int x = 0; x < DrawingPoints; x++)
        {
            int px = r.Next(0, MaxXSize);
            int py = r.Next(0, MaxYSize);
            Point p = new Point(px, py);
            points[x] = p;
        }
        g.DrawClosedCurve(pen, points);

它们是连接点,因为它们进入点[]和线交叉 - 你不会得到一个坚实的数字。

是否有一种算法可以帮助我折腾积分以获得稳定的数字?下面是一张图片(尽可能地努力),以帮助想象我所要求的内容。

enter image description here

1 个答案:

答案 0 :(得分:0)

那么,在O(n log n)时间内,您可以计算点的质心,并按照该质心的角度对它们进行排序,留下一个星形多边形。这很有效,但可能会过分夸大你的观点。

我认为你对TSP的2-OPT方法的结果感到高兴(描述here)。 2-OPT是最坏情况的指数但实际上是多项式时间。