2012-09-17 78 views
1

我下面的一個像素線,有時會與其他線相交下一個像素,而我試圖找到一種優雅的方式留在同一行。巧妙的方法來查找行

line exampleline example2

當前像素被0(藍色)。前一個像素是-1(黑色)。

在第一圖像有兩種可能的下一個像素(綠色和紅色),但因爲它繼續行應被選擇的綠色像素(1)。

在第二個圖像中有兩個綠色像素(1),我會同樣高興 - 我不介意讓它們之間的選擇不確定,只要它不是紅色的。

在僞CPP:

vector<Point> points; 

for (i = x - 1; i < x + 2; i++) { 
    for (j = y - 1; j < y + 2; j++) { 
     if (i == x && j == y) { 
      continue; 
     } 

     if (IS_ON(i, j) && NOT_VISITED(i, j)) { 
      points.push_back(Point(i, j)); 
     } 
    } 
} 

// sort points to find closest to opposite lastX,lastY 

lastX = x; 
lastY = y; 

x = points[0].x; 
y = points[0].y; 

排序步驟是我掙扎了一下。

我想使用std ::排序的,但我有一個困難時期制定的比較功能。

將適當的比較函數是什麼樣子,或者是有沒有更好的方法?

+2

我沒有經歷過太多的都以爲這一點,但如何從過去的像素只是選擇像素最遠? – Bwmat

+0

您的問題描述不合格,或者您沒有提供所有信息。選擇右圖中的任何一個像素不再是一條線,除非您定義了一個開始/終點並使用像bresenham這樣的東西來遍歷該線。然後由於光柵化(即混疊)而發生步驟。 你的斜坡總是1嗎?如果是的話,那麼1就不在你的線上。當兩個1都在正確的圖像中失蹤時會發生什麼?紅色像素是您的「最佳選擇」?但是,你正在追隨一條曲線而不是一條線。 – pokey909

+0

@Bwmat你是對的,我通過考慮當前像素而過度複雜。距離前一個像素最遠的像素是我所需要的,謝謝! – user1671701

回答

2

如果currentP =(X,Y)是當前的點,lastP是前點,然後通過採取積

(currentP-lastP)*(P-currentP測試所有可能的點p )

,並選擇與最大點積頁。查看維基百科的dot產品。

相關問題