繁体   English   中英

如何在凸壳点之间绘制线

[英]How to Draw Lines Between Convex Hull Points

假设我已通过quickhull算法正确计算了凸包点,那么我想在带有线的面板上显示凸包。 但是,我当前的嵌套for循环显示一条通过计算出的每个点的直线。 有没有办法只在外部点之间画线? 我的for嵌套循环错误地显示了如下行:

在此处输入图片说明

我只想在外部显示线条(如围栏)。 我该怎么做呢?

private void panel1_Paint(object sender, PaintEventArgs e)
{
    if (pointsClicked.Count() == 0)
    {

    }
    else
    {
        base.OnPaint(e);
        using (Graphics g = e.Graphics)
        {
            var p = new Pen(Color.Black, 3);


            // draw a line for each point created
            for (int i = 0; i < convexHullPoints.Count() - 1; i++)
            {
                for (int j = 0; j < convexHullPoints.Count(); j++)
                {
                    g.DrawLine(p, convexHullPoints[i], convexHullPoints[j]);
                }
            }
        }
    }
}

将两个嵌套的for循环替换for一个在凸包多边形的所有边缘上进行迭代的循环:

int n = convexHullPoints.Count();

// Draw the edges [P_{n-1},P_0], [P_0,P_1], ..., [P_{n-2},P_{n-1}]
for (int i = n - 1, j = 0; j < n; i = j++)
{
    g.DrawLine(p, convexHullPoints[i], convexHullPoints[j]);
}

注意:我在这里假设, convexHullPoints组中的点是沿着凸凹convexHullPoints排列的,可能并非如此。 如果不是,则存在对它们进行重新排序的方法(例如,计算点​​的重心并按与重心成直角的方式对点进行排序)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM