Public Class Cerchi
Inherits Figura
Private segmentini As Integer
Public Sub New(ByVal luogo As Disegno)
MyBase.New(luogo)
segmentini = 110
End Sub
Public Overrides Sub disegna(ByVal cancellaPrecedente As Boolean)
If cancellaPrecedente Then
cancella()
End If
Dim ra, alfa, omega, passo As Double
Dim punti As Tratto = New Tratto(), centro As Tratto
centro = getCoordinate()
ra = raggio(centro)
punti.inizio.X = centro.inizio.X + ra
punti.inizio.Y = centro.inizio.Y
omega = Math.PI * 2.1
passo = omega / segmentini
alfa = 0
foglio.pennino = pennino
While alfa <= omega
punti.fine.X = centro.inizio.X + ra * Math.Cos(alfa)
punti.fine.Y = centro.inizio.Y + ra * Math.Sin(alfa)
foglio.linea(punti.inizio.X, punti.inizio.Y, punti.fine.X, punti.fine.Y)
punti.inizio = punti.fine
alfa += passo
End While
End Sub
Public Overrides Sub cancella()
Dim ra, alfa, omega, passo As Double
Dim punti As Tratto = New Tratto(), centro As Tratto
centro = GetLeVecchieCoordinate()
ra = raggio(centro)
punti.inizio.X = centro.inizio.X + ra
punti.inizio.Y = centro.inizio.Y
omega = Math.PI * 2.1
passo = omega / segmentini
alfa = 0
Dim cancellino As Pen = New Pen(Color.White, pennino.Width + 2)
cancellino.StartCap = Drawing2D.LineCap.Square
cancellino.EndCap = Drawing2D.LineCap.Square
foglio.pennino = cancellino
While alfa <= omega
punti.fine.X = centro.inizio.X + ra * Math.Cos(alfa)
punti.fine.Y = centro.inizio.Y + ra * Math.Sin(alfa)
foglio.linea(punti.inizio.X, punti.inizio.Y, punti.fine.X, punti.fine.Y)
punti.inizio = punti.fine
alfa += passo
End While
End Sub
Public Overrides Sub disegna()
disegna(True)
End Sub
Public Overrides Function ToString() As String
Dim coordinate As Tratto = getCoordinate()
Return String.Format("Cerchio in ({0}; {1}) di raggio {2:f3}", coordinate.inizio.X, coordinate.inizio.Y, raggio(coordinate))
End Function
Private Function raggio(ByVal c As Tratto) As Double
Dim dx, dy As Double
dx = c.fine.X - c.inizio.X
dy = c.fine.Y - c.inizio.Y
Return Math.Pow(((dx * dx) + (dy * dy)), 0.5#)
End Function
Public Overrides Function area() As Double
Dim r As Double
r = raggio(getCoordinate())
Return r * r * Math.PI
End Function
Public Overrides Function perimetro() As Double
Dim r As Double
r = raggio(getCoordinate())
Return 2.0 * r * Math.PI
End Function
End Class