Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 02.09.2014
Сообщений: 4

Броуновское движение (отталкивание рандомных частиц друг от друга и заданных границ)

02.09.2014, 19:14. Показов 2103. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пожалуйста помогите с написанием программы по Броуновскому движению суть в создании макета движения частит от заданной точки, в пределах экрана, движения должны быть хаотичными и цвета частиц разными, частицы должны быть абсолютно упругими и отталкиваться либо от столкновения с другими частицами либо от ударов об углы монитора. Нужно построить траектории движения частиц.
Очень нужно на проект заранее спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.09.2014, 19:14
Ответы с готовыми решениями:

Отталкивание движущихся кнопок друг об друга
Здравствуйте. Я тут писал программу, где требуется сделать кнопки, которые бегают по форме и отталкиваются от друг друга и границ. От...

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

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

5
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
02.09.2014, 19:38
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот заготовка-основы динамики тут есть
Цитата Сообщение от MX
На форме Timer1 и Shape1(Index=0)
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
Option Explicit
 'X направлен вниз (совпадает с Top, Height)
 'Y -------- влево (----------- Left, Width)
 
 Const kv As Double = 0.999 'потеря энергии при ударе
 Const dV As Double = 0.001 'потеря скорости в очередном Timer1_Timer()
 
 Const N As Long = 15
 Const D As Double = 40
 Const TI As Long = 10
 Const Z As Double = 1.000001
 
 Dim meWidth As Double, meHeight As Double
 Dim meWidthOld As Double, meHeightOld As Double
 Dim a_VX(N) As Double
 Dim a_VY(N) As Double
 Dim a_V(N) As Double
 Dim a_X(N) As Double, a_Y(N) As Double
 Dim TN As Double, TN0 As Double, tik As Long
 Dim II As Integer, JJ As Integer
 Dim vXij As Double, vYij As Double
 Dim xI As Double, yI As Double, xRel As Double, yRel As Double, xJ As Double, yJ As Double
 
 Private Sub Form_Load()
 Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double, X As Double, Y As Double, xn As Double, yn As Double
 Dim I As Integer, J As Integer
 Timer1.Enabled = False
 Me.BorderStyle = 1
 Me.Left = 0
 Me.Top = 0
 Me.Height = 9480
 Me.Width = 18090
 Me.ScaleMode = 3
 Me.BackColor = vbGreen / 1.5
 Shape1(0).Height = D
 Shape1(0).Width = D
 Shape1(0).Shape = 3 '2
 Shape1(0).BackStyle = 1
 Shape1(0).BackColor = vbYellow
 Shape1(0).BorderColor = vbYellow
 a_X(0) = Me.ScaleHeight / 2
 Shape1(0).Top = a_X(0)
 a_Y(0) = 0
 Shape1(0).Left = a_Y(0)
 a_VX(0) = 0
 a_VY(0) = 10
 a_V(0) = Sqr(a_VX(0) * a_VX(0) + a_VY(0) * a_VY(0))
 Y = Me.ScaleWidth / 2 - 3 * D
 Do
   X = Me.ScaleHeight / 2 - J * D * Z / 2
   For J = 0 To J
     I = I + 1
     Load Shape1(I)
     With Shape1(I)
      .Visible = True
      .Shape = 3
      .Width = D
      .Height = D
      a_X(I) = X
      .Top = a_X(I)
      a_Y(I) = Y
      .Left = a_Y(I)
     End With
     
     If I > N Then Exit For
     X = X + D * Z
   Next J
   Y = Y + D * Z * Sqr(3) / 2
 Loop While I < N
 
 For I = N + 1 To N + 6
   Load Shape1(I)
   With Shape1(I)
     .Visible = True
     .Shape = 4
     .BackColor = vbGreen / 2
     .BorderColor = vbBlack
     If I <= N + 2 Then
       .Width = D * 4
       .Height = Me.ScaleHeight - 2 * D
       .Top = D
       .Left = -D * 3.5 - (I = N + 2) * (Me.ScaleWidth + D * 3)
     Else
       .Width = Me.ScaleWidth / 2 - D * 1.5
       .Height = D * 4
       If I <= N + 4 Then
         .Top = -3.5 * D
         .Left = D - (I = N + 4) * (Me.ScaleWidth / 2 - D / 2)
       Else
         .Top = -D * 3.5 + (Me.ScaleHeight + D * 3)
         .Left = D - (I = N + 6) * (Me.ScaleWidth / 2 - D / 2)
       End If
     End If
   End With
 
 Next I
 
 near_Bac
 Timer1_Timer
 Timer1.Enabled = True
 End Sub
 
 Sub near_Bac()
 Dim I As Integer, J As Integer, T As Double
 Dim V As Double, xn As Double, yn As Double
 Dim dX As Double, dY As Double
 
 TN = 1.79769313486231E+308
 For I = 0 To N - 1
   For J = I + 1 To N
     vXij = a_VX(J) - a_VX(I)
     vYij = a_VY(J) - a_VY(I)
     If vXij <> 0 Or vYij <> 0 Then
       T = 1.79769313486231E+308
       dX = a_X(I) - a_X(J)
       dY = a_Y(I) - a_Y(J)
       V = Sqr(vXij * vXij + vYij * vYij)
       yn = (dX * vYij - vXij * dY) / V
       If Abs(yn) <= D Then
         xn = (dX * vXij + vYij * dY) / V
         If xn >= 0 Then T = (xn - Sqr(D * D - yn * yn)) / V
       End If
       If T < TN Then
         TN = T: II = I: JJ = J
       End If
     End If
   Next J
 Next I
 For I = 0 To N
   If a_VX(I) > 0 Then
     T = (Me.ScaleHeight - a_X(I) - D * 1.5) / a_VX(I): If T < TN Then II = I: JJ = -1: TN = T
   ElseIf a_VX(I) < 0 Then
     T = (D / 2 - a_X(I)) / a_VX(I): If T < TN Then II = I: JJ = -1: TN = T
   End If
   If a_VY(I) > 0 Then
     T = (Me.ScaleWidth - a_Y(I) - D * 1.5) / a_VY(I): If T < TN Then II = I: JJ = -2: TN = T
   ElseIf a_VY(I) < 0 Then
     T = (D / 2 - a_Y(I)) / a_VY(I): If T < TN Then II = I: JJ = -2: TN = T
   End If
 Next I
 If TN < 0 Then TN = 0
 TN0 = TN
 tik = 0
 End Sub
 
 Private Sub Timer1_Timer()
 Dim I As Long
 Dim K As Double, dX As Double, dY As Double
 Dim VIR As Double, VJR As Double
 Do
   If TN < 1 Then
       For I = 0 To N
         a_Y(I) = a_Y(I) + a_VY(I) * TN: Shape1(I).Left = a_Y(I)
         a_X(I) = a_X(I) + a_VX(I) * TN: Shape1(I).Top = a_X(I)
         If a_V(I) > 0 Then
           K = (a_V(I) - TN0 * dV) / a_V(I): If K < 0 Then K = 0
           a_V(I) = a_V(I) * K
           a_VX(I) = a_VX(I) * K
           a_VY(I) = a_VY(I) * K
         End If
       Next I
       Select Case JJ
         Case -1: a_VX(II) = -a_VX(II) * kv: a_VY(II) = a_VY(II) * kv
         Case -2: a_VY(II) = -a_VY(II) * kv: a_VX(II) = a_VX(II) * kv
         Case Else
           dX = (a_X(II) - a_X(JJ)) / D
           dY = (a_Y(II) - a_Y(JJ)) / D
           vXij = a_VX(JJ) - a_VX(II)
           vYij = a_VY(JJ) - a_VY(II)
           VIR = (dY * vYij + dX * vXij)
           VJR = (dX * vYij - vXij * dY)
           a_VX(JJ) = (a_VX(II) - VJR * dY) * kv
           a_VY(JJ) = (a_VY(II) + VJR * dX) * kv
           a_VX(II) = (a_VX(II) + VIR * dX) * kv
           a_VY(II) = (a_VY(II) + VIR * dY) * kv
           a_V(II) = Sqr(a_VX(II) * a_VX(II) + a_VY(II) * a_VY(II))
           a_V(JJ) = Sqr(a_VX(JJ) * a_VX(JJ) + a_VY(JJ) * a_VY(JJ))
       End Select
       near_Bac
   Else
     For I = 0 To N
       a_Y(I) = a_Y(I) + a_VY(I): Shape1(I).Left = a_Y(I)
       a_X(I) = a_X(I) + a_VX(I): Shape1(I).Top = a_X(I)
     Next I
     TN = TN - 1
   End If
   If TN < 1 Then
     Timer1.Interval = TN * TI
     Me.Caption = Timer1.Interval
   Else
     Timer1.Interval = TI
   End If
 Loop While Timer1.Interval = 0
 End Sub
