Disegnare un cerchio con le Classi "Draw" e "Paint"

Da Gambas-it.org - Wikipedia.

Per disegnare un cerchio all'interno di una DrawingArea, è possibile utilizzare sia la Classe "Draw" che la Classe "Paint".


Disegnare un cerchio con la Classe "Draw"

La Classe Draw ci consente di disegnare un cerchio mediante il metodo ".Circle()".
Esempio:

Public Sub DrawingArea1_Draw()
 
 With Draw
   .FillStyle = Fill.Dense12
   .FillColor = Color.Red
   .Circle(100, 100, DrawingArea1.W / 6, Rad(0), Rad(360))
   .End
 End With

End

oppure anche mediante il metodo ".Ellipse()" impostando ovviamente uguali valori al 3° ed al 4° parametro:

Public Sub DrawingArea1_Draw()

 With Draw
   .FillStyle = Fill.Solid
   .FillColor = Color.Red
   .Ellipse(100, 100, DrawingArea1.W / 6, DrawingArea1.W / 6, Rad(0), Rad(360))
   .End
 End With

End

Usare il Metodo "Draw.Point()"

Conoscendo raggio e centro di una circonferenza, nonché il relativo angolo, è possibile disegnare un cerchio, o parte di esso, mediante il Metodo ".Point()".

Si provvederà, in particolare, a disegnare ciascun punto della circonferenza del cerchio, individuato da due coordinate, e che verrà così ottenuto:

punto = (x , y)

laddove le due coordinate x e y sono a loro volta così ottenute:

x = x_a + r * cosθ
y = y_o + r * sinθ

x_a e y_o sono rispettivamente ascissa e l'ordinata del centro della circonferenza;
r è il raggio della circonferenza;
θ è l'angolo corrispondente al punto da determinare e conseguentemente da disegnare.


Mostriamo di seguito un semplice codice esemplificativo, con il quale verrà disegnato punto per punto un cerchio all'interno di una DrawingArea:

Public Sub Form_Open()

 Dim x, y, x_a, y_o, r, an As Short
  
  Me.Show
   
  DrawingArea1.Cached = True
      
  x_a = 200   ' Rappresenta la distanza X dal punto 0 (angolo in alto a sinistra) della "DrawingArea"
  y_o = 200   ' Rappresenta la distanza Y dal punto 0 (angolo in alto a sinistra) della "DrawingArea"
  r = 100
   
  For an = 1 To 360   ' Rappresenta l'angolo della circonferenza
    x = x_a + r * Cos(Rad(an)) 
    y = y_o + r * Sin(Rad(an))
    Print x, y
    Wait 0.01
    With Draw
      .Begin(DrawingArea1)
      .Point(x, y)
      .End
    End With
  Next

End

Da notare che:
la seguente impostazione:

x_a + r * Cos(Rad(an)) 
y_o + r * Sin(Rad(an))

disegnerà l'arco in senso orario;
la seguente impostazione:

x_a + r * Cos(Rad(an)) 
y_o - r * Sin(Rad(an))

disegnerà l'arco in senso orario.

Provare anche le altre due possibilità:

x_a - r * Cos(Rad(an)) 
y_o - r * Sin(Rad(an))

e

x_a - r * Cos(Rad(an)) 
y_o + r * Sin(Rad(an))


Disegnare un cerchio con la Classe "Paint"

La Classe Paint ci consente di disegnare un cerchio mediante il metodo "Ellipse()".

Per ottenere un cerchio vuoto, ossia nel quale sia visibile soltanto la circonferenza, si utilizzerà anche il metodo .Stroke :

Public Sub DrawingArea1_Draw()

 With Paint
   .Brush = Paint.Color(Color.Red)
   .Ellipse(100, 10, 100, 100)
   .Stroke
   .End
 End With

End

Per ottenere invece un cerchio pieno, ossia colorato anche al suo interno, si dovrà utilizzare il metodo .Fill:

Public Sub DrawingArea1_Draw()

 With Paint
   .Brush = Paint.Color(Color.Red)
   .Ellipse(100, 10, 100, 100)
   .Fill
   .End
 End With

End


E' possibile disegnare un cerchio anche disegnandolo punto per punto mediante una formula trigonometrica:

Public Sub DrawingArea1_Draw()
 
 Dim x, y, r, t As Integer
    
  x = 100
  y = 100
  r = 100
     
  For t = 0 To 360
    Paint.FillRect(x + (r * Cos(t)), y + (r * Sin(t)), 1, 1, Color.Black)
  Next
  
  Paint.End
  
End