【问题标题】:get center polygon C# [duplicate]获取中心多边形C# [重复]
【发布时间】:2014-01-10 01:50:45
【问题描述】:

我可以使用什么算法来获取多边形的中心(红点)
案例 1:我尝试使用 maxX、maxY、minX、minY,但我得到了错误的点(黑点)
案例 2:我尝试获取第二个最大和最小坐标 X 和 Y,但我遇到点小于 5 的多边形的问题
案例 3:我添加了if point count < 5 then use case 1 else use case 2,但我遇到了一些多边形的错误

你能告诉我适合我的算法吗??

注意:

第四张图片说明

//ma mean max, mi mean min, X1 mean first, X2 mean second
maX1 = maX2 = maY1 = maY2 = 0;
miX1 = miX2 = miY1 = miY2 = 2000;
//aCoor is array of coordinate, format = {x1,y1,x2,y2,x3,y3,x4,y4,...}
for(int i=0; i<aCoor.count(); i+=2)
{
     //point is list of point
     point.Add(aCoor[i],aCoor[i + 1]);
     //this to get second max X
     if(maX2 < aCoor[i])
     {
         maX2 = aCoor[i];
     //this to get first max x
     if(maX1 < maX2) {maX1 += maX2; maX2 = maX1 - maX2; maX1 -= maX2;}
     }

     //this to get second min X
     if(miX2 > aCoor[i])
     {
         miX2 = aCoor[i];
     //this to get first min x
     if(miX1 > miX2) {miX1 += miX2; miX2 = miX1 - miX2; miX1 -= miX2;}
     }

     //this to get second max Y
     if(maY2 < aCoor[i + 1])
     {
         maY2 = aCoor[i + 1];
     //this to get first max x
     if(maY1 < maY2) {maY1 += maY2; maY2 = maY1 - maY2; maY1 -= maY2;}
     }

     //this to get second min Y
     if(miY2 > aCoor[i + 1])
     {
         miY2 = aCoor[i + 1];
     //this to get first min x
     if(miY1 > miY2) {miY1 += miY2; miY2 = miY1 - miY2; miY1 -= miY2;}
     }
}

if(point.Count < 5)
{
    Xcenter = (maX1 + miX1) / 2;
    Ycenter = (maY1 + miY1) / 2;
}
else
{
    Xcenter = (maX2 + miX2) / 2;
    Ycenter = (maY2 + miY2) / 2;
}

我能做到多远

【问题讨论】:

  • 第四个不是一个多边形,它们是两个

标签: c# polygon point


【解决方案1】:

您要查找的不是多边形的几何中心(或centroid),而是位于多边形内部的多边形对称轴部分的中心。让我编辑你的一个例子来演示:

Edited example

你明白我的意思吗?

我选择这个例子是因为它证明了你思维中的另一个缺陷;这是两个多边形,每个多边形都会产生一个符合您正在寻找的资格的点。在您的示例中,您只是任意选择其中之一作为您想要的点。 (我看过你编辑的第四个例子;它仍然有两个内部,并没有改变我的观点。)

无论如何,您要寻找的实际上是两个问题的解决方案:首先,如何找到多边形的对称轴;其次,在同样位于多边形内部的对称轴上找到一条线段。之后,找到该段的中心是微不足道的。

我不能再发布任何链接了,但是卡内基梅隆大学的 P. Highnam 发表了一篇题为 Optimal Algorithms for Finding the Symmetries of a Planar Point Set 的论文,它可以帮助解决第一个问题,它有点涉及所以我不会在这里解释它。第二个问题归结为测试每个线段,看它是否包含与穿过图形质心的对称轴的线的交点。假设你的多边形只有一个内部(阅读:不像你的第四个例子),你应该得到两个点。平均它们,你就有了你的中心。

【讨论】:

    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 2013-11-29
    • 2014-10-06
    • 2017-05-12
    • 2021-08-06
    • 2017-02-26
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多