Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过开放空间检查两个实体的连通性_C++_Algorithm_Box2d_Sfml_Path Finding - Fatal编程技术网

C++ 通过开放空间检查两个实体的连通性

C++ 通过开放空间检查两个实体的连通性,c++,algorithm,box2d,sfml,path-finding,C++,Algorithm,Box2d,Sfml,Path Finding,标题有点模糊,但我会在这里更好地解释 设置 我正在尝试编写一个小的水位模拟器,很像游戏中的水位,LIMBO。当开了一个口,允许水在两个水体之间流动时,水位平衡。我现在的设置是两个容器,里面的蓝色块表示水位。我的鼠标会将大块地形移走,因此,当在主体之间打开时,它们应该进行调整,并且它们的Y值应该移动以匹配 图像示例: 半充式储罐: 均衡油箱: 现在,我知道可以做一些数学计算,来计算出需要调整多少液位和不同大小储罐之间的比例。我认为那部分很直截了当。但是我想不出一个好方法来确定这两个水体是否以及

标题有点模糊,但我会在这里更好地解释

设置 我正在尝试编写一个小的水位模拟器,很像游戏中的水位,LIMBO。当开了一个口,允许水在两个水体之间流动时,水位平衡。我现在的设置是两个容器,里面的蓝色块表示水位。我的鼠标会将大块地形移走,因此,当在主体之间打开时,它们应该进行调整,并且它们的Y值应该移动以匹配

图像示例: 半充式储罐:

均衡油箱:

现在,我知道可以做一些数学计算,来计算出需要调整多少液位和不同大小储罐之间的比例。我认为那部分很直截了当。但是我想不出一个好方法来确定这两个水体是否以及何时连接

任何算法、伪代码或参考都将不胜感激

如果您需要更多的澄清,请随时询问。我期待所有的反馈,并将编辑我的文章,以作具体澄清

谢谢

~natebot13


<强> BTW: 我使用C++、SFML和BOX2D(BOX2D是用于其他一些与物理有关的事情,我不需要这个例子)。

< P>我想你可以从左到右开始,例如: 左油箱位置的右侧已知。 在右边的列中搜索蓝色正方形。 一旦找到,搜索其周围的广场-向上,向下和向右。
继续搜索,直到找到右油箱的已知左侧

您需要检查容器1的边缘是否在任何时间点连接到容器2,如果是,则调整水位。我猜您正在处理图像,因此可以使用该算法检查container1的任何边缘像素是否连接到container2的任何边缘像素,并获取它们的位置

算法:-

  • 将container1的边放在一个集合中,该集合连接到虚拟父对象1
  • 将container2的边放在另一个集合中,该集合连接到另一个伪parent2
  • 比如说,每隔一秒钟,使用连接的组件将新添加的像素添加到集合中
  • 在每个并集的末尾检查伪parent1和parent2是否连接
  • 可以使用DFS从一个边集1开始并到达另一个边集,检查精确的连接点。最后一个像素和 边集合1中的前一个第一个像素是连接端点
  • 注意:-


    在C++ Boost LIB中有一个不相交集的实现,这可能在实现连接组件时有用。当他们相互联系时,不要把它当回事。“这就是你要问的吗?”Chieftwo Pencils不完全是我的意思。我的意思是,两个坦克将坐在那里,当我在地形上拖动鼠标时,黑色部分被移除,我需要一个算法来计算两个坦克是否已经连接,如果已经连接,砰的一声,通过升高和降低水位开始“水流”。也可能有多个坦克遍布整个地方,我想确定哪两个已经连接一旦地形被删除。希望这是有道理的。。。(这在我的头脑中是有道理的):如果不知道这些区域在代码中是如何定义的,很难提供任何想法。由于问题是用Box2D标记的,我首先假设区域是用链状形状定义的,这通常是破坏性地形的方式。但是其他人似乎认为你正在处理某种类型的网格,而图表也没有给出太多提示。@iforce2d是的,很抱歉不清楚。(我需要在这方面做得更好)现在我对链式破坏地形感兴趣。。。无论如何,我意识到了我的例子的问题,但是,我认为Vikram的答案应该很适合,如果我能让它适合的话。如果没有,我将发布一个后续问题,并提供更好的示例和解释。谢谢(顺便说一句,iforce,你的声誉比你高。感谢你的Box2D教程!它们是一个很大的帮助!)我不是在处理图像,但“连接组件”参考似乎与我要查找的内容非常接近。我有一些类似于图像(网格中有块)的东西,因此该方法可能会奏效。我会仔细阅读,看看是否能理解。谢谢你的回答@natebot13像素数据的网格与图像相似,因此只要网格中像素的邻域与其显示的内容相似,它就可以工作。