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

时间:2010-12-12 18:57:21

标签: c# wpf geometry polygon

System.Windows.Shapes.Shape命名空间提供对可在XAML或代码中使用的 Polygon 对象的访问。     

是否有一个Microsoft库在多边形区域或中心区域提供一些非常基本的计算?

我的偏好是不要自己重新实现这些功能或复制数学/几何库。

2 个答案:

答案 0 :(得分:9)

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

似乎没有什么可以计算质心,但根据Points的{​​{1}}属性,它应该很容易做到:

Polygon

答案 1 :(得分:2)

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

How to Zip one IEnumerable with itself

我发布的质心计算与@Thomas Levesque发布的计算不同。我是从Wikipedia - Centroid得到的。他的外表比我发布的内容简单得多。

这是我的算法(它使用上面链接中的SignedArea和Pairwise):

  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); 
  } 

在该链接上还有一些您可能会觉得有用的其他算法。