我在C#此代碼爲平局圈:轉彎直徑,類似於汽車輪胎
Rectangle r = new Rectangle(300, 300, 50, 50);
g.FillEllipse(brush, r);
我有在C#中的旋轉圈的一個問題。
我有一個像汽車輪胎的圓圈,我想向前旋轉。
就像這樣:
我在C#此代碼爲平局圈:轉彎直徑,類似於汽車輪胎
Rectangle r = new Rectangle(300, 300, 50, 50);
g.FillEllipse(brush, r);
我有在C#中的旋轉圈的一個問題。
我有一個像汽車輪胎的圓圈,我想向前旋轉。
就像這樣:
試試這個,每個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);
}
}
thx。但我有旋轉和向前移動 – user3042161
@ user3042161它需要一點點的代碼在這裏,這樣做至少需要一個計時器,計算'dx'對應的旋轉角度... –
我嘗試但無法計算旋轉角度。 – user3042161
使用'RotateTransform'?但是橢圓形輪胎的底部不會跟蹤道路,除非您還包括一些計算來上下移動中心。 –
這裏是:http://tinyurl.com/qxgrhux –
plase幫我用旋轉的代碼 – user3042161