C# 以编程方式链接所有点

C# 以编程方式链接所有点,c#,polygon,shape,C#,Polygon,Shape,重写:我在这个问题上没有得到太多的反馈,我想我没有写好,我正在试图澄清 我正在制作一个让人们创建国家的程序。下图中的粗红线是上述国家的边界。我试图找出如何生成一个多边形,它将填充“边界”线内的整个区域。我有接受多边形工作的三角剖分代码-我用手动输入的多边形测试了它-现在我试图找出如何从直线/链接点生成多边形 更多信息-所有红线是如何将黄点连接在一起的。用户将黄点拖到一起以链接线。多边形内部可能有一个孔并且是开放的-我正在尝试的是为我的三角剖分代码生成代码,该代码处理开放多边形和内部有孔的多边

重写:我在这个问题上没有得到太多的反馈,我想我没有写好,我正在试图澄清

我正在制作一个让人们创建国家的程序。下图中的粗红线是上述国家的边界。我试图找出如何生成一个多边形,它将填充“边界”线内的整个区域。我有接受多边形工作的三角剖分代码-我用手动输入的多边形测试了它-现在我试图找出如何从直线/链接点生成多边形

更多信息-所有红线是如何将黄点连接在一起的。用户将黄点拖到一起以链接线。多边形内部可能有一个孔并且是开放的-我正在尝试的是为我的三角剖分代码生成代码,该代码处理开放多边形和内部有孔的多边形,并生成所有黄点位置的输出(矢量3,x和z位于y平面上的0)

我仍在寻找解决方法,但我甚至还没有找到从哪里开始寻找解决方案的方法。谢谢你的帮助

下面的老问题

我正试图找到一种方法,将点连接在一起,形成一个内部多边形。基本上,我正在创建一个程序,让人们把线连接在一起。创建闭合多边形后,应该在直线内生成一个新的多边形对象

我不太确定该怎么做——我这样做是为了让他们可以生成线并将它们连接在一起,但我不知道如何做闭合多边形。我看了凸面外壳,但这是不一样的,并试图寻找或想出一些不同的东西,似乎不工作。我很好奇是否有人能给我指点写作方向/如何继续创作的教程或想法

我上传了两张图片来说明我的观点


以上是我试图做的,但不太确定如何做-基本上,当用户完成一个闭合多边形(所有的黄点都是多边形的外部点)时,我希望它生成一个内部多边形(由黑色的1、2和3标记)。

行进四元体的导数如何?你可以有这样的东西:

对于每三个点(按网格内部的创建顺序分组),找到多边形的中心,让用户为其指定布尔值,该值将定义此多边形是在网格内部还是外部,然后绘制它或不绘制您可能感兴趣的多边形。这可以帮助你避免大量的图论研究。与多边形类类似,可以填充多段线对象。说:

该对象与多段线对象类似,只是该对象必须是闭合形状

因为你希望你的形状是“开放的”,这可以帮助你

链接的手册页面甚至包含了如何以编程方式创建多段线的示例:

// Add the Polyline Element
myPolyline = new Polyline();
myPolyline.Stroke = System.Windows.Media.Brushes.SlateGray;
myPolyline.StrokeThickness = 2;
myPolyline.FillRule = FillRule.EvenOdd;
System.Windows.Point Point4 = new System.Windows.Point(1, 50);
System.Windows.Point Point5 = new System.Windows.Point(10, 80);
System.Windows.Point Point6 = new System.Windows.Point(20, 40);
PointCollection myPointCollection2 = new PointCollection();
myPointCollection2.Add(Point4);
myPointCollection2.Add(Point5);
myPointCollection2.Add(Point6);
myPolyline.Points = myPointCollection2;
myGrid.Children.Add(myPolyline);
你的第二个要求是,你的形状可以有“洞”

请注意,不必填充多段线。通过设置myPolyline.FillRule,可以在形状内部设置“孔”。请参阅MSDN上的页面,其中显示:

如果您对如何制作“孔”有进一步的想法,请查看方法,尤其是

一个演示GeometryCombineModes的示例

玩得开心:)


图片和代码是示例内容,由Microsoft提供,并从MSDN中提取。重复使用时,请注意通过给定链接获得的版权。关于在这里使用这些内容,我想参考。

您不能创建开放多边形。它只有在闭合时才会变成多边形。但是,这里有一种方法可以满足您的需要

通过连接所有可用直线创建闭合多边形,然后计算处于中间状态时连接起点和终点的最终直线

那么

  • 使用不同于多边形的颜色绘制(而不是填充)多边形 背景
  • 使用背景色绘制最终计算线,使其消失

  • 这种方法或修改后的版本将产生一种开放多边形的错觉。

    Commenter@SamyS.Rathore是正确的。如果您的问题是“如何在给定顶点和边的平面图中找到闭合区域(多边形)”,那么您需要研究类似的简单圆算法

    然而,在找到这些圆后,需要额外的工作来支撑孔。基本上你要做的是检测一个多边形是否在另一个多边形内,然后从几何上减去它


    简单圆不处理部分打开的区域。但在你的例子中,这不应该是个问题,因为这些区域只能存在于运动场的外部边界,用户可以轻松地随意关闭它们。

    我通过获取每个点并将其链接到一个类,该类有一个基向量3,该基向量3是点的位置,以及从该点引出的所有链接线来实现这一点。基本上

    类DoubleV3 向量3中间向量 列出LinkedVector

    我也会通过删除所有多余的行来处理那些不小心或故意多次放置相同条目的人

    然后我检查了整个过程,检查了每个doubleV3的链接向量,我从每个linkedvector到它后面最左边的向量(基本上,我检查了每个linkedvector列表的最后一个向量和下一个向量,从中间向上看一个北向量1,并取最小的角度)。这给了我一组闭合多边形(是的,我现在知道正确的术语是循环,我现在用它)。这涉及开放循环(我不想要)。它不会处理来自重叠线的复杂循环,但我用另一种方法处理

    之后,我只需删除所有重复的pol