Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Mini Cad - Poligono.vb

Poligono.vb

Caricato da: Poggi Marco
Scarica il programma completo

  1. Public Class Poligono
  2.     Inherits Figura
  3.  
  4.     Private lati As Integer
  5.  
  6.     Public Sub New(ByVal luogo As Disegno)
  7.         MyBase.New(luogo)
  8.         lati = 3
  9.     End Sub
  10.  
  11.     Public Overrides Sub disegna(ByVal eliminaPrecedente As Boolean)
  12.         If eliminaPrecedente Then
  13.             Call cancella()
  14.         End If
  15.         Dim i As Integer
  16.         Dim alfa, passo, beta, ra As Double
  17.         Dim coordinate, punti As Tratto
  18.         coordinate = getCoordinate()
  19.         punti = New Tratto()
  20.         beta = arcoTangente(coordinate.fine.X - coordinate.inizio.X, coordinate.fine.Y - coordinate.inizio.Y)
  21.         ra = raggio(coordinate)
  22.         punti.inizio.X = coordinate.inizio.X + ra * Math.Cos(beta)
  23.         punti.inizio.Y = coordinate.inizio.Y + ra * Math.Sin(beta)
  24.         passo = (2.0 * Math.PI) / lati
  25.         foglio.pennino = pennino
  26.         For i = 1 To lati
  27.             alfa = beta + i * passo
  28.             punti.fine.X = coordinate.inizio.X + ra * Math.Cos(alfa)
  29.             punti.fine.Y = coordinate.inizio.Y + ra * Math.Sin(alfa)
  30.             foglio.linea(punti.inizio.X, punti.inizio.Y, punti.fine.X, punti.fine.Y)
  31.             punti.inizio = punti.fine
  32.         Next i
  33.     End Sub
  34.  
  35.     Public Overrides Sub cancella()
  36.         Dim ra, alfa, passo, beta As Double
  37.         Dim i As Integer
  38.         Dim punti, centro As Tratto
  39.         punti = New Tratto()
  40.         centro = GetLeVecchieCoordinate()
  41.         beta = arcoTangente(centro.fine.X - centro.inizio.X, centro.fine.Y - centro.inizio.Y)
  42.         ra = raggio(centro)
  43.         punti.inizio.X = centro.inizio.X + ra * Math.Cos(beta)
  44.         punti.inizio.Y = centro.inizio.Y + ra * Math.Sin(beta)
  45.         passo = (2.0 * Math.PI) / lati
  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.         For i = 1 To lati
  51.             alfa = beta + i * passo
  52.             punti.fine.X = centro.inizio.X + ra * Math.Cos(alfa)
  53.             punti.fine.Y = centro.inizio.Y + ra * Math.Sin(alfa)
  54.             foglio.linea(punti.inizio.X, punti.inizio.Y, punti.fine.X, punti.fine.Y)
  55.             punti.inizio = punti.fine
  56.         Next i
  57.     End Sub
  58.  
  59.     Public Overrides Function ToString() As String
  60.         Dim coordinate As Tratto
  61.         Dim r, dx, dy As Double
  62.         coordinate = getCoordinate()
  63.         dx = coordinate.fine.X - coordinate.inizio.X
  64.         dy = coordinate.fine.Y - coordinate.inizio.Y
  65.         r = Math.Pow((dx * dx + dy * dy), 0.5)
  66.         Return String.Format("Poligono di {0} lati, inscritto nel cerchio di raggio {1:f3}", lati, r)
  67.     End Function
  68.  
  69.     Private Function arcoTangente(ByVal x As Double, ByVal y As Double)
  70.         Dim risultato As Double
  71.         If x <> 0.0 Then
  72.             risultato = Math.Atan(y / x)
  73.         Else
  74.             If y >= 0 Then
  75.                 risultato = 0.5 * Math.PI
  76.             Else
  77.                 risultato = 1.5 * Math.PI
  78.             End If
  79.         End If
  80.         If x < 0 Then
  81.             risultato += Math.PI
  82.         End If
  83.         Return risultato
  84.     End Function
  85.  
  86.     Public Property numeroLati() As Integer
  87.         Get
  88.             Return lati
  89.         End Get
  90.         Set(ByVal value As Integer)
  91.             lati = value
  92.             If lati < 3 Then
  93.                 lati = 3
  94.             End If
  95.             If lati > 60 Then
  96.                 lati = 60
  97.             End If
  98.         End Set
  99.     End Property
  100.  
  101.     Private Function raggio(ByVal c As Tratto) As Double
  102.         Dim dx, dy As Double
  103.         dx = c.fine.X - c.inizio.X
  104.         dy = c.fine.Y - c.inizio.Y
  105.         Return Math.Pow(((dx * dx) + (dy * dy)), 0.5#)
  106.     End Function
  107.  
  108.     Public Overrides Function area() As Double
  109.         Dim alfa, ra As Double
  110.         alfa = Math.PI / lati
  111.         ra = raggio(getCoordinate())
  112.         Return lati * ra * ra * Math.Sin(alfa) * Math.Cos(alfa)
  113.     End Function
  114.  
  115.     Public Overrides Function perimetro() As Double
  116.         Return 2.0 * lati * raggio(getCoordinate()) * Math.Sin(Math.PI / lati)
  117.     End Function
  118.  
  119. End Class