【发布时间】:2015-08-07 19:10:02
【问题描述】:
在 C# 中为 Pixelsense 实现 WPF 应用程序。
我很难找到在屏幕上放置多边形以检测多边形重叠的特定点(这是下一阶段)。总的来说,我的应用程序中可以有 7 个多边形,下面是我尝试获取它们的点的代码。
我认为代码理想的做法是启动一个循环,创建一个多边形(形状 1),然后启动第二个循环,创建另一个多边形(形状 2)并获取两个形状点并检查重叠。然后第二个循环将继续检查另一个形状(形状 3)是否与形状 1 重叠,方法是获取其点等等......所以第一个多边形将与其他 6 个多边形检查重叠,因此是嵌套循环。
但是,当前发生的情况是该方法为第一个多边形选取的任何点,它们也会被复制到第二个多边形。因此,它为两个单独的多边形打印出一组重复点并永远循环。
我已经被困了一段时间了,请帮助我:)
public void DefiningPolygonArea()
{
foreach (var polygonsCollection1 in this.PlayingCanvas.Children)
{
Polygon polygon1 = polygonsCollection1 as Polygon;
if (polygon1 != null)
{
foreach (var polygonsCollection2 in this.PlayingCanvas.Children)
{
Polygon polygon2 = polygonsCollection2 as Polygon;
if (polygon1 != polygon2 && polygon2 != null)
{
HelperMethods.PointCollectionsOverlap_Fast(getPoints(polygon1), getPoints(polygon2));
}
}
}
}
}
private List<Point> getPoints(Polygon poly)
{
if (poly.Points.Count == 4)
{
var transform = poly.TransformToVisual(this.PlayingCanvas);
Point point1 = transform.Transform(poly.Points[0]);
Point point2 = transform.Transform(poly.Points[1]);
Point point3 = transform.Transform(poly.Points[2]);
Point point4 = transform.Transform(poly.Points[3]);
area1.Add(point1);
area1.Add(point2);
area1.Add(point3);
area1.Add(point4);
Console.WriteLine("polygon with 4 points consists of: " + area1[0] + " , " + area1[1] + " , " + area1[2] + " , " + area1[3]);
}
else if (poly.Points.Count == 3)
{
var transform = poly.TransformToVisual(this.PlayingCanvas);
Point point1 = transform.Transform(poly.Points[0]);
Point point2 = transform.Transform(poly.Points[1]);
Point point3 = transform.Transform(poly.Points[2]);
area1.Add(point1);
area1.Add(point2);
area1.Add(point3);
Console.WriteLine("polygon with 3 points consists of: " + area1[0] + " , " + area1[1] + " , " + area1[2]);
}
return area1;
}
输出:
多边形与4分组成:713.345368087522,713.83644226973,550.13652222242424242424.044482999935686,463.0633.067512500125007796,641257796,64125796,6441.64178882788882788888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888882转
三点多边形包括: 713.345368087522,713.83644226973 , 550.136522242161,724.044829935686 , 463.067512500796,641.78273862321
【问题讨论】:
-
你的循环是错误的。您在第一个循环中要求孩子并获得第一个项目。然后你在第二个循环中再次要求相同的结果。当然它会呈现你所拥有的:)我可以尝试给你一个可能的解决方案,但如果你真的给了我们一个可重现的最小样本。 (也许在 github 上转储一个有问题的示例项目并将其链接到此处,以便我们为您提供适当的修复)
标签: c#