При генерации случайных точек на PictureBox появляются полосы - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Привет. Делаю программу для нахождения числа Пи методом Монте-Карло и столкнулся с такой проблемой: когда я генерирую случайные координаты для последующей точки и наношу её на PictureBox у меня проявляется странная закономерность. Из сгенерированных точек вырисовываются прямые, причем чем больше количество точек тем они отчетливее. Прикладываю скриншоты и код.
Листинг программы
  1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  2. Dim g As Graphics = PictureBox1.CreateGraphics
  3. g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
  4. Dim p As New Pen(Color.Black, 2)
  5. For i = 1 To 50000
  6. Dim random1 As Integer
  7. Dim random2 As Integer
  8. Randomize()
  9. random1 = 2 + Rnd() * 648
  10. Randomize()
  11. random2 = 2 + Rnd() * 648
  12. g.DrawEllipse(p, random1, random2, 1, 1)
  13. count += 1
  14. If ((random1 - 324) * (random1 - 324) + (random2 - 324) * (random2 - 324) > 105625) Then
  15. outside += 1
  16. Else
  17. inside += 1
  18. End If
  19. Next
  20. Label2.Text = count
  21. Dim pi As Single
  22. pi = inside / count
  23. Label4.Text = pi * 4
  24. End Sub
Как это можно вылечить? Я подозреваю, что проблема в генерации координат этих самых точек, так как, насколько я знаю, случайности не случайны, а генерируются по формуле.

Решение задачи: «При генерации случайных точек на PictureBox появляются полосы»

textual
Листинг программы
  1.     Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
  2.         Dim g As Graphics = PictureBox1.CreateGraphics
  3.         g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
  4.         Dim p As New Pen(Color.Black, 2)
  5.         Randomize()
  6.         For i = 1 To 50000
  7.             Dim random1 As Integer
  8.             Dim random2 As Integer
  9.             ' Randomize()
  10.             random1 = 2 + Rnd() * 648
  11.             ' Randomize()
  12.             random2 = 2 + Rnd() * 648
  13.             g.DrawEllipse(p, random1, random2, 1, 1)
  14.             count += 1
  15.             If ((random1 - 324) * (random1 - 324) + (random2 - 324) * (random2 - 324) > 105625) Then
  16.                 outside += 1
  17.             Else
  18.                 inside += 1
  19.             End If
  20.         Next
  21.         Label2.Text = count
  22.         Dim pi As Single
  23.         pi = inside / count
  24.         Label4.Text = pi * 4
  25.     End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы