首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C#寻找极值点-凸包

使用C#寻找极值点-凸包
EN

Stack Overflow用户
提问于 2020-03-06 04:16:11
回答 1查看 469关注 0票数 2

我希望找到极值点,输出必须类似于this,但我的代码给了我this output

所以,我想改变它来给我正确的输出,我该怎么做呢?非常感谢!

代码语言:javascript
复制
 public override void Run(List<Point> points, List<Line> lines, List<Polygon> polygons, ref List<Point> outPoints, ref List<Line> outLines, ref List<Polygon> outPolygons)
        {
            List<Point> opoints = new List<Point>();
            HelperMethods helper = new HelperMethods();

            for (int i = 0; i < points.Count; i++)
            {
                for (int j = 0; j < points.Count; j++)
                {
                    for (int k = 0; k < points.Count; k++)
                    {
                        if (points[i] != points[j] && points[j] != points[k] && points[i] != points[k])
                        {
                            for (int p = 0; p < points.Count; p++)
                            {
                                if (i != p && j != p && k != p)
                                {
                                    if (HelperMethods.PointInTriangle(points[p], points[i], points[j], points[k]) == Enums.PointInPolygon.Inside)
                                    {
                                        opoints.Add(points[p]);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            outPoints = opoints;
        }
EN

回答 1

Stack Overflow用户

发布于 2020-03-06 20:24:17

如果任何人有同样的问题,我解决了我的问题,并将分享解决方案来帮助其他人。

opoints列表中,凸包内有所有点:

但是我们的工作是找到凸包的外部点:

因此,我们可以通过循环遍历所有点来实现这一点,并且只显示opoints列表中不存在的点。

代码如下:

代码语言:javascript
复制
for (int m = 0; m < points.Count; m++)
{
   if (!opoints.Contains(points[m]))
       outPoints.Add(points[m]);
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60553303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档