При генерации случайных точек на PictureBox появляются полосы - Visual Basic .NET
Формулировка задачи:
Привет. Делаю программу для нахождения числа Пи методом Монте-Карло и столкнулся с такой проблемой: когда я генерирую случайные координаты для последующей точки и наношу её на PictureBox у меня проявляется странная закономерность. Из сгенерированных точек вырисовываются прямые, причем чем больше количество точек тем они отчетливее. Прикладываю скриншоты и код.
Как это можно вылечить? Я подозреваю, что проблема в генерации координат этих самых точек, так как, насколько я знаю, случайности не случайны, а генерируются по формуле.
Листинг программы
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim g As Graphics = PictureBox1.CreateGraphics
- g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
- Dim p As New Pen(Color.Black, 2)
- For i = 1 To 50000
- Dim random1 As Integer
- Dim random2 As Integer
- Randomize()
- random1 = 2 + Rnd() * 648
- Randomize()
- random2 = 2 + Rnd() * 648
- g.DrawEllipse(p, random1, random2, 1, 1)
- count += 1
- If ((random1 - 324) * (random1 - 324) + (random2 - 324) * (random2 - 324) > 105625) Then
- outside += 1
- Else
- inside += 1
- End If
- Next
- Label2.Text = count
- Dim pi As Single
- pi = inside / count
- Label4.Text = pi * 4
- End Sub
Решение задачи: «При генерации случайных точек на PictureBox появляются полосы»
textual
Листинг программы
- Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
- Dim g As Graphics = PictureBox1.CreateGraphics
- g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
- Dim p As New Pen(Color.Black, 2)
- Randomize()
- For i = 1 To 50000
- Dim random1 As Integer
- Dim random2 As Integer
- ' Randomize()
- random1 = 2 + Rnd() * 648
- ' Randomize()
- random2 = 2 + Rnd() * 648
- g.DrawEllipse(p, random1, random2, 1, 1)
- count += 1
- If ((random1 - 324) * (random1 - 324) + (random2 - 324) * (random2 - 324) > 105625) Then
- outside += 1
- Else
- inside += 1
- End If
- Next
- Label2.Text = count
- Dim pi As Single
- pi = inside / count
- Label4.Text = pi * 4
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д