2014-02-19 43 views
0

因此,我試圖在大約640,000點的區域內生成5個隨機座標,每個座標軸的值在100和900之間。這些座標之間的距離必須大於100,以防止重疊。有搜索以前的答案,並試圖一塊下面的代碼:以它們之間的差異生成隨機座標

struct point 
    { 
     int x; 
     int y; 
    }; 

    point pointarray[6]; 
    srand (time(NULL)); 
    pointarray[1].x = 100+(std::rand()% 801); 
    pointarray[1].y = 100+(std::rand()% 801); 
    for (int n=2; n <= 5 ; n++) 
    { 
     double dist; 
     int currentx; 
     int currenty; 
     double xch; 
     double ych; 
     while (dist < 100) 
     { 
      srand (time(NULL)); 
      currentx = (100+(std::rand()% 801)); 
      currenty = (100+(std::rand()% 801)); 

      xch = (currentx - (pointarray[(n-1)].x)); 
      ych = (currenty - (pointarray[(n-1)].y)); 
      dist = sqrt(xch*xch + ych*ych); 
      if (dist >= 100 && dist <= 800) 
      { 
       currentx = pointarray[n].x; 
       currenty = pointarray[n].y; 
      } 
     } 
    } 

我不明白爲什麼最後4分是絕對龐大的數字(以百萬計),而只有第一個是在要求的範圍之內?

+2

數組索引從0開始,和DIST沒有初始化因此可能while循環永遠不會執行。 –

+0

另外,在'while'循環中調用'srand'可能不會做你想做的事 - 在兩個循環之前調用它應該足夠了。 – Hulk

回答

1

您使用未初始化dist,也可能是這個問題:

double dist; 
.... 
while (dist < 100) 

另外,我看不出有什麼地方,你寫pointarray(除pointarray [1])。不應

currentx = pointarray[n].x; 

成爲

pointarray[n].x = currentx; 

而且,如果dist變得大於800,則什麼也不會發生,我們只是去到下一個元素。我猜想的意圖是保持在while循環內。

此外,我們檢查前一個點的距離。我不確定,但可能是爲了檢查以前所有點的距離。在後一種情況下,我們可能需要一個內部循環。但要確保已經放置的點不可能放置下一個點。

而且,也許你不希望第二srand (time(NULL));

+0

我應該在while循環中聲明dist嗎? – Vandib

+0

@Vandib你可以初始化它以進入while循環,例如'double dist = 0;'。 – AlexD

+0

謝謝!它現在的作品,寫點陣陣是顛倒 – Vandib

相關問題