Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2012, 14:53   #1
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию движение фигуры по форме

нужно нарисовать эллипс и круг. они должны произвольным образом двигаться по форме и дойдя до границы формы отталкиваться от нее и двигаться в другую сторону. как можно поменять направление движения фигуры при столкновении с границей формы? помогите пожалуйста
alex(21) вне форума Ответить с цитированием
Старый 28.11.2012, 14:59   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Менять координаты круга в цикле. Пусть dx - скорость горизонтального перемещения, а dy - вертикального (на каждом шаге цикла к координате X круга прибавляем dx, а к координате Y - dy).
После каждого изменения координат проверяйте, не коснулся ли круг края формы. Т.е., для горизонтали, не превышает ли сумма координаты X и радиуса круга ширины нашей формы, или не меньше ли нуля эта сумма. Если да, то круг коснулся края формы и следует тупо изменить знак у числа dx. Аналогично и для вертикали.

P.S. в цикл вставьте небольшую задержку, чтобы фигура не металась слишком быстро по экрану. Величины dx и dy подбирайте экспериментально
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 28.11.2012, 19:22   #3
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

вот что нужно сделать:
Создать приложение, при открытии которого в окне приложения появляется изображение сцены
Сцена:
Эллипс и круг перемещаются произвольным образом внутри заданной области в окне. Если эллипс и круг сталкиваются друг с другом, они должны поменять направление. Объекты не должны выходить за пределы области.

я нарисовал эллипс. затем в таймере произвожу движение фигуры:
Код:
private void timer1_Tick(object sender, EventArgs e)
        {
            if (Ex1 < ClientSize.Width - Ewidth1 && Ey1 < ClientSize.Height - Eheight1 || Ex1 > Ewidth1 - 50 && Ey1 > Eheight1 - 50)
            {
                int a;
                Random sl = new Random();
                a = sl.Next(0, 2);
                if (a == 0)
                {
                    Ex1 -= sl.Next(2, 10);
                    Ey1 -= sl.Next(2, 10);
                }
                else
                {
                    Ex1 += sl.Next(2, 10);
                    Ey1 += sl.Next(2, 10);
                    
                }
                    Invalidate();
             }
            else
             while (Ex1 > Ewidth1-50 && Ey1 > Eheight1-50)
             {
                            int a;
                            Random sl = new Random();
                            a = sl.Next(0, 2);
                            if (a == 0)
                                Ex1 -= sl.Next(2, 10);
                            else
                                Ey1 -= sl.Next(2, 10);
                            Invalidate();
             }
        }
Ex1, Ey1-координаты эллипса
Ewidth1, Eheight1- ширина и высота эллипса соответственно.
в условии проверяю границы экрана и если фигура не выходит за границы то тогда осуществляю движение.
после запуска программы понятно что чтото не так как можно исправить?
alex(21) вне форума Ответить с цитированием
Старый 28.11.2012, 22:03   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Вы вообще мой пост читали?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 28.11.2012, 23:28   #5
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

Цитата:
Luuzuk
спасибо за идею
только вот фигура двигается по диагонали. подскажите пожалуйста чтобы движение было более случайным. вот код:
Код:
private void timer1_Tick(object sender, EventArgs e)
        {
            int a = 0;
            Random sluch = new Random();
            a = sluch.Next(0, 2);
            if (b == 0)
            {
                if (Ex1 < ClientSize.Width - Ewidth1 && Ey1 < ClientSize.Height - Eheight1)
                {
                    if(a==0)
                        Ex1 += 1;
                    if (a == 1 || a == 0 || a == 2)
                    {
                        Ex1 += 1;
                        Ey1 += 1;
                    }
                    Invalidate();
                }
                else b = 1;
            }
            if (b == 1)
            {
                if (Ex1 > Ewidth1 && Ey1 > Eheight1)
                {
                    if (a == 0)
                        Ex1 -= 1;
                    if (a == 1 || a == 0 || a == 2)
                    {
                        Ex1 -= 1;
                        Ey1 -= 1;
                    }
                    Invalidate();
                }
                else b = 0;
            }
}
alex(21) вне форума Ответить с цитированием
Старый 29.11.2012, 09:18   #6
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Не обязательно прибавлять/отнимать именно единицу. Создайте переменные dx и dy, которые будете прибавлять/отнимать к Ex1 и Ey1 соответственно. Если dx == dy (в вашем коде - 1), то фигура будет перемещаться строго под углом 45градусов. Если к Ex1 прибавлять, например, тройку, а к Ey - единицу, то движение будет более пологим. Мысль улавливаете?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 29.11.2012, 14:22   #7
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

Цитата:
Luuzuk
спасибо, получилось. дайте еще совет с отскоком фигур при столкновении друг об друга
alex(21) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП - движение фигуры Nataly026 Паскаль, Turbo Pascal, PascalABC.NET 0 23.05.2012 19:52
Движение фигуры Di-em Паскаль, Turbo Pascal, PascalABC.NET 1 10.01.2012 20:55
Движение одной фигуры,вслед изменения высоты другой фигуры. 7vlad37 Microsoft Office Excel 3 21.07.2011 18:01
Движение фигуры По диагонали Weyner Мультимедиа в Delphi 6 21.10.2010 15:10
Движение фигуры Виталюкас Общие вопросы Delphi 2 28.04.2010 10:44