2016-07-16 3 views
0

첨부 된 스크린 샷의 흰색 선을 따라 움직이는 이미지가 필요합니다. 하지만 어떻게해야 할 지 잘 모르겠습니다.두 벡터 사이에서 이미지 이동

141,78 및 509,223

내가 경로를 시각화하는 선을 그리고 궁극적으로 내가 일정 기간 동안 처음부터 끝까지 이미지를 이동하려면 : 여기 내 예를 좌표이다. 5 분이라고합시다.

나는 지난 18 시간 동안 인터넷을 검색 해왔다. 그리고 나는 여전히 붙어있다. 누구든지 도와 줄 수 있습니까?

enter image description here

+1

어떻게 이벤트가 e.Graphics.DrawImage와 페인트 사용에 대한. 애니메이션의 경우 타이머를 사용하십시오. 좌표와 Refresh();를 변경하십시오. –

+3

키워드는 선형 보간입니다. 하나의 간단한 폼은'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