maysamfth Ответов: 1

Перемещение picturebox вдоль линии


Привет Я хочу, чтобы переместить элемент управления PictureBox вдоль линии с таймером. У меня есть 2 точки в качестве начальной и конечной точек. Приведенный ниже код перемещает picturebox, но не перемещается вдоль моей линии:

Что я уже пробовал:

<pre lang="C#">Point _start;
        Point _end;
        int _interval = 7;
        Point _middle;
        double radians;
        private void timer1_Tick(object sender, EventArgs e)
        {
            _middle.X -= Convert.ToInt16(_interval * Math.Cos(radians));
            _middle.Y -= Convert.ToInt16(_interval * Math.Sin(radians));

            pictureBox1.Location = _middle;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            _start = pictureBox1.Location;
            _end = new Point(50, 50);
            _middle = _start;

            radians = (Angle(_start, _end) - 180) * -1;

            timer1.Enabled = true;
        }

        const double Rad2Deg = 180.0 / Math.PI;

        private double Angle(Point start, Point end)
        {
            return Math.Atan2(start.Y - end.Y, end.X - start.X) * Rad2Deg;
        }</pre>

Ralf Meier

И как она движется ?
И как он должен двигаться ?
Вы должны быть более конкретны ...

maysamfth

Я сказал, что я хочу, чтобы переместить элемент управления PictureBox по прямой линии, но мой код переместить элемент управления PictureBox по другой линии. предположим, что начальное местоположение picturebox равно (200,200), тогда я хочу переместить этот picturebox в точку (50, 50). если вы тестируете мой код, то проблема в том, чтобы указать.

1 Ответов

Рейтинг:
10

Ralf Meier

вы должны правильно рассчитать расстояния/углы :

private void timer1_Tick(object sender, EventArgs e)
 {
      _middle.X -= Convert.ToInt16(_interval * Math.Cos(radians / Rad2Deg));
    _middle.Y -= Convert.ToInt16(_interval * Math.Sin(radians / Rad2Deg));

    pictureBox1.Location = _middle;
  }


Cos, Sin и так далее работают с радианами, а не с градусами ...


maysamfth

спасибо.

Ralf Meier

пожалуйста... :)