Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
6 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 125

Как заставить шарик двигаться по правильной траектории?

19.05.2014, 01:02. Показов 2022. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!Препод сказал,что шарик летает неправильно,подскажите,что не так....
Вложения
Тип файла: rar MatModel.rar (1.91 Мб, 39 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.05.2014, 01:02
Ответы с готовыми решениями:

Как заставить двигаться шарик?
Я создаю на форме шарики, и мне нужно заставить их двигаться, как это сделать??

Как заставить шарик двигаться используя цикл?
Доброго всем дня. Есть прога которая рисует круг при нажатии мышки и теперь мне нужно заставить этот круг двигатся и отбиватся от...

Как заставить окружность двигаться по заданной траектории в Matlab?
Задание: смоделировать движение электронов вокруг ядра атома. Вот код: script clear all clc t=0: pi/100:2*pi; x=sin(t); ...

5
Заблокирован
19.05.2014, 02:46
А мы-то тут причём? Раз препод говорит, что чего-то неправильно, он ОБЯЗАН объяснить, что именно.
А то он так и будет ко всему цепляться, Вы будете всё это безоговорочно принимать, и в итоге ничего не сдадите и получите шанс вылететь с вуза.

Добавлено через 2 минуты
Я тут ничем помочь не могу. Я даже не знаю, как этот шарик должен летать. Задание же никто не опубликовал.
2
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
19.05.2014, 14:03
C#
1
ImageBox.Image = new Bitmap(@"C:\Users\User\Desktop\MatModel\MatModel\Planeta.jpg");
На будущее -- так не делайте. Или добавляйте в ресурсы, или прописывайте локальный путь. Плюс ещё засунули прогрузку на Load формы при х86 сборке... Так даже ошибка не ловится, на большинстве ОСях. =D

Второе -- если поля не для ввода, установите им disable = false или readonly = true

Третье -- при задании высоты полёта больше окна, шарик уже не падает. Не разбирался почему.

По формулам....

Я бы по старту запоминал время запуска

Скорость движения по оси абцис у нас постоянная. У вас же почему-то расчитывается...
C#
1
Vx = Vx + dt * (-Vx * 0.0001);
Вертикальное положение вообще высчитывается через скорость... непонятно как.
y = (y - (Vy * dt - g * dt * dt / 2));

В общем -- спрашиваем преподавателя и включаем мозг.

Добавлено через 24 минуты
где-то так...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
 
namespace MatModel
{
    public partial class Form1 : Form
    {
        double pi = Math.PI;
        double Vx, Vy;
        const double g = 9.8;
        double V, a, MaxX, MaxY, x, y, dt;
        int xx;
        int yy;
        const int maxHeighWindow = 502;
 
        // правки
        DateTime startTime = DateTime.Now;
        // end
 
        public Form1()
        {
            InitializeComponent();
        }
 
        public void drawBall(PaintEventArgs e)
        {
            Graphics rg = e.Graphics;
            SolidBrush mySolidBrush = new SolidBrush(Color.White);
            rg.FillEllipse(mySolidBrush, xx, yy, 20, 20);
        }
 
        public void beginBall()
        {
            if (yy <= maxHeighWindow)
            {
                dt = (DateTime.Now - startTime).TotalSeconds;
                xx = Convert.ToInt32(Vx * dt);
                yy = maxHeighWindow - Convert.ToInt32(Vy * dt - dt * dt * g / 2);
            }
        }
 
        private void Reshenie()
        {
            //RasstoyanieBox.Text = "";
            //VisotaBox.Text = "";
            //V = Convert.ToDouble(SkorostBox.Text);
            //a = Convert.ToDouble(YgolBox.Text);
            //MaxX = V * V * Math.Sin(2 * pi * a / 180) / g;
            //MaxY = V * V * Math.Sin(pi * a / 180) * Math.Sin(pi * a / 180) / (2 * g);
            //RasstoyanieBox.Text = MaxX.ToString();
            //VisotaBox.Text = MaxY.ToString();
            //Vx = V * Math.Cos(pi * a / 180);
            //Vy = V * Math.Sin(pi * a / 180);
        }
 
        private void Start_Click(object sender, EventArgs e)
        {
            if (SkorostBox.Text != "" && YgolBox.Text != "") 
            {
                a = Convert.ToDouble(YgolBox.Text);
                if (a <= 90)
                {
                    var alpha = pi * a / 180;
                    startTime = DateTime.Now;
                    V = Convert.ToDouble(SkorostBox.Text);
                    Vx = V * Math.Cos(alpha);
                    Vy = V * Math.Sin(alpha);
                    var t = Vy / g;
                    MaxY = t * t / (g * 2);
                    MaxX = 2 * t * Vx;
                    xx = 0;
                    yy = maxHeighWindow;
                    timer1.Enabled = true;
                    Reshenie();
                }
                else
                {
                    MessageBox.Show("Угол не должен быть больше 90 градусов!");
                }
            }
            else
            {
                MessageBox.Show("Введите данные!");
            }
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            beginBall();
            ImageBox.Invalidate();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            ImageBox.Image = new Bitmap(@"Planeta.jpg");
        }
 
        private void ImageBox_Paint(object sender, PaintEventArgs e)
        {
            drawBall(e);
        }
    }
}
1
6 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 125
19.05.2014, 16:47  [ТС]
Я думала что по проге понятно задание, вобщем надо смоделировать полет тела брошенного под углом к горизонту,без учета сопротивления. Ошибка как мне кажется заключается в том,что в верхней точке полета,движение должно немного замедлятся.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
19.05.2014, 18:49
Цитата Сообщение от Nastya12 Посмотреть сообщение
Я думала что по проге понятно задание
http://segfault.kiev.ua/smart-questions-ru.html (не уверен что нужно, но всё же)
По проге может и понятно, но программисты очень любят конкретику: угадывать по коду "что хочет автор" ещё то занятие.
Цитата Сообщение от Nastya12 Посмотреть сообщение
Ошибка как мне кажется заключается в том,что в верхней точке полета,движение должно немного замедлятся.
Зубрим физику, а именно: вектора движения/ускорения, свободное падение, а также как всё это проэктировать на систему координат. Можете даже подойти к преподоваетлю по физике, он поможет с кусоком формул, которые нужно подставить в beginBall(). (Между прочем, это всё 7~8 классы.)

P.S. Если использовали мой пример, поставте интервал таймера где-то 10~20 и запустите -- должна быть более палавная анимация.

Добавлено через 5 минут
P.P.S. Если перпод спросит "чего так медленно" -- скажете что "масштаб модели" -- 1 метр на пиксель.
1
6 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 125
19.05.2014, 21:10  [ТС]
Спасибо за помощь,все переделала сама,тема закрыта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2014, 21:10
Помогаю со студенческими работами здесь

Как заставить шарик двигаться по экрану, как в невесомости?
Здравствуйте таварищи програмисты, у меня возникла идея написать прогу что бы шарик двигался по экрану как в невесомости т.е шарик должен...

как заставить двигаться окружность по траектории арки, (чтобы солнце вставало и заходило)
Подскажите пожалуйста, как заставить двигаться окружность по траектории арки, (чтобы солнце вставало и заходило)

Заставить шар двигаться по траектории
Стоит задача: нужно заставить шар двигаться по траектории. Начало в центре верхней линии PictureBox, он должен, как бы, пройти по...

Нарисовать 20-ти угольник, и заставить его двигаться по заданной траектории
Как нарисовать 20-ти угольник с помощью полигона? Добавлено через 35 минут 20-ти угольник нарисовал, как сделать что бы он двигался...

Нужно добавить кнопку, при нажатии на которую шарик перестает двигаться вправо-влево, и начинает двигаться вверх-вниз
Пожалуйста помогите переделать программу. Нужно добавить кнопку, при нажатии на которую шарик перестает двигаться вправо-влево, и начинает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru