Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
bmstu-team
 Аватар для antonboom
301 / 136 / 91
Регистрация: 10.01.2012
Сообщений: 420
Записей в блоге: 10

Построить график тела, брошенного под углом к горизонту с автоподбором масштаба и меток

23.12.2012, 13:34. Показов 2313. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, котята.
Есть приблизительный код Апостроффа, как его переделать только в отображение первой четверти и добавить проставление меток?
на форме есть три textbox'а, commandbutton и picturebox
И еще, как включить перерисовку при перетаскивании? забыл функцию: Drawчто-то там = True
Visual Basic
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
 Option Explicit
 
 Private Sub Command1_Click()
   Dim MinX As Double
   Dim MaxX As Double
   Dim MinY As Double
   Dim MaxY As Double
   Dim dx As Double
   Dim x1 As Double
   Dim x2 As Double
   Dim y1 As Double
   Dim y2 As Double
 
   Picture1.ScaleMode = vbPixels
   Picture1.BackColor = RGB(255, 255, 255)
Show
 
   'Çäåñü çàäàéòå äèàïàçîí ïî X
   MinX = -1 'ìèíèìóì
   MaxX = 10  'ìàêñèìóì
   dx = (MaxX - MinX) / ScaleWidth 'Øàã X/Pixel
   'Èùåì ìèíèìàëüíîå è ìàêñèìàëüíîå çíà÷åíèÿ ô-öèè â äèàïàçîíå
   MinY = F(MinX)
   MaxY = F(MaxX) 'çäåñü ïîìåíÿë ñ ìèí
   For x1 = MinX To MaxX Step dx
     If MinY > F(x1) Then MinY = F(x1)
     If MaxY < F(x1) Then MaxY = F(x1)
   Next x1
   'Ïåðåíàñòðàèâàåì ScaleMode îêíà
   Picture1.ScaleLeft = MinX
   Picture1.ScaleWidth = MaxX - MinX
   Picture1.ScaleTop = MaxY
   Picture1.ScaleHeight = MinY - MaxY
   'Îòîáðàæàåì îñè êîîðäèíàò
   Picture1.Line (MinX, 0)-(MaxX, 0), RGB(0, 0, 0)
   Picture1.Line (0, MinY)-(0, MaxY), RGB(0, 0, 0)
   'Ñòðîèì ãðàôèê
   For x1 = MinX To MaxX Step dx
     x2 = x1 + dx
     y1 = F(x1)
     y2 = F(x2)
     Picture1.Line (x1, y1)-(x2, y2), RGB(0, 0, 255)
   Next x1
    End Sub
 
 Private Function F(ByVal x As Double) As Double
   Dim g As Variant
   Dim Vo As Variant
   Dim al As Variant
   Const TO_RAD = 3.14159265358979 / 180
   
If g1(0).Text <> "" Then
g = Val(g1(0).Text) 'óñêîðåíèå
End If
If Vo1(1).Text <> "" Then
Vo = Val(Vo1(1).Text) 'íà÷àëüíàÿ ñêîðîñòü
End If
If Al1(1).Text <> "" Then
al = Val(Al1(1).Text) 'óãîë
End If
 
   F = x * Tan(al * TO_RAD) - (g * x * x) / (2 * Vo * Vo * Cos(al * TO_RAD) * Cos(al * TO_RAD))
    End Function
Cпасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2012, 13:34
Ответы с готовыми решениями:

Полет тела, брошенного под углом к горизонту
Реализация модели «Полет тела, брошенного под углом к горизонту» Помогите,пожалуйста, переделать код на Паскаль ABC. Program Pod...

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

Движение тела, брошенного под углом к горизонту
Здравствуйте было задание: построить траекторию полета тела массой 1 кг, брошенного по углом 45 градусов к горизонту с начальной скоростью...

4
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
26.12.2012, 21:48
Цитата Сообщение от antonboom Посмотреть сообщение
как включить перерисовку при перетаскивании?
Visual Basic
1
AutoRedraw = True
Цитата Сообщение от antonboom Посмотреть сообщение
Есть приблизительный код Апостроффа
Дай ссылку на оригинал

Цитата Сообщение от antonboom Посмотреть сообщение
на форме есть три textbox'а, commandbutton и picturebox
с экзотическими именами Vo1(?), Al1(?) - antonboom, Ваш исходный код дополните приложенным (запакованным в ZIP) проектом,
возможно, отвечающие не добавят своих багов в ответе?
1
bmstu-team
 Аватар для antonboom
