2013-11-27 35 views
-1

我在C#此代碼爲平局圈:轉彎直徑,類似於汽車輪胎

Rectangle r = new Rectangle(300, 300, 50, 50); 
g.FillEllipse(brush, r); 

我有在C#中的旋轉圈的一個問題。

我有一個像汽車輪胎的圓圈,我想向前旋轉。

就像這樣: enter image description here

+0

使用'RotateTransform'?但是橢圓形輪胎的底部不會跟蹤道路,除非您還包括一些計算來上下移動中心。 –

+0

這裏是:http://tinyurl.com/qxgrhux –

+0

plase幫我用旋轉的代碼 – user3042161

回答

0

試試這個,每個Graphics對象有一個名爲RotateTransform方法,但是這種旋轉的東西只有大約(0,0),我們必須把它與TranslateTransform結合旋轉的東西任何一處(在這種情況下,點應該是你圓的中心點):

Rectangle r = new Rectangle(300, 300, 50, 50); 
int dx = r.Left + r.Width/2; 
int dy = r.Top + r.Height/2; 
float alpha = 45;//rotate 45 degrees clockwise 
g.TranslateTransform(dx, dy); 
g.RotateTransform(alpha); 
g.TranslateTransform(-dx,-dy); 
g.FillEllipse(brush, r); 

更新:我試過了,你這個演示代碼,它是從左邊E中的輪軌dge到右邊緣和來回反向...我試圖提高其性能,但它似乎是winforms的限制,你可以看到閃爍的輪子運行,使DoubleBuffered有一點幫助,但不夠好使其停止閃爍。親自嘗試一下。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     center = new PointF(startOffset+r, r + 30); 
     t.Interval = 1; 
     t.Tick += (se, e) => 
     { 
      if (s >= ClientSize.Width - r*2 - startOffset) dir = -1; 
      else if (s <= startOffset) dir = 1;     
      center.X += dir * step; 
      Invalidate(); 
     }; 
     t.Start(); 
     DoubleBuffered = true; 
     Paint += Form1_Paint;   
    } 
    Timer t = new Timer(); 
    PointF center; 
    int r = 130; 
    float s; 
    float step = 1f; 
    int dir = 1; 
    int startOffset;   
    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     s += step * dir;       
     e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
     Wheel(s, e.Graphics);       
     e.Graphics.FillEllipse(Brushes.Green, 
          new RectangleF(center.X - r, center.Y - r, r * 2, r * 2)); 
     //draw this line to see how the wheel runs 
     e.Graphics.DrawLine(Pens.Red, new PointF(center.X - r, center.Y), 
             new PointF(center.X + r, center.Y)); 
    }   
    public void Wheel(float dx, Graphics g) 
    {    
     float f = (float)(dx * 180/(r * Math.PI)); 
     g.TranslateTransform(center.X, center.Y); 
     g.RotateTransform(f); 
     g.TranslateTransform(-center.X, -center.Y);    
    } 
} 

enter image description here

+0

thx。但我有旋轉和向前移動 – user3042161

+0

@ user3042161它需要一點點的代碼在這裏,這樣做至少需要一個計時器,計算'dx'對應的旋轉角度... –

+0

我嘗試但無法計算旋轉角度。 – user3042161