Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Mini Cad - Ellisse.vb

Ellisse.vb

Caricato da: Poggi Marco
Scarica il programma completo

  1. Public Class Ellisse
  2.     Inherits Figura
  3.  
  4.     Private segmenti As Integer
  5.  
  6.     Public Sub New(ByVal tavolo As Disegno)
  7.         MyBase.New(tavolo)
  8.         segmenti = 150
  9.     End Sub
  10.  
  11.     Public Overrides Sub disegna(ByVal eliminaPrecedente As Boolean)
  12.         If eliminaPrecedente Then
  13.             cancella()
  14.         End If
  15.         Dim alfa, omega, passo As Double
  16.         Dim ra As PointF
  17.         Dim punti As Tratto = New Tratto(), centro As Tratto
  18.         centro = getCoordinate()
  19.         ra = raggi(centro)
  20.         punti.inizio.X = centro.inizio.X + ra.X
  21.         punti.inizio.Y = centro.inizio.Y
  22.         omega = Math.PI * 2.1
  23.         passo = omega / segmenti
  24.         alfa = 0
  25.         foglio.pennino = pennino
  26.         While alfa <= omega
  27.             punti.fine.X = centro.inizio.X + ra.X * Math.Cos(alfa)
  28.             punti.fine.Y = centro.inizio.Y + ra.Y * Math.Sin(alfa)
  29.             foglio.linea(punti.inizio.X, punti.inizio.Y, punti.fine.X, punti.fine.Y)
  30.             punti.inizio = punti.fine
  31.             alfa += passo
  32.         End While
  33.     End Sub
  34.  
  35.     Public Overrides Sub cancella()
  36.         Dim alfa, omega, passo As Double
  37.         Dim punti As Tratto = New Tratto(), centro As Tratto
  38.         Dim ra As PointF
  39.         centro = GetLeVecchieCoordinate()
  40.         ra = raggi(centro)
  41.         punti.inizio.X = centro.inizio.X + ra.X
  42.         punti.inizio.Y = centro.inizio.Y
  43.         omega = Math.PI * 2.1
  44.         passo = omega / segmenti
  45.         alfa = 0
  46.         Dim cancellino As Pen = New Pen(Color.White, pennino.Width + 2)
  47.         cancellino.StartCap = Drawing2D.LineCap.Square
  48.         cancellino.EndCap = Drawing2D.LineCap.Square
  49.         foglio.pennino = cancellino
  50.         While alfa <= omega
  51.             punti.fine.X = centro.inizio.X + ra.X * Math.Cos(alfa)
  52.             punti.fine.Y = centro.inizio.Y + ra.Y * Math.Sin(alfa)
  53.             foglio.linea(punti.inizio.X, punti.inizio.Y, punti.fine.X, punti.fine.Y)
  54.             punti.inizio = punti.fine
  55.             alfa += passo
  56.         End While
  57.     End Sub
  58.  
  59.     Public Overrides Sub disegna()
  60.         disegna(True)
  61.     End Sub
  62.  
  63.     Public Overrides Function ToString() As String
  64.         Dim rapporto As Double
  65.         Dim coordinate As Tratto
  66.         Dim ra As PointF
  67.         coordinate = getCoordinate()
  68.         ra = raggi(coordinate)
  69.         If ra.X <> 0 Then
  70.             rapporto = ra.Y / ra.X
  71.         Else
  72.             rapporto = 0
  73.         End If
  74.         Return String.Format("Ellisse con centro ({0}; {1}) e rapporto tra gli assi {2:F3}", coordinate.inizio.X, coordinate.inizio.Y, rapporto)
  75.     End Function
  76.  
  77.     Public Overrides Function area() As Double
  78.         Dim ra As PointF
  79.         ra = raggi(getCoordinate())
  80.         Return Math.PI * ra.X * ra.Y
  81.     End Function
  82.  
  83.     Public Overrides Function perimetro() As Double
  84.         Dim ra As PointF
  85.         ra = raggi(getCoordinate())
  86.         Return Math.PI * (3.0 * (ra.X + ra.Y) - Math.Sqrt((3.0 * ra.X + ra.Y) * (ra.X + 3.0 * ra.Y)))
  87.     End Function
  88.  
  89.     Private Function raggi(ByVal coordinate As Tratto) As PointF
  90.         Dim risultato As PointF
  91.         risultato.X = Math.Abs(coordinate.fine.X - coordinate.inizio.X)
  92.         risultato.Y = Math.Abs(coordinate.fine.Y - coordinate.inizio.Y)
  93.         Return risultato
  94.     End Function
  95.  
  96. End Class