编程语言
首页 > 编程语言> > c# – 跟踪顶点的连接并确定何时制作多边形

c# – 跟踪顶点的连接并确定何时制作多边形

作者:互联网

我正在努力研究c#中的游戏机制,它涉及连接顶点和形成多边形.

可以有任意数量的5到30个顶点.每个顶点可以用直线连接(线不能相交).当线条关闭多边形时,多边形内部将以特定颜色着色. (如果在关闭期间内部有一个点,则无法关闭多边形)

例如,下面两张图片不可能发生:

First Wrong moveSecond wrong move

但是,这可以:

Correct move

我遇到的问题是如何识别我刚关闭的多边形并记住它(如果我关闭一个与它共享边缘的多边形).我可以有多个闭合的多边形,直到可以绘制从每个顶点绘制而不破坏交叉规则的所有线.

我试图记住绘制AB,ED,CD,CA等的线条并寻找一个循环,但是当我关闭多个多边形时,我需要更多信息来知道哪个多边形已经被关闭.但我很难搞清楚如何做到这一点.

例如(下图),如果绘制了行n,我想找到刚制作的多边形.

Example of a move

有谁知道我怎么做到这一点?
任何想法,帮助,见解都会有所帮助.

解决方法:

可能有点简单,但您可以存储字典< Face,List< Vertex>>你可以用linq查询.

您可以通过添加反向查找来简化它.字典< Vertex,List< Faces>>

场景1:路径触及属于同一面的边缘

要测试新路径DC,您将获得2个顶点,D和C,并找到包含两个顶点的任何面.从List< Vertex>中的D开始并创建C的路径

现在用C – >做同样的事情. D.

你现在有2条路径,D – > E – > C和C – > A – > B – > D都使用D – >形成有效面部. C所以现在你必须枚举所有顶点并消除任何包含现有顶点的面.

场景2:路径接触不属于任何面部的边缘

这条路是开放的.

场景3:路径触及eges,它们是不同面孔的一部分

Face1:ABDEC
Face2:AGF

测试路径FC. F是Face2 C的一部分,是Face1的一部分.

查找交叉点:Face1.Face2 == A它是两个列表中的唯一点,这次您获得2组2条路径.

F A
 FGA

AC
 ABDEC

从F到A,这些路径成倍增加

FAC
FGAC
FABDEC
FGABDEC

现在可以测试这些面部的有效性.

对于这种更复杂的场景(3个面部接触,面部共享边缘)来说,可能更容易保持所有连接边的图形,这将为您提供一种更简单的方法来检测2个顶点之间的可能路径.

请注意,包含3个顶点的任何路径都会形成一个可能的面,可以检查其有效性

标签:c,algorithm,geometry,polygon,graph-theory
来源: https://codeday.me/bug/20190701/1349394.html