2013-05-08 37 views
1

情況 我目前有一個正確計算周長的工作方法。圓周內的每個位置存儲在結構陣列內。根據陣列中的位置,我的相機位置沿着圓圈移動。數組中的每個元素保存三維空間內位置的x,y和z值。如何移動計算出的圓的位置?

問題: 圓的位置似乎是位於x:0,Y:0,Z:0與3的半徑,但是我需要它是在三維空間內的另一位置(x :10,Y:35,Z:20)的半徑3.

我的結構:

typedef struct 
    { 
     float x; 
     float y; 
     float z; 
    } circle; 
circle loop[600] = {0}; 

我的方法,其計算所述圓:

void calcCircle() 
{ 
    for (int i = 0; i < 599 ; i++) 
      { 
       loop[i].x = radius * sin(i/100.0); 
       loop[i].y = 10; 
       loop[i].z = radius * cos(i/100.0); 
      } 

} 

回答

3

只需添加一個偏移到你的計算,例如,在10,35,20居中......

const double PI = 3.1415926535; 
void calcCircle() 
{ 
    for (double i = 0; i < 2*PI ; i+=PI*2/600) 
      { 
       loop[i].x = 10 + radius * sin(i/2*PI); 
       loop[i].y = 35; 
       loop[i].z = 20 + radius * cos(i/2*PI); 
      } 

} 

需要注意的是你的榜樣不集中在0,0,00,10,0 - 如果你仍然希望攝像頭爲10以上,加你的y價值額外10。

此外,將中心提供給相機的軌道和某些偏移量更常見,而不是預先計算n分。這樣,相機可以平穩移動,而不是在固定點之間移動。就目前而言,軌道速度可能與可能因設備而異的幀速率有關。

最後,我已經改變了您的sin/cos的縮放比例,以便它將以600步描述一個完整的軌道。

+0

非常感謝,非常感謝 – user2363704 2013-05-08 19:47:02

+0

我的榮幸。歡迎來到SO--希望我們今後能看到你 – Basic 2013-05-08 19:47:36