System.Windows.Shapes.Shape命名空间提供对多边形对象的访问,该对象可以在XAML或代码中使用。
是否有一个微软库提供一些非常基本的计算多边形类区域或向心力?
我倾向于不自己重新实现这些函数,也不复制数学/几何库。
发布于 2010-12-12 19:56:03
RenderedGeometry属性返回一个Geometry对象,该对象本身有一个GetArea方法。
似乎没有任何东西可以计算质心,但是基于Points的Polygon属性,这应该是非常容易的。
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));发布于 2010-12-12 20:09:58
我在这篇文章中发布了一些linq化的几何操作:
我发布的质心计算与@Thomas发布的计算不同。我从Wikipedia -质心那里得到的。他看起来比我发的那个要简单得多。
下面是我的算法(它利用了上面链接中的SignedArea和配对):
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);
} 在该链接中还有其他一些算法,您可能会发现这些算法很有用。
https://stackoverflow.com/questions/4423377
复制相似问题