我開始來形容這幅畫我的問題: 大廈樹/圖
在圖片中,我們可以看到一些點(黑點)。我想要做的是首先存儲所有點,然後找到節點點和提示點(紅色點)。 更重要的是,我需要檢查這些紅點是否可以通過直線(沿着黑點)連接以找到紅線之間的角度。
我不知道我是否足夠清楚地解釋了它,但是我認爲我應該實現一棵樹/圖並且使用一些路徑查找來檢查紅點是否已連接?
基本上,我開始喜歡的東西:
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