Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 08.07.2012, 17:31   #1
oblomok
Новичок
Джуниор
 
Регистрация: 08.07.2012
Сообщений: 3
По умолчанию Движение объекта по квадратной траектории

Здравствуйте, программисты. Подскажите, как реализовать движение объекта по квадратной траектории?
oblomok вне форума Ответить с цитированием
Старый 08.07.2012, 19:25   #2
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

1) задаем квадратную траекторию
2) двигаем объект по квадратной траектории
Reskov вне форума Ответить с цитированием
Старый 08.07.2012, 19:58   #3
oblomok
Новичок
Джуниор
 
Регистрация: 08.07.2012
Сообщений: 3
По умолчанию

Приведите, пожалуйста код программы. Не могу правильный алгоритм движения задать.
oblomok вне форума Ответить с цитированием
Старый 08.07.2012, 21:01   #4
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        enum Motion { ToBottom, ToRight, ToTop, ToLeft };

        Rectangle rect;
        Motion currentMotion;

        public Form1()
        {
            InitializeComponent();
            rect = new Rectangle()
            {
                X = 40,
                Y = 40,
                Width = 150,
                Height = 150
            };
            currentMotion = Motion.ToRight;
            timer1.Stop();
            timer1.Interval = 10;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button1.Left = rect.Left;
            button1.Top = rect.Top;
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            switch (currentMotion)
            {
                case Motion.ToBottom:
                    button1.Top += 1;
                    if (button1.Top == rect.Bottom)
                        currentMotion = Motion.ToLeft;
                    break;
                case Motion.ToLeft:
                    button1.Left -= 1;
                    if (button1.Left == rect.Left)
                        currentMotion = Motion.ToTop;
                    break;
                case Motion.ToTop:
                    button1.Top -= 1;
                    if (button1.Top == rect.Top)
                        currentMotion = Motion.ToRight;
                    break;
                case Motion.ToRight:
                    button1.Left += 1;
                    if (button1.Left == rect.Right)
                        currentMotion = Motion.ToBottom;
                    break;
                default:
                    throw new NotImplementedException();
            }
        }
    }
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 08.07.2012, 21:21   #5
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Код:
     private static Point TweenPoint(Point a, Point b, float tweenAnimate)
        {
            if (a == null) throw new ArgumentNullException("a");
            if (b == null) throw new ArgumentNullException("b");
            var tmp = new Point
                {
                    X = (int)((1 - tweenAnimate) * a.X + tweenAnimate * b.X),
                    Y = (int)((1 - tweenAnimate) * a.Y + tweenAnimate * b.Y)
                };

            return tmp;
        }

        private Graphics gr;

        private int startX = 100;
        private int startY = 100;

        private Point curPos;

        private Point[] arr = new Point[]
            { new Point(100, 100), new Point(100, 200), new Point(200, 200), new Point(200, 100) };

        private int arrPos = 0;

        private float tween = 0.02f;
        private void button1_Click(object sender, EventArgs e)
        {
            curPos=new Point(startX,startY);
            gr = pictureBox1.CreateGraphics();
            gr.DrawEllipse(new Pen(Color.Red), startX, startY, 5, 5);
           timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            var p = new Pen(Color.Red);
            
            if (Math.Abs(curPos.X-arr[arrPos].X)<0.01&&Math.Abs(curPos.Y-arr[arrPos].Y)<0.01)
            {
                curPos.X = arr[arrPos].X;
                curPos.Y = arr[arrPos].Y;
                if (arrPos != 3)
                {
                    arrPos++;
                }
                else
                {
                    arrPos = 0;
                }
                tween = 0.02f;

            }

            curPos = TweenPoint(curPos, arr[arrPos], tween);
            tween += 0.02f;
            gr.Clear(Color.White);
            gr.DrawEllipse(new Pen(Color.Red), curPos.X, curPos.Y, 5, 5);
        }
Reskov вне форума Ответить с цитированием
Старый 08.07.2012, 22:13   #6
oblomok
Новичок
Джуниор
 
Регистрация: 08.07.2012
Сообщений: 3
По умолчанию

Спасибо за помощь, товарищи! Пример Петррр мне более понятен. Пример Reskov я не догнал и при исполнении кода ничего не происходит. В пример Петррр добавил лишь одну строчку чтобы заработало:
private void button2_Click_1(object sender, EventArgs e)
{

button1.Left = rect.Left;
button1.Top = rect.Top;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Start();

}
oblomok вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение объекта по искривленной траектории ZvEr_HaCkEr Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 25.06.2011 04:36
движение по заданой траектории (Pascal) announcer02 Помощь студентам 6 23.06.2010 23:38
Движение курсора по траектории DarkHacker Помощь студентам 0 19.03.2010 18:05
Движение фигуры по траектории Dgohn Общие вопросы Delphi 3 08.01.2009 09:36


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя