ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-01 17:54:07  阅读:249  来源: 互联网

标签:c algorithm geometry polygon graph-theory


我正在努力研究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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有