2014-11-15 91 views
-1

我想讓一個三角形來回移動弧線,三角形應該在移動時旋轉。WinForm三角形動畫

我已經做了圖片來解釋它更好地: https://app.box.com/s/mt9p66zlmtkkgkdvtb5h

數學看起來我的權利,任何人都可以告訴我,我做錯了什麼?

public partial class Form1 : Form 
{ 
    bool turn = false; 
    double angle = 0; 

    public Form1() 
    { 
     InitializeComponent(); 


    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 

     Brush solidBlackBrush = new SolidBrush(Color.Black); //En solid svart brush som brukes flere steder 
     Pen solidBackPen = new Pen(solidBlackBrush);//En solid svart pen som brukes flere steder 

     //Trekant = Norwegian for Triangle, Trekant is a class that draws a polygon shaped as a Triangle. 
     Trekant tre = new Trekant(); 

     e.Graphics.DrawArc(solidBackPen, new Rectangle(new Point(50,50), new Size(100,100)) , 180, 180); 

     //X = a + r*Cos(angle) | Y = b + r*Sin(angle) 
     double x = (50+(100/2)) + (100/2) * Math.Cos(Trekant.DegreeToRadian(angle)); 
     double y = (50+(100/2)) - (100/2) * Math.Sin(Trekant.DegreeToRadian(angle)); 

     e.Graphics.TranslateTransform((float)x - 15, (float)y - 40);//Flytter 0 slik at pistolen havner på rett sted 
     e.Graphics.RotateTransform((float)-Trekant.RadianToDegree(Trekant.DegreeToRadian(angle-90))); 

     tre.Draw(e.Graphics); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     if (angle == 0) 
     { 
      turn = false; 
     } 
     if (angle == 180) 
     { 
      turn = true; 
     } 
     if (turn) 
     { 
      angle -= 10; 
     } 
     if (!turn) 
     { 
      angle += 10; 
     } 

     this.Invalidate(); 
    } 
} 
+1

它目前做了什麼?在我看來,你在旋轉之前翻譯 – Sayse

+0

這個三角形是相對於0繪製的,所以我將0移動到圓弧上的右側,然後我將三角形旋轉到正確的角度。截至目前看起來,旋轉角度大約是正確的,三角形不在正確的位置。 – mosern

+0

爲什麼這是:(50+(100/2))+(100/2)'和這個:(50+(100/2)) - (100/2)' - 這些計算每次都是一樣的。即它只是一個常數值。你是否缺少一個變量?此外還有一個性能提示:只需將筆和筆刷聲明一次,然後在班級中重複使用它們,而不是每次重新創建它們。 –

回答

1

沒有進入編碼讓我們先建立數學..

讓說,在圖片中的半橢圓具有2w的寬度和h的高度。讓我們假設你想要運動在n步驟中發生。

然後在每個步驟s處,旋轉角度爲s * 180f/n。旋轉點的x停留在w加任何偏移ox橢圓有,但必須移動它的y垂直從相同數量的(w-h) * 2f/n下來每一步偏移oy,第一,然後再起來..

繪圖本身也相應地移動

讓你有旋轉點TranslateTransformRotateTransform,然後又TranslateTransform的形象,那麼DrawImage終於ResetTransform地方。

我希望有幫助。如果這不起作用,請更新這個問題,我們會做對的,我敢肯定。