[VB 2005] Random

13/09/2010 - 17:13 von Josef Morlo | Report spam
Hallo,

Es geht darum, auf einer maximierten Form Kreise zu zeichnen, mit
bestimmtem Radius und und bestimmter Anzahl, ohne gegenseitige
überschneidungen, zufàllig und ohne erkennbares Muster in der Anordnung.

Habe das mit folgendem Code probiert:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
Me.WindowState = FormWindowState.Maximized
mPointList = New List(Of Point)
mBoundsX = Me.ClientSize.Width - mRadius - mOffset 'Abstand zum Rand
mBoundsY = Me.ClientSize.Height - mRadius - mOffset
mRandomObject = New Random
SetPoints()
End Sub

Sub SetPoints()
Do While mPointList.Count <= 60
Dim pt As New Point(mRandomObject.Next(0, mBoundsX), _
mRandomObject.Next(0, mBoundsY))
If CheckIntersections(pt) Then 'Listenabgleich auf Überschneidungen
mPointList.Add(pt)
Else : mRandomObject = New Random
End If
Loop
Me.Invalidate()
End Sub

Das làuft zumindest mal, die Rechenzeit und die Anzahl der (sicherlich
überflüssig produzierten und spunghaft anwachsenden) Randominstanzen hàngt
natürlich von Radius und Anzahl der zu zeichnenden Kreise ab.

Wie könnte man das sauber lösen?

Grüße und danke für Vorschlàge
Josef Morlo
 

Lesen sie die antworten

#1 Peter Götz
13/09/2010 - 17:57 | Warnen spam
Hallo Morlo,

Es geht darum, auf einer maximierten Form Kreise
zu zeichnen, mit bestimmtem Radius



Um welche konkreten Werte handelt es sich dabei?

und und bestimmter Anzahl, ohne gegenseitige
überschneidungen, zufàllig und ohne erkennbares
Muster in der Anordnung.

Habe das mit folgendem Code probiert:

Private Sub Form1_Load _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) > Handles Me.Load

Me.WindowState = FormWindowState.Maximized
mPointList = New List(Of Point)

mBoundsX = Me.ClientSize.Width - mRadius - mOffset _
'Abstand zum Rand

mBoundsY = Me.ClientSize.Height - mRadius - mOffset
mRandomObject = New Random
SetPoints()
End Sub

Sub SetPoints()
Do While mPointList.Count <= 60
Dim pt As New Point _


(mRandomObject.Next(0, mBoundsX), _
mRandomObject.Next(0, mBoundsY))

If CheckIntersections(pt) Then _
'Listenabgleich auf Überschneidungen

mPointList.Add(pt)
Else
mRandomObject = New Random
End If
Loop
Me.Invalidate()
End Sub



Wie und wo sind mPointList, mRandomObject, mBoundsX,
mBoundsY, mRadius u. mOffset deklariert?

Wie sieht CheckIntersection() konkret aus (Code)?

Warum erzeugst Du im Else-Zweig eine neue Instanz
eines Random-Objektes?

In welchem Bereich liegen Deine konkreten Werte für mRadius
und mOffset?

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen