2010-12-14 34 views
1

據說,要將線條旋轉一定的角度,需要將其終點座標乘以矩陣({Cos(a),Sin(a)} {-Sin(a)Cos (a)}),其中a是旋轉角度。矩陣中得到的兩個數字將爲xy旋轉線的終點座標。旋轉繞行的起點。 簡化它,x的新座標爲{x * Cos(a) - y * Sin(a)},y的新座標爲{x * Sin(a)+ y * Cos(a)}。旋轉簡單線條圖像的問題

任務是使用此方法旋轉三角形。但是,使用此方法將下面的代碼,是給了一些廢話,而不是旋轉的圖像(原三角形的扭曲形式,通過「隨機」角度旋轉):

x0:=200; 
y0:=200; 

    bx:=StrToInt(Edit1.Text); 
    by:=StrToInt(Edit2.Text); 
    cx:=StrToInt(Edit4.Text); 
    cy:=StrToInt(Edit5.Text); 
    a:=StrToInt(Edit3.Text); 

    //Original triangle 

    Form1.Canvas.Pen.Color:=clBlue; 
    Form1.Canvas.MoveTo(x0,y0); 
    Form1.Canvas.LineTo(bx,by); 
    Form1.Canvas.LineTo(cx,cy); 
    Form1.Canvas.LineTo(x0,y0); 

    //New triangle 
    Form1.Canvas.Pen.Color:=clGreen;  
    Form1.Canvas.MoveTo(x0,y0); 
    b1x:=Round(bx*cos(a*pi/180)-by*sin(a*pi/180)); 
    b1y:=Round(bx*sin(a*pi/180)+by*cos(a*pi/180)); 
    c1x:=Round(cx*cos(a*pi/180)-cy*sin(a*pi/180)); 
    c1y:=Round(cx*sin(a*pi/180)+cy*cos(a*pi/180)); 
    Form1.Canvas.LineTo(b1x,b1y); 
    Form1.Canvas.MoveTo(x0,y0); 
    Form1.Canvas.LineTo(c1x,c1y); 
    Form1.Canvas.LineTo(b1x,b1y); 

end; 

嗯,我的想法。我究竟做錯了什麼?

謝謝你的時間。

回答

4

您正在使用的公式圍繞(0,0)旋轉一個點。要達到所需的結果,請將您的計算更改爲:

b1x:=x0 + Round((bx-x0)*cos(a*pi/180)-(by-y0)*sin(a*pi/180)); 
b1y:=y0 + Round((bx-x0)*sin(a*pi/180)+(by-y0)*cos(a*pi/180)); 
c1x:=x0 + Round((cx-x0)*cos(a*pi/180)-(cy-y0)*sin(a*pi/180)); 
c1y:=y0 + Round((cx-x0)*sin(a*pi/180)+(cy-y0)*cos(a*pi/180)); 
+0

謝謝。問題實際上是關於x和y的相對性=) – Arnthor 2010-12-14 14:15:53

4

您似乎在圍繞其初始起點座標旋轉每條單獨的線。所以第1行將繞其起點(x0,y0)旋轉;那麼第2行將圍繞bx旋轉,那麼第3行將圍繞cx旋轉。這將導致扭曲的三角形。相反,您需要旋轉第一行起點處的所有三條線。