System.Windows.Shapes.Shape命名空间提供对可在XAML或代码中使用的 Polygon 对象的访问。
是否有一个Microsoft库在多边形区域或中心区域提供一些非常基本的计算?
我的偏好是不要自己重新实现这些功能或复制数学/几何库。
答案 0 :(得分:9)
答案 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);
}
在该链接上还有一些您可能会觉得有用的其他算法。