首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF多边形的基本计算:面积和质心

WPF多边形的基本计算:面积和质心
EN

Stack Overflow用户
提问于 2010-12-12 18:57:21
回答 2查看 3.5K关注 0票数 5

System.Windows.Shapes.Shape命名空间提供对多边形对象的访问,该对象可以在XAML或代码中使用。

是否有一个微软库提供一些非常基本的计算多边形类区域或向心力?

我倾向于不自己重新实现这些函数,也不复制数学/几何库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-12 19:56:03

RenderedGeometry属性返回一个Geometry对象,该对象本身有一个GetArea方法。

似乎没有任何东西可以计算质心,但是基于PointsPolygon属性,这应该是非常容易的。

代码语言:javascript
复制
Point centroid =
    polygon.Points.Aggregate(
        new { xSum = 0.0, ySum = 0.0, n = 0 },
        (acc, p) => new
        {
            xSum = acc.xSum + p.X,
            ySum = acc.ySum + p.Y,
            n = acc.n + 1
        },
        acc => new Point(acc.xSum / acc.n, acc.ySum / acc.n));
票数 9
EN

Stack Overflow用户

发布于 2010-12-12 20:09:58

我在这篇文章中发布了一些linq化的几何操作:

如何用自身来压缩一个IEnumerable

我发布的质心计算与@Thomas发布的计算不同。我从Wikipedia -质心那里得到的。他看起来比我发的那个要简单得多。

下面是我的算法(它利用了上面链接中的SignedArea和配对):

代码语言:javascript
复制
  public static Position Centroid(IEnumerable<Position> pts) 
  { 
    double a = SignedArea(pts); 

    var  c = pts.Pairwise((p1, p2) => new  
                                      {  
                                        x = (p1.X + p2.X) * (p1.X * p2.Y - p2.X * p1.Y),  
                                        y = (p1.Y + p2.Y) * (p1.X * p2.Y - p2.X * p1.Y)    
                                      }) 
                .Aggregate((t1, t2) => new  
                                       {  
                                         x = t1.x + t2.x,  
                                         y = t1.y + t2.y  
                                       }); 

    return new Position(1.0 / (a * 6.0) * c.x, 1.0 / (a * 6.0) * c.y); 
  } 

在该链接中还有其他一些算法,您可能会发现这些算法很有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4423377

复制
相关文章

相似问题

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