2014-11-23 60 views
0

我在學習,我是C++編程的初學者,目前我們正在學習有關平移,旋轉和縮放的知識。我們已經得到了一個代碼,在另一個內圈的圓形軌道上顯示了一個外圈。我們被要求讓這個外圈圍繞內圈旋轉。下面是給定的代碼:在C++中圍繞另一個圓圈的圓形路徑中製作圓軌道

{ 
int gd,gm; 
detectgraph(&gd,&gm); 
initgraph(&gd,&gm,"c:\\tc\\bgi"); 
setcolor(WHITE); 

rectangle(10,60,400,400); 

//Central inner circle 
int CC_x,CC_y; 
CC_x=10+390/2;   
CC_y=60+340/2;   
outtextxy(CC_x, CC_y, "Central Circle"); 
circle(CC_x,CC_y,30); 

//orbit 
circle(CC_x,CC_y,120); 

//Outer circle 
int c_x,c_y; 
double angle; 
angle=0; 
c_x=CC_x+120;   
c_y=CC_y; 
while(1){     
     setcolor(WHITE); 
     outtextxy(c_x, c_y, "Outer Circle"); 
     circle(c_x,c_y,10); 
     // Blinking effect 
     circle(CC_x,CC_y,120); 
     delay(100); 
     setcolor(BLACK); 
     outtextxy(c_x, c_y, "Outer Circle"); 
     circle(c_x,c_y,10); 
     delay(90); 
     // modified code 
     c_x = CC_x + (c_x - CC_x) cos(angle) – (c_y - CC_y) sin(angle) 
     c_y = CC_y + (c_x - CC_x) sin(angle) – (c_y - CC_y) cos(angle) 
     angle++ 
     // end of modified code 
     } 

getch(); 
} 

我通過聲明double angle並初始化爲0,然後我用循環內的下列公式修改這一點。

x′ = xr + (x - xr) cosθ – (y - yr) sinθ 
y′ = yr + (x - xr) sinθ – (y - yr) cosθ 

但結果是外圈最終向上盤旋到內圈的中心。我怎樣才能讓它留在它的圓形路徑上?我希望我已經很好地解釋了我的問題。我試圖谷歌解決這個問題,但它只給了我已經嘗試過的上述公式。如果你們能幫助我,告訴我我的代碼有什麼問題,我會非常感謝你。謝謝。

回答

2

經典的錯誤是在第二次分配以使用修改x,這樣你實際上

計算yr + (x' - xr) sinθ – (y - yr) cosθ

(不表明你正在使用的不是一個好主意的實際代碼。)

+0

編輯帖子。抱歉。 – 2014-11-23 12:08:39

+0

我的直覺是對的。 – 2014-11-23 12:09:26

+0

這聽起來很愚蠢,我該如何解決這個問題?代碼中是否有其他錯誤? – 2014-11-23 12:48:29