c# – 跟踪顶点的连接并确定何时制作多边形
作者:互联网
我正在努力研究c#中的游戏机制,它涉及连接顶点和形成多边形.
可以有任意数量的5到30个顶点.每个顶点可以用直线连接(线不能相交).当线条关闭多边形时,多边形内部将以特定颜色着色. (如果在关闭期间内部有一个点,则无法关闭多边形)
例如,下面两张图片不可能发生:
但是,这可以:
我遇到的问题是如何识别我刚关闭的多边形并记住它(如果我关闭一个与它共享边缘的多边形).我可以有多个闭合的多边形,直到可以绘制从每个顶点绘制而不破坏交叉规则的所有线.
我试图记住绘制AB,ED,CD,CA等的线条并寻找一个循环,但是当我关闭多个多边形时,我需要更多信息来知道哪个多边形已经被关闭.但我很难搞清楚如何做到这一点.
例如(下图),如果绘制了行n,我想找到刚制作的多边形.
有谁知道我怎么做到这一点?
任何想法,帮助,见解都会有所帮助.
解决方法:
可能有点简单,但您可以存储字典< 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