2016-07-16 10 views
0

添付されたスクリーンショットの白い線に沿って移動する画像を持っていたいと思います。しかし、これをどうやって行うのかは分かりません。2つのベクトル間で画像を移動

141,78および509223

私はパスを可視化するために線を引き、最終的に私は時間をかけて最初から最後まで画像を移動したい:ここに私の例 座標です。 5分としましょう。

私は過去18時間インターネットを検索していましたが、まだ迷っています。誰も助けることができますか?

enter image description here

+1

どうe.Graphics.DrawImageでイベントペイントの使用に関する。アニメーションの場合は、Timerを使用します。座標とリフレッシュ();を変更します。 –

+3

キーワードは線形補間です。 1つのシンプルなフォームは 'x = x2 * a + x1 *(1 - a)'です。ここで、aは0から1になります。 –

+1

対象とするもの:Winforms、WPF、ASP ..? __Always__あなたの質問に正しくタグを付けてください! – TaW

答えて

1

あなたは一定の間隔でゲームループと何か実行コードが必要です。これが唯一のアニメーションであれば、より単純なタイマーコンポーネントが、場所を更新するコードをトリガーすることができます(例えば、50回/秒(Interval=20 ms))。

ここでは、空の上に描かれているように円で囲まれた画像のスケルトンコードを示します。PictureBox

public partial class Form1 : Form 
{ 
    float t = 0; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void pictureBox1_Resize(object sender, EventArgs e) 
    { 
     pictureBox1.Refresh(); 
    } 

    private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     Image img = Resources.Image1; 
     float dx = img.Width, dy = img.Height; 
     float r = 100; 
     e.Graphics.TranslateTransform(pictureBox1.Width/2, pictureBox1.Height/2); 
     e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
     // draw a gray circle to indicate the path visually 
     e.Graphics.DrawEllipse(Pens.Gray, -r, -r, 2 * r, 2 * r); 

     // you must set the x,y coordinate of the center of the image 
     // according to your path. 
     // If it is a line use linear interpolation 
     // x = x_start + t*(x_end-x_start); 
     // y = y_start + t*(y_end-y_start); 
     float x = (float)(r * Math.Cos(2 * Math.PI * t)); 
     float y = -(float)(r * Math.Sin(2 * Math.PI * t)); 

     e.Graphics.DrawImageUnscaled(img, (int)(x - dx/2), (int)(y - dy/2)); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     if (t >= 1) 
     { 
      t -= 1; 
     } 
     t += 0.02f; 
     pictureBox1.Refresh(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     timer1.Interval = 20; 
     timer1.Start(); 
    } 
} 

scr

+1

ポイントAからポイントBまで座標を外挿する必要があります。描くことができる...私は線形補間が答えだと思います。 –

+1

コードのコメントを見てください。私は線形補間をコメントアウトしました。 – ja72

+0

アニメーションパラメータ「t」は0から1になります。 – ja72