Option Explicit
'Equazione
Dim stEquazione As String
'Scala
Dim Scala As Integer
Dim stAbc() As String
'Valori dell'equazione
Dim lA As Double
Dim lB As Double
Dim lC As Double
'Delta
Dim lDelta As Double
'Coordinate vertice
Dim Xvertice As Double
Dim Yvertice As Double
'Coordinate fuoco
Dim Xfuoco As Double
Dim Yfuoco As Double
'direttrice
Dim direttrice As Double
'asse di simmetria
Dim Asse As Double
Sub Punti()
Dim i As Integer
Dim X As Single
Dim Y As Single
'INIZIALIZZO IL GRAFICO
picGrafico.Scale (-Scala, Scala)-(Scala, -Scala)
picGrafico.Line (-Scala, 0)-(Scala, 0) 'asse X
picGrafico.Line (0, Scala)-(0, -Scala) 'asse Y
'FINE INIZIALIZZO IL GRAFICO
X = 1
'INIZIALIZZO LA PROGRESSBAR
ProgressBar1.Min = 0
ProgressBar1.Max = 400
'FINE INIZIALIZZAZIONE PROGRESSBAR
For i = 0 To 199
X = X + 0.05
'Sostituisco all'equazione della parabola i valori di x
Y = (lA * (X ^ 2)) + (lB * X) + lC
txtPunti.Text = txtPunti.Text & "x: " & X & " y: " & Y & vbCrLf
'Faccio i calcoli per il grafico
Select Case i
Case Is = 0
picGrafico.Line (Xvertice, Yvertice)-(X, Y)
Case Else
picGrafico.Line -(X, Y)
End Select
ProgressBar1.Value = i 'incremento
Next i
'CALCOLO IL SIMMETRICO
X = -1
For i = 200 To 400
X = X - 0.05
Y = (lA * (X ^ 2)) + (lB * X) + lC
txtPunti.Text = txtPunti.Text & "x: " & X & " y: " & Y & vbCrLf
'Faccio i calcoli per il grafico
Select Case i
Case Is = 200
picGrafico.Line (Xvertice, Yvertice)-(X, Y)
Case Else
picGrafico.Line -(X, Y)
End Select
ProgressBar1.Value = i 'incremento
Next i
'INIZIO DISEGNO ASSE DI SIMMETRIA
picGrafico.Line (Asse, -Scala)-(Asse, Scala), vbGreen
picGrafico.Print "x"
'FINE DISEGNO ASSE DI SIMMETRIA
'INIZIO DISEGNO FUOCO
picGrafico.PSet (Xfuoco, Yfuoco), vbBlack
picGrafico.CurrentX = Xfuoco
picGrafico.CurrentY = Yfuoco
'picGrafico.Print "F"
'FINE DISEGNO FUOCO
'INIZIO DISEGNO DIRETTRICE
picGrafico.Line (-Scala, direttrice)-(Scala, direttrice), vbBlack
picGrafico.CurrentX = direttrice
picGrafico.Print "y"
'FINE DISEGNO DIRETTRICE
'INIZIO DISEGNO VERTICE
picGrafico.CurrentX = Xvertice
picGrafico.CurrentY = Yvertice
picGrafico.Print "V"
'FINE DISEGNO VERTICE
End Sub
Private Sub cmdCalcola_Click()
On Error GoTo errore
Analizza
'INIZIO CALCOLO DEL VERTICE
Xvertice = -lB / (2 * lA)
Yvertice = (-(lDelta)) / (4 * lA)
'FORMULA ESTESA(-(lB ^ 2) + (4 * lA * lC)) / (4 * lA)
txtVertice.Text = "(" & Xvertice & " ; " & Yvertice & ")"
'FINE CALCOLO DEL VERTICE
'INIZIO CALCOLO DEL FUOCO
Xfuoco = -lB / (2 * lA)
Yfuoco = (1 - lDelta) / (4 * lA)
txtFuoco.Text = "(" & Xfuoco & " ; " & Yfuoco & ")"
'FINE CALCOLO DEL FUOCO
'INIZIO CALCOLO DELLA DIRETTRICE
direttrice = -(1 + lDelta) / (4 * lA)
txtDirettrice.Text = "y= " & direttrice
'FINE CALCOLO DELLA DIRETTRICE
'INIZIO CALCOLO DELL'ASSE DI SIMMETIRIA
Asse = Xvertice
txtAsse.Text = Asse
'FINE CALCOLO DELL'ASSE DI SIMMETRIA
'INIZIO A CALCOLARE I PUNTI CHE PASSANO PER L'ASSE X E Y
Dim Xa As Single
Dim Xb As Single
Dim A As Single
Dim B As Single
If lDelta = 0 Then
Xa = (lB + (Sqr(lDelta))) / (2 * lA)
txtA.Text = "A(" & Xa & ";0)"
txtB.Text = "B(0;0)"
ElseIf lDelta < 0 Then
txtA.Text = "Impossibile"
Else
Xa = (lB + (Sqr(lDelta))) / (2 * lA)
Xb = (lB - (Sqr(lDelta))) / (2 * lA)
txtA.Text = "A(" & Xa & ";0)"
txtB.Text = "B(" & Xb & ";0)"
End If
txtP.Text = "P(0;" & lC & ")"
'FINE CALCOLO PUNTI CHE PASSANO PER L'ASSE X E Y
Exit Sub
errore:
MsgBox Err.Description, vbExclamation, "ERRORE!"
End Sub
Public Sub Analizza()
'Contatore
Dim i As Integer
On Error GoTo errore
'INIZIO AD ANALIZZARE L'EQUAZIONE DELLA PARABOLA
'Assegno alla variabile il valore della casella di testo
stEquazione = txtParabola.Text
'Assegno alla variabile i valori dell'equazione della parabola divisi in tre parti (A, B, C)
stAbc = Split(stEquazione, "+")
'Elimino i tre punti a destra della parabola (X^2)
'Faccio la differenza fra la lunghezza di abc(0) - 5 (X^2))
Dim lenghtA As Byte
lenghtA = Len(stAbc(0)) - 5
lA = Left(stAbc(0), lenghtA)
'Idem per la lettera B
Dim lenghtB As Byte
lenghtB = Len(stAbc(1)) - 3
lB = Left(stAbc(1), lenghtB)
lC = stAbc(2)
'Calcolo il delta
lDelta = (lB ^ 2) + (-4 * lA * lC)
txtDelta.Text = lDelta
'FINE ANALISI DELL'EQUAZIONE DELLA PARABOLA
'Verifico il caso in cui lA è uguale a 0
'In tal caso si tratta di una retta
If lA = 0 Then MsgBox "Attenzione, si tratta di una retta!", vbInformation, "ATTENZIONE!"
Exit Sub
errore:
MsgBox Err.Description, vbExclamation, "ERRORE!"
End Sub
Private Sub cmdClear_Click()
picGrafico.Cls
End Sub
Private Sub Command1_Click()
End Sub
Private Sub cmdNuovo_Click()
mnuFileNuovo_Click
End Sub
Private Sub cmdParabola_Click()
On Error GoTo errore
'CALCOLO I PUNTI APPARTENENTI ALLA PARABOLA
Punti
'FINE CALCOLO PUNTI APPARTENENTI ALLA PARABOLA
Exit Sub
errore:
MsgBox Err.Description, vbExclamation, "ERRORE!"
End Sub
Private Sub Form_Load()
Scala = 20
lblScala.Caption = Scala
picGrafico.Scale (-Scala, Scala)-(Scala, -Scala)
End Sub
Private Sub mnuFileEsci_Click()
'Termino il programma
End
End Sub
Private Sub mnuFileNuovo_Click()
txtParabola.Text = "a(x^2)+b(x)+c"
txtVertice.Text = ""
txtFuoco.Text = ""
txtDirettrice.Text = ""
txtDelta.Text = ""
txtAsse.Text = ""
txtPunti.Text = ""
txtA = ""
txtB = ""
txtP = ""
picGrafico.Cls
Scala = 20
lblScala.Caption = Scala
txtParabola.SetFocus
End Sub
Private Sub mnuModifica10_Click()
Scala = 10
lblScala.Caption = Scala
End Sub
Private Sub mnuModifica100_Click()
Scala = 100
lblScala.Caption = Scala
End Sub
Private Sub mnuModifica20_Click()
Scala = 20
lblScala.Caption = Scala
End Sub
Private Sub mnuModifica5_Click()
Scala = 5
lblScala.Caption = Scala
End Sub
Private Sub mnuModifica50_Click()
Scala = 50
lblScala.Caption = Scala
End Sub
Private Sub picGrafico_Click()
'5200 x 3600
End Sub
Private Sub picGrafico_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
lblCoordinate.Caption = "X: " & X & "; Y: " & Y
End Sub