301 / 136 / 91
Регистрация: 10.01.2012
Сообщений: 420
Записей в блоге: 10
26.12.2012, 21:57  [ТС]
оригинал
Вложения
Тип файла: zip хелп.zip (7.0 Кб, 55 просмотров)
0
30.01.2013, 14:46  [ТС]

Не по теме:

спам,
чтобы поднять тему последний разок.

0
bmstu-team
 Аватар для antonboom
301 / 136 / 91
Регистрация: 10.01.2012
Сообщений: 420
Записей в блоге: 10
02.02.2013, 23:26  [ТС]
Вдруг кому будет интересно.
Решил поставленную задачу наложением условий на одну из основных величин, используемых при построении графика движения тела, брошенного под углом к горизонту, а именно скорости.
Код довольно тупой простой: для каждого диапазона скоростей *свой* график
Кликните здесь для просмотра всего текста
Visual Basic
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
Public Sub grafic()
Dim al, Vo, t As Variant
Dim Lt, Hm As Single
Dim Y, X As Double
Const TO_RAD As Single = 3.14159265358979 / 180
Const g As Single = 9.8154
Form1.Picture1.FillStyle = 0
Dim i As Single
 
If Form1.Vo1(1).Text <> "" Then
 Vo = Val(Form1.Vo1(1).Text) 'íà÷àëüíàÿ ñêîðîñòü
End If
If Form1.T1(1).Text <> "" Then
 t = Val(Form1.T1(1).Text)   'âðåìÿ ïîëåòà
End If
 If Form1.Al1(1).Text <> "" Then
 al = Val(Form1.Al1(1).Text) 'óãîë
End If
 
 If Not IsEmpty(al) And Not IsEmpty(Vo) And Not IsEmpty(t) Then
Lt = Form1.L112.Text 'äàëüíîñòü ïîëåòà
Hm = Form1.Hm1(1).Text 'ìàêñèìàëüíàÿ âûñîòà
 
 
                                                If Vo > 0 And Vo <= 5 Then
Call cleargraf
 
For i = 0 To 10 Step 0.0001
Y = (Vo) * Sin(al * TO_RAD) * i - ((9.8 * i * i) / 2)
X = (Vo) * Cos(al * TO_RAD) * i
Form1.Picture1.PSet (X, Y), vbRed
Next i
 
Form1.Picture1.Circle (Lt / 2, Hm), 0.015, vbYellow
Form1.Picture1.Print Hm
 
Form1.Picture1.Circle (Lt, 0), 0.015, vbBlue
 
Form1.Picture1.PSet (Lt, 0.25), vbWhite
Form1.Picture1.Print Lt
 
                                        ElseIf Vo > 5 And Vo <= 10 Then
Form1.Picture1.Scale (0, 5)-(11, -0.5)
Call cleargraf
 
For i = 0 To (t + 4) Step 0.0001
Y = (Vo) * Sin(al * TO_RAD) * i - ((9.8 * i * i) / 2)
X = (Vo) * Cos(al * TO_RAD) * i
Form1.Picture1.PSet (X, Y), vbRed
Next i
 
Form1.Picture1.Circle (Lt / 2, Hm), 0.05, vbYellow
Form1.Picture1.Print Hm
 
Form1.Picture1.Circle (Lt, 0), 0.05, vbBlue
 
Form1.Picture1.PSet (Lt, 0.7), vbWhite
Form1.Picture1.Print Lt
                                    ElseIf Vo > 10 And Vo <= 20 Then
                                    
Form1.Picture1.Scale (0, 21)-(41, -3)
Call cleargraf
 
For i = 0 To (t + 10) Step 0.0001
Y = (Vo) * Sin(al * TO_RAD) * i - ((9.8 * i * i) / 2)
X = (Vo) * Cos(al * TO_RAD) * i
Form1.Picture1.PSet (X, Y), vbRed
Next i
 
Form1.Picture1.Circle (Lt / 2, Hm), 0.15, vbYellow
Form1.Picture1.Print Hm
 
Form1.Picture1.Circle (Lt, 0), 0.15, vbBlue
 
Form1.Picture1.PSet (Lt, 2), vbWhite
Form1.Picture1.Print Lt
                                    ElseIf Vo > 20 And Vo <= 50 Then
Form1.Picture1.Scale (0, 5)-(5, -1)
Call cleargraf
 
