2014-02-16 72 views
1

我有一個具有這些顏色的立方體矩陣:紅色,綠色,黃色。如何在C++中保存座標

一些彼此相鄰的立方體與其他顏色相同的立方體接觸。例如:

1 2 3 4 5 
1 r r g y r 
2 g y g g g 
3 g y r g r 
4 g g r g g 

我要統計有多少立方體用相同的顏色接近對方(在這個例子中有7個G(綠色)的立方體它們相互靠近這部分我已經完成。

bool Move(Cubes & Test, Cubes & Kub, int i, int j, int p, string color, int & count){ 
    int tt = 0; 
    bool yra = false; 
    if(Test.Get(i, j).GetCube(p) == Color){ 
     Test.SetSP(i, j, p, "-"); 
     count++; 
     while(!yra && tt < 4){ 
      i = i + Test.GetEil(tt); 
      j = j + Test.GetStu(tt++); 
      if(Test.Get(i, j).GetCube(p) == color){ 
       Move(Test, Kub, i, j, p, color, count); 
      } 
     } 
    } 
    return yra; 
} 

void Max(int & count, int & max, string & s, string Spal[], int sp, Maximum Maxi[], int & ind, int i, int j){ 
    if(count!=0){ 
     Maxi[ind].Set(count, Spal[sp]); 
     ind++; 
    } 
    if(max < count){ 
     max = count; 
     count = 0; 
     s = Spal[sp]; 
    } 
    else 
     count = 0; 
} 

現在不知何故,我要救我的綠色座標它們相互靠近。

我應該怎麼做才能實現這一目標?

+0

能否請您闡述一下您的意思是「拯救」是什麼?保存到文件? –

+4

我試圖糾正英語,但我不想改變他的意思,所以我留下了我不確定的部分。我做了我最好的;-)(但閱讀'algorythm'是由眼睛流血) – zmo

+0

zmo對不起再次:/ 若要Joachim我需要保存在陣列中的座標 – user2865835

回答

1

從你的追求離子,我想你試圖確定最接近的正方形而不是立方體 - 因爲你使用兩個變量來跟蹤ij。此外,由於某些細節丟失,我無法準確評論您的代碼。

所以,既然你問到如何確定最近「魔方」(原文如此) - 即平方 - 這是一種叫做Nearest Neighbor Search - 這也被稱爲郵局問題 - 它的難度隨着維度增加。

儘管如此,檢查您的電網,使我們僅限於2D的假設:

random grid of colored red, green and yellow squares

我們馬上就觀察到我們可以使用常規的歐幾里德技術來找到最接近方形相對於一個:

Euclidean nearest distance formula

因此,如果我們知道每平方米的座標,我們就可以從有問題的電流平方計算出到每個的距離。

最近上的黃色正方形(行1,列4)(假設尺寸的兩個對於每個側)的鄰居:

該樣品網格具有另外兩個黃色正方形square1(2, 2)square2(3, 2)

如果我們假設這個網格是笛卡爾座標,綠色方塊(第4行,第1列)的左下角以座標(1.0,1.0)爲中心(記得我們說邊長爲2)。然後,中心座標:

yellow: (7.0, 7.0) 
square1: (3.0, 5.0) 
square2: (3.0, 3.0) 

在這一點上,你必須確定要如何計算最近的廣場:沿邊,或從中心到中心?

中心到中心是最簡單的是,使用黃色正方形在(第1行,第4欄),相對於它的其它方(使用給出的公式)的距離是:

yellow -> square1: sqrt(4^2 + 2^2) = sqrt(20) = 4.4721... 
yellow -> square2: sqrt(4^2 + 4^2) = 4*sqrt(2) = 5.6569... 

從這些,我們可以清楚地看到square1更接近黃色方塊(第1行,第4列)。

  1. 因此,計算這些座標的一種方法是輪詢不同顏色的所有方塊的網格,確定它們各自的座標。

  2. 然後,遍歷這些座標(沿邊或中心方向)並確定哪個方格與所討論的特定方格具有最小距離。

  3. 存儲原始正方形的座標和最近的正方形。

  4. 重複所有方塊。

有關此更多的閱讀,你可以諮詢:

http://web.engr.oregonstate.edu/~tgd/classes/534/slides/part3.pdf