我开始来形容这幅画我的问题: 大厦树/图
在图片中,我们可以看到一些点(黑点)。我想要做的是首先存储所有点,然后找到节点点和提示点(红色点)。 更重要的是,我需要检查这些红点是否可以通过直线(沿着黑点)连接以找到红线之间的角度。
我不知道我是否足够清楚地解释了它,但是我认为我应该实现一棵树/图并且使用一些路径查找来检查红点是否已连接?
基本上,我开始喜欢的东西:
class Point {
public:
int x;
int y;
vector<Point> neighbors;
Point(void);
Point(int x, int y);
}
vector<Point> allPoints;
当我所有的点存放在allPoints
载体。比每个Point
,我检查他所有的邻居([x + 1,y],[x-1,y],[x + 1,y + 1],[x-1,y + 1],... )并将它们存储在邻居向量Point
中。
然后,由邻居矢量的大小,我确定该点是一个节点(3个或更多邻居),一个尖端(1邻居),或只是一些基本的点(2个邻居)。
这里来的部分,我不知道如何实现一些路径查找(检查是否有方法,例如从一个小费点到最近的节点)。另外,我不知道我的“树”表示是否好(可能不是)。所以如果有人能够帮助我实现我想要的,那就太好了。
P.S.我用C++(和OpenCV)和VS2010编写。
编辑:
这是怎么看起来像一个真正的程序(红色线是由我在油漆淹死,但这就是我想要实现):
你有标识邻近矢量一些现有的数据结构?或者你刚开始有一组x/y点?树枝是否像图像一样干净地隔离?还是会更杂乱?你可以有循环或重新连接分支(图表),或者你可以说你不会允许循环(一棵树)?看来问题需要更详细的规范。 – KobeJohn
你知道从哪里开始(树的根?) –
所以:我刚开始时只有一组x/y点。可以说,分支是干净地隔离的,我不会允许周期(这将是一棵树)。 我知道从哪里开始?那么,如果我不这样做呢?我相信(可能是错误的),哪个“小费”点将成为根本无关紧要。 – patrykos91