System.Windows.Shapes.Shape 네임 스페이스는 XAML 또는 코드에서 사용할 수있는 Polygon 개체에 대한 액세스를 제공합니다. WPF 다각형 기본 계산 : 영역 및 중심
다각형이나 중심에 대해 매우 기본적인 계산을 제공하는 Microsoft 라이브러리가 있습니까?
필자가 선호하는 기능은 직접 이러한 기능을 구현하거나 수학/지오메트리 라이브러리를 복사하지 않는 것입니다.
System.Windows.Shapes.Shape 네임 스페이스는 XAML 또는 코드에서 사용할 수있는 Polygon 개체에 대한 액세스를 제공합니다. WPF 다각형 기본 계산 : 영역 및 중심
다각형이나 중심에 대해 매우 기본적인 계산을 제공하는 Microsoft 라이브러리가 있습니까?
필자가 선호하는 기능은 직접 이러한 기능을 구현하거나 수학/지오메트리 라이브러리를 복사하지 않는 것입니다.
RenderedGeometry
속성은 Geometry
개체를 반환하며 그 개체 자체는 GetArea
메서드입니다.
중심을 계산하는 항목이 없습니다,하지만 Polygon
의 Points
속성을 기준으로 수행하는 것은 매우 쉬워야한다 :
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));
좀 LINQ-ified하게 기하학적 작업을 게시 이 게시물에 : 나는 게시
How to Zip one IEnumerable with itself
센트 로이드 계산은 @Thomas 레베 게시 것과 다르다. 나는 Wikipedia - Centroid에서 그것을 얻었다. 그의 외모는 제가 게시 한 것보다 훨씬 더 간단합니다.
여기 (은 위의 링크에서 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);
}
은 또한 당신이 유용하다는 사실을 발견 링크에서 다른 알고리즘이 있습니다.
답변 해 주셔서 감사합니다. – Zamboni
지역 및 중심을 계산하는 방법을 알려준 주셔서 감사합니다. 이것은 나를 시작하게 만든다. – Zamboni