1 / 1 / 1
Регистрация: 20.02.2014
Сообщений: 46
1

Движение тела, брошенного под углом к горизонту

12.12.2016, 20:59. Показов 2812. Ответов 3
Метки нет (Все метки)

Здравствуйте было задание: построить траекторию полета тела массой 1 кг, брошенного по углом 45 градусов к горизонту с начальной скоростью 10м/c.
Нужно было реализовать на c# и доказать что решение верное. Доказать решил на mathcad. Но на выходе получаются разные графики подскажите плиз в чем беда.
Вот код:
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
class PhysicalProcesses
    {
        double weight; 
        double startSpeed; 
        double alpha; 
        double bodyRadius; 
        double viscosity; 
        double density; 
        double bodyResistance; 
        double g;
        double h; 
        double linearC; 
        double quadC; 
 
        //Контейнеры для данных
        List<double> time;
        List<double> x;
        List<double> y;
        List<double> vX;
        List<double> vY;
 
        public PhysicalProcesses()
        {
            // вес тела
            weight = 1.0;
 
            // Начальная скорость тела
            startSpeed = 10.0;
 
            // Угол, под которым было брошено тело
            alpha = 45.0;
 
            // Радиус тела (шара)
            bodyRadius = 0.2;
 
            // Динамическая вязкость среды ( воздух = 0.0182; вода = 1.002)
            //viscosity = 0;
            viscosity = 1.002;
            //viscosity = 0.0182;
            //воздух не правильно
            // Плотность среды (воздух = 1.293 ; вода = 1  ( при 4 градусах цельсия)
            density = 1;
            //density = 0.001293;
            //density = 0.0;
            // Коэффициент лобового сопротивления тела (шара)
            bodyResistance = 0.4;
 
            // Ускорение свободного падения
            g = 9.8;
 
            // Шаг по времени
            h = 0.001;
 
            calcC(bodyRadius, bodyResistance);
 
            time = new List<double>();
            x = new List<double>();
            y = new List<double>();
            vX = new List<double>();
            vY = new List<double>();
        }
 
        private void calcC(double radius, double resistance)
        {
            // Линейный коэффициент сопротивления
            linearC = 6.0 * Math.PI * viscosity * radius;
 
            // Квадратичный коэффициент сопротивления
            quadC = 0.5 * resistance * (Math.PI * radius * radius) * density;
        }
 
        public void calculate()
        {
            // Начальные значения
            double vXCurrent = startSpeed * Math.Cos(alpha);
            double vYCurrent = startSpeed * Math.Sin(alpha);
            double xCurrent = 0.0;
            double yCurrent = 0.0;
            double tCurrent = 0.0;
 
            double xCoef1, xCoef2, xCoef3, xCoef4;
            double yCoef1, yCoef2, yCoef3, yCoef4;
            double vXCoef1, vXCoef2, vXCoef3, vXCoef4;
            double vYCoef1, vYCoef2, vYCoef3, vYCoef4;
 
            do
            {
                time.Add(tCurrent);
                vX.Add(vXCurrent);
                vY.Add(vYCurrent);
                x.Add(xCurrent);
                y.Add(yCurrent);
 
 
                vXCoef1 = h * vXFunction(vXCurrent, vYCurrent);
                vYCoef1 = h * vYFunction(vXCurrent, vYCurrent);
                xCoef1 = h * vXCurrent;
                yCoef1 = h * vYCurrent;
 
                vXCoef2 = h * vXFunction(vXCurrent + vXCoef1 * 0.5, vYCurrent + vYCoef1 * 0.5);
                vYCoef2 = h * vYFunction(vXCurrent + vXCoef1 * 0.5, vYCurrent + vYCoef1 * 0.5);
                xCoef2 = h * (vXCurrent + xCoef1 * 0.5);
                yCoef2 = h * (vYCurrent + yCoef1 * 0.5);
 
                vXCoef3 = h * vXFunction(vXCurrent + vXCoef2 * 0.5, vYCurrent + vYCoef2 * 0.5);
                vYCoef3 = h * vYFunction(vXCurrent + vXCoef2 * 0.5, vYCurrent + vYCoef2 * 0.5);
                xCoef3 = h * (vXCurrent + xCoef2 * 0.5);
                yCoef3 = h * (vYCurrent + yCoef2 * 0.5);
 
                vXCoef4 = h * vXFunction(vXCurrent + vXCoef3, vYCurrent + vYCoef3);
                vYCoef4 = h * vYFunction(vXCurrent + vXCoef3, vYCurrent + vYCoef3);
                xCoef4 = h * (vXCurrent + xCoef3);
                yCoef4 = h * (vYCurrent + yCoef3);
 
                vXCurrent += 1.0 / 6.0 * (vXCoef1 + 2.0 * vXCoef2 + 2.0 * vXCoef3 + vXCoef4);
                vYCurrent += 1.0 / 6.0 * (vYCoef1 + 2.0 * vYCoef2 + 2.0 * vYCoef3 + vYCoef4);
                xCurrent += 1.0 / 6.0 * (xCoef1 + 2.0 * xCoef2 + 2.0 * xCoef3 + xCoef4);
                yCurrent += 1.0 / 6.0 * (yCoef1 + 2.0 * yCoef2 + 2.0 * yCoef3 + yCoef4);
                tCurrent += h;
            }
            while (yCurrent > 0.0);
 
            // Запись в файл
            this.writeToFile();
        }
 
        private double vXFunction(double vX, double vY)
        {
            return -1.0 * ((linearC + quadC * Math.Sqrt(vX * vX + vY * vY)) * vX) / weight;
        }
 
        private double vYFunction(double vX, double vY)
        {
            return (-1.0 * ((linearC + quadC * Math.Sqrt(vX * vX + vY * vY)) * vY) / weight) - g;
        }
 
        //Запись значений в файл
        private void writeToFile()
        {
            StreamWriter coordsFile = new StreamWriter("Координаты.txt");
            StreamWriter absoluteSpeedFile = new StreamWriter("Абсолютная скорость.txt");
            StreamWriter xSpeedFile = new StreamWriter("скорость по X.txt");
            StreamWriter ySpeedFile = new StreamWriter("скорость по Y.txt");
 
            int imageStep = (time.Count / 10000) + 1;
            for (int i = 0; i < this.time.Count; i += imageStep)
            {
                // Координаты
                coordsFile.Write(x[i].ToString());
                coordsFile.Write("\t" + y[i].ToString() + "\r\n");
 
                // Модуль вектора скорости
                absoluteSpeedFile.Write(time[i].ToString());
                absoluteSpeedFile.Write("\t" + Math.Sqrt(vX[i] * vX[i] + vY[i] * vY[i]).ToString() + "\r\n");
 
                // Скорость по оси X
                xSpeedFile.Write(time[i].ToString());
                xSpeedFile.Write("\t" + vX[i].ToString() + "\r\n");
 
                // Скорость по оси Y
                ySpeedFile.Write(time[i].ToString());
                ySpeedFile.Write("\t" + vY[i].ToString() + "\r\n");
            }
 
            coordsFile.Close();
            absoluteSpeedFile.Close();
            ySpeedFile.Close();
            xSpeedFile.Close();
        }
    }

