[英]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.