...
2
0 / 0 / 0
Регистрация: 02.09.2014
Сообщений: 4
02.09.2014, 21:27  [ТС]
спасибо большое

Добавлено через 1 час 0 минут
даа и я забыл, нужно сделать так, что бы он отключался с клавиатуры, пожалуйста
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
03.09.2014, 08:52
Цитата Сообщение от Tesseract Посмотреть сообщение
нужно сделать так, что бы он отключался с клавиатуры
Alt+F4
1
0 / 0 / 0
Регистрация: 02.09.2014
Сообщений: 4
03.09.2014, 16:36  [ТС]
а почему он пишет,что саб не определен
0
0 / 0 / 0
Регистрация: 02.09.2014
Сообщений: 4
16.12.2014, 14:27  [ТС]
спасибо, за программный код

Добавлено через 35 секунд
большое спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2014, 14:27
Помогаю со студенческими работами здесь

Движение окон по часовой стрелке, не перекрывающих друг друга
В общем, есть такой код. Вроде работает, но если можно ещё больше упростить, подскажите как. Окно приложения занимает 1/4 экрана и...

Как сделать движение объектов относитьно друг друга на С++
Подскажите как нарисовать два объекта, чтобы один двигался, а другой стоял на мести. Не могу понять как это сделать. Пыталась с...

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

Как в PHP отделить элементы друг от друга, чтобы не ругались друг на друга?
&lt;?php $chitat = fopen('yoo.txt', 'r'); if (!$chitat) { echo 'Ошибка при открытии файла yoo.txt'; } while (false !== ($char =...

Определить, какие из заданных точек находятся на максимальном расстоянии друг от друга
Четыре точки заданы своими координатами A={a1, a2, a3, a4}, B={b1, b2, b3, b4}, C={c1, c2, c3, c4}, D={d1, d2, d3, d4}. Определить, какие...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru