Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Счётчик, броуновских частиц / 9 сообщений из 9, страница 1 из 1
27.07.2015, 11:00
    #39016473
Jkx
Jkx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счётчик, броуновских частиц
Добрый день.
Вот ТЗ:
Необходимо разработать ActiveX-компонент «Счетчик частиц», выполняющее подсчет числа броуновских частиц, попадающих в некоторую область, ограниченную окружностью.
Частицы находятся в движении, при прохождении заранее заданного числа частиц через область окружности, программа должна завершить свою работу, выдав соответствующее сообщение.
Свойства и внешний вид компонента должны быть разработаны таким образом, чтобы реализовывались следующие функции:
• сразу после запуска приложения в его окне активны только элементы управления группы «Установки»;
• после задания значений «Число частиц» и «Время», становятся доступными кнопки группы «Управление»;
• для корректного начала работы приложения предусмотреть установки значений по умолчанию для числа частиц и времени;
• работа приложения начинается по нажатию на кнопку «Пуск», тогда частицы начинают двигаться, а время внизу окна отсчитывается в обратную сторону;
• для очистки поля изображения вначале нажимается кнопка «Стоп» (движение частиц прекращается), а затем «Очистить»;
• учесть соударение с воображаемыми стенками, считая удар абсолютно упругим;
• если за установленное время заданное число частиц не прошло через окружность, счет частиц заканчивается и выдается соответствующее сообщение.

Никак не могу реализовать подсчёт времени и подсчёт частиц, которые прошли через окружность.
Буду Вам очень признателен за помощь.
...
Рейтинг: 0 / 0
27.07.2015, 12:05
    #39016570
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счётчик, броуновских частиц
Jkx,

какой бюджет?
...
Рейтинг: 0 / 0
27.07.2015, 12:15
    #39016585
Jkx
Jkx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счётчик, броуновских частиц
Всё на общественных началах. =)
Тут всего лишь допилить пару строк кода, но я пока не могу разобрать что к чему
...
Рейтинг: 0 / 0
27.07.2015, 14:57
    #39016825
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счётчик, броуновских частиц
Лучше задавать конкретные вопросы.
Разворачивать ваш проект, и пытаться умозрительно выяснить, что же у вас там не получается, вряд ли кто-то будет.
...
Рейтинг: 0 / 0
27.07.2015, 15:37
    #39016895
Jkx
Jkx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счётчик, броуновских частиц
Вот представлен интерфейс:

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

Ниже приведён исходный код программы.

Код: vbnet
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.
Option Explicit
Dim x As Single
Dim y As Single
Dim kol As Integer
Dim I As Integer
Dim t As Single
Const N As Long = 10
Const r = 60
Dim time As Integer

Const D As Double = 30
Dim VX(N) As Double, VY(N) As Double, V(N) As Double
Dim a_X(N) As Double, a_Y(N) As Double
Dim TN As Double, tik As Long
Dim II As Integer, JJ As Integer
Dim vXij As Double, vYij As Double
Private Sub Form_Load()
 
Show
Picture1.DrawWidth = 1
Picture1.Scale (0, 0)-(400, 400)
Picture1.Circle (196, 209), r
Dim I As Integer, J As Integer
Timer1.Enabled = False
Me.ScaleWidth = 400
Me.ScaleHeight = 400
Shape1(0).Height = D
Shape1(0).Width = D
 
a_X(0) = 1
Shape1(0).Top = a_X(1) 'X
a_Y(0) = 1
Shape1(0).Left = a_Y(1) 'Y
 
Randomize
VX(0) = Rnd * 0.5 '110
VY(0) = Rnd * 0.5 '40



For I = 1 To N
  VX(I) = Rnd * 0.5 '110
  VY(I) = Rnd * 0.5 '40
  
  Load Shape1(I)
  With Shape1(I)
   .Visible = True
   .Shape = 3
   .Width = D
   .Height = D
   a_X(I) = Int(Rnd * 300 + D) 'a_X(I - 1) + 50
   .Top = a_X(I)
   a_Y(I) = Int(Rnd * 300 + D) 'a_Y(I - 1) +D / 1.5
   .Left = a_Y(I)
  End With
Next I
kol = Val(Text1.Text)
time = Val(Text2.Text)
Text1.SetFocus
 
 
End Sub

Sub Timer1_Timer()
Dim I As Long
Dim K As Double, dX As Double, dY As Double
Dim VIR As Double, VJR As Double

  tik = tik + 1
  If tik > TN Then
    K = TN + 1 - tik
    For I = 0 To N
      a_Y(I) = a_Y(I) + VY(I) * K: Shape1(I).Left = a_Y(I)
      a_X(I) = a_X(I) + VX(I) * K: Shape1(I).Top = a_X(I)
    Next I
    Select Case JJ
      Case -1: VX(II) = -VX(II)
      Case -2: VY(II) = -VY(II)
      Case Else
        dX = (a_X(II) - a_X(JJ)) / D
        dY = (a_Y(II) - a_Y(JJ)) / D
        vXij = VX(JJ) - VX(II)
        vYij = VY(JJ) - VY(II)
        VIR = (dY * vYij + dX * vXij)
        VJR = (dX * vYij - vXij * dY)
        VX(JJ) = VX(II) - VJR * dY
        VY(JJ) = VY(II) + VJR * dX
        VX(II) = VX(II) + VIR * dX
        VY(II) = VY(II) + VIR * dY
    End Select
    near_Bac
  Else
    For I = 0 To N
      a_Y(I) = a_Y(I) + VY(I): Shape1(I).Left = a_Y(I)
      a_X(I) = a_X(I) + VX(I): Shape1(I).Top = a_X(I)
    Next I
  End If
  Timer1.Enabled = True
   Timer1.Interval = 10
End Sub
Private Sub Command1_Click(Index As Integer)
Call Timer1_Timer
End Sub
Private Sub Command3_Click(Index As Integer)
For I = 0 To N
Shape1(I).Visible = False
Next I
Timer1.Enabled = False

End Sub
Private Sub Command2_Click(Index As Integer)
Timer1.Enabled = False
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 = VX(J) - VX(I)
    vYij = VY(J) - 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
  Next J
Next I
For I = 0 To N
  If VX(I) > 0 Then
    t = (Me.ScaleHeight - a_X(I) - D) / VX(I): If t < TN Then II = I: JJ = -1: TN = t
  ElseIf VX(I) < 0 Then
    t = -a_X(I) / VX(I): If t < TN Then II = I: JJ = -1: TN = t
  End If
  If VY(I) > 0 Then
    t = (Me.ScaleWidth - a_Y(I) - D) / VY(I): If t < TN Then II = I: JJ = -2: TN = t
  ElseIf VY(I) < 0 Then
    t = -a_Y(I) / VY(I): If t < TN Then II = I: JJ = -2: TN = t
  End If
Next I
tik = 0
End Sub
...
Рейтинг: 0 / 0
27.07.2015, 16:47
    #39016992
капитанская дочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счётчик, броуновских частиц
Jkx,

что то мне подсказывает что не сам ты ваял кодину по сему и понять не могешь. угадал?
...
Рейтинг: 0 / 0
27.07.2015, 18:03
    #39017043
Jkx
Jkx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счётчик, броуновских частиц
капитанская дочка,

Совершенно верно. Поэтому и прошу помощи)
...
Рейтинг: 0 / 0
28.07.2015, 10:49
    #39017419
капитанская дочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счётчик, броуновских частиц
Jkx,

тогда тебе остается надеяться что кто то решит вникнуть в твое полотно
...
Рейтинг: 0 / 0
28.07.2015, 11:17
    #39017456
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счётчик, броуновских частиц
капитанская дочкане самнадо начать с того, чтобы разобраться как работает то, что уже есть, тогда и конкретные вопросы появятся. А то "сделайте мою работу за меня", да еще и "на общественных началах". В конце-концов, тут сначала нужно алгоритм на словах описать (скорее всего на математической основе), а превратить его в код - дело десятое.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Счётчик, броуновских частиц / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]