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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2013, 20:12   #11
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Только у меня трабл с таймером.
Написал в событии "tick", чтобы(пример) повторило отрезок, каждую секунду прибаляя 1 к Х и У. А по нажатию на кнопку ничего не рисует..
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 21.03.2013, 20:13   #12
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Код:


        int i = 0, j = 0;
        Point first;
        Point second;
        List<Point> cr =new List<Point>();
        int fClick = 0, countClick=0;
        Graphics g;
        Pen p1 = new Pen(Color.Red, 4);
        Pen p2 = new Pen(Color.Green, 4);



        public Form1()
        {
            InitializeComponent();
        }

        private void startToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pictureBox1.Visible = true;
            g = pictureBox1.CreateGraphics();

        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (fClick == 0)
            {
                first.X = e.X;
                first.Y = e.Y;
                fClick++;
            }
            if (fClick == 1)
            {
                second.X = e.X;
                second.Y = e.Y;
                g.DrawLine(p1, first, second);
                fClick++;
            }
            if (fClick >1)
            {
                first.X = second.X;
                first.Y = second.Y;
                second.X = e.X;
                second.Y = e.Y;
                g.DrawLine(p1, first, second);
            }

            cr.Add(new Point(e.X, e.Y));

            textBox1.Text = Convert.ToString(cr[countClick].X);
            textBox2.Text = Convert.ToString(cr[countClick].Y);
            countClick++;

            
        }




        private void button1_Click(object sender, EventArgs e)
        {

                timer1.Enabled = true;
        
        }

        private void timer1_Tick(object sender, EventArgs e)
        {

            g.DrawLine(p2, cr[0].X, cr[0].Y, cr[0].X+1, cr[0].Y+1);

        }
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 21.03.2013, 22:01   #13
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,881
По умолчанию

Объявить переменную, например
Код:
int counter = 0;
И её прибавлять вместо 1 в таймере, ибо Ваш код только рисует 2 пикселя по сути, первый и соседний из-за добавленной 1 по х и у. А надо при изменении таймера рисовать со смещением величиной в counter.
Код:
counter++;
g.DrawLine(p2, cr[0].X, cr[0].Y, cr[0].X+counter, cr[0].Y+counter);
Но это неправильно.
Делать нужно не рассчитывая это в момент рисования, а рассчитывать отдельно, рисовать отдельно.
Далее, прибавлять 1 по х и у даст результат - перемещение только вправо вниз строго по диагонали 45 градусов. А надо во все стороны (т.е. приращения и с + и с минусом) и с учётом дробных смещений для диагоналей под любым углом. Тут обычно в простом виде берут вещественные координаты и рассчитывают в них, а при рисовке просто округляют. Ну а по-нормальному это делается на векторах, оно проще.
Рассчитать в обоих вариантах так - координаты(вектор) одной точки вычитаются из другой и делятся на длину полученного вектора (корень из суммы квадратов разностей координат, теорема Пифагора, иными словами), получаем минимальную скорость (она тоже вектор может быть), она уже с учетом знаков, её можно умножить на число и варьировать итоговую скорость.

Последний раз редактировалось phomm; 21.03.2013 в 22:05.
phomm вне форума Ответить с цитированием
Старый 21.03.2013, 22:53   #14
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

phomm, у меня с математикой плоховато..
то-то совсем не могу понять как с помощью векторов и теоремы Пифагора это сделать и откуда скорость взять.
Не могли бы Вы, объяснить на пальцах как это с векторами? Мне кажется это намного сложней.
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 22.03.2013, 01:07   #15
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Прочитал статью на хабре про вектора, вроед и не так сложно и удобно очень, но не пойму как применить сюда?
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 22.03.2013, 03:07   #16
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Придумал так: будет пикчербокс, внизу у него будет точка начало координат(0,0), от нее и будем двигаться, высчитывать скорость..
Теперь проблема в том, что как заставить машинку ровно передвинуться из одной точки в другую, если первая точка, к примеру (0,0), а другая (1,5). Если бы было первая (0,0), а вторая (3,3) - просто прибавлять Х и У.
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 22.03.2013, 06:42   #17
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,881
По умолчанию

Давайте код (архив проекта) по максимуму наполненный тем что Вам надо и со всеми Вашими попытками, запилю Вам часть, что отвечает а это.
phomm вне форума Ответить с цитированием
Старый 22.03.2013, 10:28   #18
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

phomm, спасибо большое! Но, выходит, это Вы сделаете, а не я.
Давайте я сам попробую, а если уже совсем не выйдет - напишу Вам, хорошо ?
Спасибо еще раз.

Сейчас никак не могу понять как перемещение сделать..
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 22.03.2013, 10:53   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сейчас никак не могу понять как перемещение сделать..
перемещение делается всегда так:
Процедура на Таймере:
стираем объект по координатам X,Y
изменяем (наращиваем координаты X,Y) на заданное приращение
рисуем объект по полученным координатам X,Y


и всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2013, 20:36   #20
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Serge_Bliznykov, это конечно да, но как найти "заданное приращение"? Легко, когда надо вперелназадвлевовправо двигать, а когда надо на 10 клеточек по Х и 27 по У ?
Спеши медленно.
asmars вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление игрушечной машинкой с компьютера 8Observer8 C# (си шарп) 11 26.10.2012 17:27
Управление 2 экранами Alexandr555 Компьютерное железо 13 06.07.2011 22:30
Управление Костян 98 Общие вопросы Delphi 21 30.05.2011 16:31
Управление памятью ilham Операционные системы общие вопросы 2 17.12.2008 18:29