MathCad:
Скриншот
Переформулирую вопрос.
Есть задача: тело весом 1 кг брошено по углом 45 градусом со скоростью 10м/c. Также нужно с моделировать его поле в воде и воздухе. Правильно ли я это сделал?
Миниатюры
Движение тела, брошенного под углом к горизонту  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2016, 20:59
Ответы с готовыми решениями:

Определить движение тела, брошенного под углом к горизонту
Всем доброго времени суток. Нужно решить задачу про тело, брошенное под углом к горизонту, с...

Анимация траектории тела,брошенного под углом к горизонту
Помогите,пожалуйста,в создании анимации траектории тела,брошенного под углом к горизонту.Заранее...

Модель полёта тела, брошенного под углом к горизонту
Построить в MathCad модель полёта тела, брошенного под углом к горизонту, основанную на известных...

Траектория тела, брошенного под углом к горизонту, с учетом силы сопротивления воздуха
Помогите,пожалуйста, в построении графика движения тела , брошенного под углом к горизонту, с...

3
Эксперт по математике/физике
6644 / 4999 / 2463
Регистрация: 14.01.2014
Сообщений: 10,892
13.12.2016, 20:39 2
Второе уравнение вызывает сомнение - первое слагаемое в правой части должно иметь знак, противоположный направлению ускорению свободного падения, если вертикальная скорость будет направлена вниз - иначе получается, что в вертикальном направлении ускорение получается больше ускорения свободного падения, а на самом деле ускорение должно уменьшаться.
0
1 / 1 / 1
Регистрация: 20.02.2014
Сообщений: 46
13.12.2016, 21:38  [ТС] 3
первое слагаемое вы имеете ввиду коэффициент k1?
0
Эксперт по математике/физике
6644 / 4999 / 2463
Регистрация: 14.01.2014
Сообщений: 10,892
14.12.2016, 10:27 4
Под первым слагаемым справа имеется в виду вся дробь со знаменателем m.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2016, 10:27

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

Движение тела, брошенного под углом к горизонту
Я не сильна в бейсике, но сейчас нужно написать программу, которая изобразит движение тела,...

Движение тела, брошенного под углом к горизонту
нужно выполнить задание на платформе Wolfram: движение тела, брошенного под углом к горизонту....

Движение тела , брошенного под углом к горизонту
Здравствуйте , нужно помощь в редактирование кода. Анимация движения шара, тело не летит по...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.