Attribute VB_Name = "Module1"
Public Const pi = 3.1415926538     'pi is nodig voor de hoekberekeningen
Public nieuw_figuur, wachttijd
Public geenSpiegel, hoekmarkering
Public maximaalAantal, maxstraal, aantal_hoeken


Sub tekenKaleidoscope()
Randomize             'randomgenerator

If nieuw_figuur Then
nieuw_figuur = False
maximaalAantal = 0
aantal_hoeken = Int(Rnd * 5) * 2 + 6 'scherm verdeeld in 4-14 hoeken
ii = Rnd
If ii > 0.5 Then
maxstraal = 0.9 * Form1.ScaleWidth / 2 'houdt de straal binnen de perken
Else: maxstraal = 0.9 * Form1.ScaleHeight / 2
End If
  Form1.Cls                          'maak scherm schoon
 Form1.Command2.MaskColor = Form1.BackColor
 End If
  aantalmaalherhalen = Int(Rnd * 20) + 3 'figuren worden willekeurig aantal maal herhaald
    hoekmax = Rnd * pi / aantal_hoeken '+ pi / (aantal_hoeken * 2) 'hou de figuur binnen de perken
    figuur = Int(Rnd * 3) 'kies een willekeurig figuur
    cirkelboolean = False
    lijnboolean = False
       Form1.FillStyle = 1
    Select Case figuur    'zet de juiste boolean op true
     Case 0
      cirkelboolean = True
     Case 1
      lijnboolean = True
     Case Else
      volcirkel = True
     End Select
     Form1.DrawStyle = Rnd * 6
     hoekPunt1 = Rnd * hoekmax 'hoek van het eerste lijnpunt
     hoekPunt2 = hoekPunt1 - (Rnd * hoekmax) 'hoek van tweede lijnpunt
     afstandPunt1 = Int(Rnd * maxstraal) 'afstand eerste lijnpunt
     afstandPunt2 = Int(Rnd * maxstraal) 'afstand tweede lijnpunt
     rood = Int(Rnd * 256)  'kleur figuur
     groen = Int(Rnd * 256)  'kleur figuur
     blauw = Int(Rnd * 256) 'kleur figuur
     delta1 = Rnd / 50 + 0.998 'afstandsverschil tussen herhaalde lijnpunt1
     delta2 = Rnd / 50 + 0.998 'afstandsverschil tussen herhaalde lijnpunt2
     hkdelta1 = Rnd / 10 + 1 'hoekverschil
     hkdelta2 = Rnd / 10 + 1 'hoekverschil
     deltastraal = Rnd / 10 + 0.9 'verkleiningsfaktor herhaalde cirkels
     Straal = Rnd * 300 + 50      'straal van cirkels
     For herhaalfiguur = 1 To aantalmaalherhalen 'herhaal de gekozen figuur
      maximaalAantal = maximaalAantal + 1 'om af en toe het scherm schoon te maken
      Straal = Straal * deltastraal 'verklein evt de straal
      hoekPunt1 = hoekPunt1 * hkdelta1 'vergroot hoek lijnpunt1 een beetje
      hoekPunt2 = hoekPunt2 * hkdelta2 'vergroot lijnpunt2 een beetje
      afstandPunt1 = afstandPunt1 * delta1 'vergroot afstand lijnpunt1 een beetje
      afstandPunt2 = afstandPunt2 * delta2 'vergroot afstand lijnpunt2 een beetje
      If geenSpiegel Then start = 1 Else start = -1
      For richting = start To 1 Step 2 'het uiteindelijke spiegeleffect !!
       
       For tekenhoek = 1 To aantal_hoeken 'teken nu maar de figuren
        If geenSpiegel Then tekenhoek = aantal_hoeken
        midx = Form1.ScaleWidth / 2 'zoek het midden van het scherm
        midy = Form1.ScaleHeight / 2
        
        'bepaal de x en de y waarden van de punten:
        X1 = midx + Sin(2 * pi * tekenhoek / aantal_hoeken + hoekPunt1 * richting) * afstandPunt1
        Y1 = midy + Cos(2 * pi * tekenhoek / aantal_hoeken + hoekPunt1 * richting) * afstandPunt1
        X2 = midx + Sin(2 * pi * tekenhoek / aantal_hoeken + hoekPunt2 * richting) * afstandPunt2
        Y2 = midy + Cos(2 * pi * tekenhoek / aantal_hoeken + hoekPunt2 * richting) * afstandPunt2
        If hoekmarkering Then Form1.Line (midx, midy)-(midx + Sin(2 * pi * tekenhoek / aantal_hoeken) * maxstraal, midy + Cos(2 * pi * tekenhoek / aantal_hoeken) * maxstraal), vbWhite
        If lijnboolean Then Form1.Line (X1, Y1)-(X2, Y2), RGB(rood, groen, blauw)
        If volcirkel Then
       Form1.FillColor = RGB(rood, groen, blauw)
       Form1.FillStyle = 0
          
          herhaalfiguur = aantalmaalherhalen
        End If
        If cirkelboolean Or volcirkel Then Form1.Circle (X1, Y1), Straal, RGB(rood, groen, blauw)
     Next tekenhoek
    Next richting
   Next herhaalfiguur
  Form1.Timer1.Enabled = True 'niet blijven wachten op return
End Sub