For i = 0 To (t + 10) Step 0.0001
Y = (Vo) * Sin(al * TO_RAD) * i - ((9.8 * i * i) / 2)
X = (Vo) * Cos(al * TO_RAD) * i
Form1.Picture1.PSet (X / 52, Y / 26), vbRed
Next i
 
Form1.Picture1.Circle (Lt / 104, Hm / 26), 0.025, vbYellow
Form1.Picture1.Print Hm
 
Form1.Picture1.Circle (Lt / 52, 0), 0.025, vbBlue
 
Form1.Picture1.PSet (Lt / 52, 0.5), vbWhite
Form1.Picture1.Print Lt
                                    
                                    ElseIf Vo > 50 And Vo <= 100 Then
Form1.Picture1.Scale (0, 5)-(5, -1)
Call cleargraf
 
For i = 0 To (t + 10) Step 0.0001
Y = (Vo) * Sin(al * TO_RAD) * i - ((9.8 * i * i) / 2)
X = (Vo) * Cos(al * TO_RAD) * i
Form1.Picture1.PSet (X / 304, Y / 102), vbRed
Next i
 
Form1.Picture1.Circle (Lt / 608, Hm / 102), 0.025, vbYellow
Form1.Picture1.Print Hm
 
Form1.Picture1.Circle (Lt / 304, 0), 0.025, vbBlue
 
Form1.Picture1.PSet (Lt / 304, 0.5), vbWhite
Form1.Picture1.Print Lt
                                    ElseIf Vo > 100 And Vo <= 500 Then
Form1.Picture1.Scale (0, 20)-(25, -3)
Call cleargraf
 
For i = 0 To (t + 10) Step 0.0001
Y = (Vo) * Sin(al * TO_RAD) * i - ((9.8 * i * i) / 2)
X = (Vo) * Cos(al * TO_RAD) * i
Form1.Picture1.PSet (X / 1020, Y / 637), vbRed
Next i
 
Form1.Picture1.Circle (Lt / 2040, Hm / 637), 0.1, vbYellow
Form1.Picture1.Print Hm
 
Form1.Picture1.Circle (Lt / 1020, 0), 0.1, vbBlue
 
Form1.Picture1.PSet (Lt / 1020, 3), vbWhite
Form1.Picture1.Print Lt
                                     ElseIf Vo > 500 And Vo <= 1000 Then
 
Form1.Picture1.Scale (0, 200)-(204, -20)
Call cleargraf
 
For i = 0 To (t + 10) Step 0.0001
Y = (Vo) * Sin(al * TO_RAD) * i - ((9.8 * i * i) / 2)
X = (Vo) * Cos(al * TO_RAD) * i
Form1.Picture1.PSet (X / 1500, Y / 255), vbRed
Next i
 
Form1.Picture1.Circle (Lt / 3000, Hm / 255), 1, vbYellow
Form1.Picture1.Print Hm
 
Form1.Picture1.Circle (Lt / 1500, 0), 1, vbBlue
 
Form1.Picture1.PSet (Lt / 1500, 20), vbWhite
Form1.Picture1.Print Lt
 
End If
Else: MsgBox ("Äëÿ ïîñòðîåíèÿ ãðàôèêà ìèíèìóì: íà÷àëüíàÿ ñêîðîñòü Vo," & vbCrLf & " óãîë alfa, óñêîðåíèå ñâîáîäíîãî ïàäåíèÿ g, âðåìÿ ïîë¸òà T")
End If
End Sub

Где модуль cleargraf:
Кликните здесь для просмотра всего текста

Visual Basic
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
Public Sub cleargraf()
 
Dim Vo As Double
Dim i As Single
 
Form1.Picture1.FillStyle = 0
 
If Form1.Vo1(1).Text <> "" Then
 Vo = Val(Form1.Vo1(1).Text) 'íà÷àëüíàÿ ñêîðîñòü
End If
 
                                        If Vo <= 5 Then
                                        Form1.Picture1.Cls
'îñü X
Form1.Picture1.Scale (0, 2)-(3, -0.5)
Form1.Picture1.Line (0, 0)-(3, 0)
For i = 0 To 3 Step 0.5
Form1.Picture1.Circle (i, 0), 0.015, vbRed
Form1.Picture1.Print i
Next i
 
'îñü Y
Form1.Picture1.Line (0, -0.5)-(0, 2)
For i = -0.5 To 2 Step 0.5
Form1.Picture1.Circle (0, i), 0.005, vbRed
Form1.Picture1.Print i
Next i
 
                                        ElseIf Vo > 5 And Vo <= 10 Then
                                        Form1.Picture1.Cls
Form1.Picture1.Cls
Form1.Picture1.Scale (0, 5)-(11, -0.5)
'îñü X
Form1.Picture1.Line (0, 0)-(11, 0)
For i = 0 To 11
Form1.Picture1.Circle (i, 0), 0.05, vbRed
Form1.Picture1.Print i
Next i
 
'îñü Y
Form1.Picture1.Line (0, -0.5)-(0, 5)
For i = -0.5 To 5 Step 0.5
Form1.Picture1.Circle (0, i), 0.05, vbRed
Form1.Picture1.Print i
Next i
                                    ElseIf Vo > 10 And Vo <= 20 Then
                                    Form1.Picture1.Cls
Form1.Picture1.Scale (0, 21)-(41, -3)
'îñü X
Form1.Picture1.Line (0, 0)-(41, 0)
For i = 0 To 41 Step 5
Form1.Picture1.Circle (i, 0), 0.15, vbRed
Form1.Picture1.Print i
Next i
 
'îñü Y
Form1.Picture1.Line (0, -3)-(0, 21)
For i = -3 To 21 Step 3
Form1.Picture1.Circle (0, i), 0.15, vbRed
Form1.Picture1.Print i
Next i
                                    ElseIf Vo > 20 And Vo <= 50 Then
                                    Form1.Picture1.Cls
Form1.Picture1.Scale (0, 5)-(5, -1)
'îñü X
Form1.Picture1.Line (0, 0)-(5, 0)
For i = 0 To 5 Step 0.5
Form1.Picture1.Circle (i, 0), 0.025, vbRed
Form1.Picture1.Print i * 52
Next i
 
'îñü Y
Form1.Picture1.Line (0, -1)-(0, 5)
For i = -1 To 5
Form1.Picture1.Circle (0, i), 0.025, vbRed
Form1.Picture1.Print i * 26
Next i
                                   
                                    ElseIf Vo > 50 And Vo <= 100 Then
                                    Form1.Picture1.Cls
Form1.Picture1.Scale (0, 5)-(5, -1)
'îñü X
Form1.Picture1.Line (0, 0)-(5, 0)
For i = 0 To 5 Step 0.5
Form1.Picture1.Circle (i, 0), 0.025, vbRed
Form1.Picture1.Print i * 304
Next i
 
'îñü Y
Form1.Picture1.Line (0, -1)-(0, 5)
For i = -1 To 5
Form1.Picture1.Circle (0, i), 0.025, vbRed
Form1.Picture1.Print i * 102
Next i
                                    ElseIf Vo > 100 And Vo <= 500 Then
                                    Form1.Picture1.Cls
Form1.Picture1.Scale (0, 20)-(25, -3)
'îñü X
Form1.Picture1.Line (0, 0)-(25, 0)
For i = 0 To 25 Step 3
Form1.Picture1.Circle (i, 0), 0.1, vbRed
Form1.Picture1.Print i * 1020
Next i
 
'îñü Y
Form1.Picture1.Line (0, -3)-(0, 20)
For i = 0 To 20 Step 3
Form1.Picture1.Circle (0, i), 0.1, vbRed
Form1.Picture1.Print i * 637
Next i
                                     ElseIf Vo > 500 And Vo <= 1000 Then
                                     Form1.Picture1.Cls
Form1.Picture1.Scale (0, 200)-(204, -20)
'îñü X
Form1.Picture1.Line (0, 0)-(204, 0)
For i = 0 To 204 Step 30
Form1.Picture1.Circle (i, 0), 1, vbRed
Form1.Picture1.Print i * 1500
Next i
 
'îñü Y
Form1.Picture1.Line (0, -20)-(0, 200)
For i = 0 To 200 Step 30
Form1.Picture1.Circle (0, i), 1, vbRed
Form1.Picture1.Print i * 255
Next i
End If
End Sub


В идеале наложить еще условия и для второй величины - угла - в каждое условие скорости . Для диапазонов (0-30),(30-60),(60-90),
но это еще более муторно удлиняет код, хотя скорее всего так и сделаю.
Вот как то так)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.02.2013, 23:26
Помогаю со студенческими работами здесь

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

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

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

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

Найти скорость тела, брошенного под углом к горизонту
№1. Тело брошено под углом \alpha=30 градусов к горизонту с начальной скоростью, равной 10 м/с. Через время 1 с после начала движения...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru