2013-02-27 107 views
1

我想寫一個C程序來旋轉矩形內的點。旋轉矩形內的幾個點

在我的程序中,矩形中心是樞軸點,矩形尺寸是320x480。假設矩形的頂點之一位於原點,則支點爲(160,240)

現在相對於旋轉點(px, py)矩形內的支點(ox, oy),我用下面的公式 -

p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox 

p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy 

然而,當我試圖通過90度旋轉點,所有點被映射到一條直線上。

任何人都可以解決這個問題嗎?

theta2=90; 


     theta1=abs(theta2*3.1415926)/180; 

     if(theta2>0) 
     { 
      for(int tc=0;tc<rstruct2->nrows;tc++) 
      { 
       rstruct2->xcol[tc]=round((rstruct2->xcol[tc]-160)*cos(theta1)-sin(theta1)*(rstruct2->ycol[tc]-240)+160); 

       rstruct2->ycol[tc]=round((rstruct2->xcol[tc]-160)*sin(theta1)+cos(theta1)*(rstruct2->ycol[tc]-240)+240); 


      } 
     } 
     else 
     { 
      for(int tc=0;tc<rstruct2->nrows;tc++) 
      { 
       rstruct2->xcol[tc]=round(160+(rstruct2->xcol[tc]-160)*cos(theta1)+(rstruct2->ycol[tc]-240)*sin(theta1)); 

       rstruct2->ycol[tc]=round(240+(-rstruct2->xcol[tc]-160)*sin(theta1)+(rstruct2->ycol[tc]-240)*cos(theta1)); 


      } 
     } 
+1

1.這是C++或C?他們是不同的。我們可以看看你的代碼嗎? (這很可能會回答1) – BoBTFish 2013-02-27 10:53:00

+0

@BoBTFish它是c – 2013-02-27 11:03:36

+0

好的,我刪除了'C++'標記。 – BoBTFish 2013-02-27 11:05:50

回答

4

你Y型旋轉使用修改的X值,但你需要使用基本價值 - 用一個臨時變量,就像這樣:

double x_tmp = round((rstruct2->xcol[tc]-160)*cos(theta1)-sin(theta1)*(rstruct2->ycol[tc]-240)+160); 
double y_tmp = round((rstruct2->xcol[tc]-160)*sin(theta1)+cos(theta1)*(rstruct2->ycol[tc]-240)+240); 

rstruct2->xcol[tc] = x_tmp; 
rstruct2->ycol[tc] = y_tmp;