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

Da Gambas-it.org - Wikipedia.

Conoscendo raggio e centro di una circonferenza, nonché il relativo angolo, è possibile disegnare un cerchio, o parte di esso, senza dover utilizzare necessariamente le classi Draw o Paint.

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))