Sono riportati i passaggi chiave del primo esonero:
Imports System.IO
Public Class Form1
Public RettangoloRiferimento As New Rectangle(0, 0, 500, 300)
Public b As New Bitmap(1200, 600)
Public g As Graphics = Graphics.FromImage(b)
Public MinYR As Decimal = Decimal.MaxValue
Public MaxYR As Decimal = Decimal.MinValue
Public MinXR As Double = Decimal.MaxValue
Public MaxXR As Double = Decimal.MinValue
Public ListaBID As New List(Of SingolaOss)
Public ListaASK As New List(Of SingolaOss)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Application.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo(" EN-US")
Dim s As New StreamReader("C:\Users\studente11.I3S-ADID DOMAIN.000\Desktop\dati.txt")
ShowDialog
Dim o As New OpenFileDialog
o.ShowDialog()
Dim Aprifile As String = o.FileName
Dim s As New StreamReader(Aprifile)
Do While Not s.EndOfStream
Dim Record As String = s.ReadLine
If Record = "" Then Continue Do
If Record.StartsWith("#") Then Continue Do
Per rappresentare i dati della serie storica in una RichTextBox
Me.RichTextBox1.AppendText(Record & Environment.NewLine)
Dim DatiSplittati As String() = Record.Split(" ".ToCharArray, StringSplitOptions.RemoveEmptyEntries)
Dim Ora As Integer = CInt(DatiSplittati(0))
Dim Minuti As Integer = CInt(DatiSplittati(1))
Dim Secondi As Integer = CInt(DatiSplittati(2))
Dim Millisec As Integer = CInt(DatiSplittati(3))
Dim PrezzoBID As Decimal = CDec(DatiSplittati(5))
Dim PrezzoASK As Decimal = CDec(DatiSplittati(6))
Dim Istante As New Date(2010, 4, 21, Ora, Minuti, Secondi, Millisec)
Dim SingolaOssBID As New SingolaOss
With SingolaOssBID
.Istante = Istante
.Prezzo = PrezzoBID
End With
ListaBID.Add(SingolaOssBID)
Dim SingolaOssASK As New SingolaOss
With SingolaOssASK
.Istante = Istante
.Prezzo = PrezzoASK
End With
ListaASK.Add(SingolaOssASK)
Loop
Me.AggiustamentoTempiEMinMax(ListaBID, MinYR, MaxYR, MinXR, MaxXR)
Me.AggiustamentoTempiEMinMax(ListaASK, MinYR, MaxYR, MinXR, MaxXR)
grafico dei prezzi della serie storica in una PictureBox
Me.GraficoPrezzi()
End Sub
SubAggiustamentoTempiEMinMax( ListaOsservazioni As List(Of SingolaOss),ByRef MinYR As Decimal, ByRef MaxYR As Decimal, ByRef MinXR As Double, ByRef MaxXR As Double)
Dim OrigineTemporale As New Date(2010, 4, 21, 0, 0, 0, 0)
For Each oss As SingolaOss In ListaOsservazioni
oss.TempoTrascorsoDaOrigine = oss.Istante - OrigineTemporale
oss.XR = oss.TempoTrascorsoDaOrigine.TotalMilliseconds
oss.YR = oss.Prezzo
If MinYR > oss.Prezzo Then MinYR = oss.Prezzo
If MaxYR < oss.Prezzo Then MaxYR = oss.Prezzo
If MinXR > oss.XR Then MinXR = oss.XR
If MaxXR < oss.XR Then MaxXR = oss.XR
Next
End Sub
Sub CoordinateVirtualiEPlot(ListaOsservazioni As List(Of SingolaOss), RettangoloRiferim ento As Rectangle, MinYR As Decimal, MaxYR As Decimal, MinXR As Double, MaxXR As Double, g As Graphics, Penna As Pen)
Dim ListaDeiPunti As New List(Of Point)
For Each oss As SingolaOss In ListaOsservazioni
oss.XV = Me.TrasformazioneCoordinateX(oss.XR, RettangoloRiferimento, MinXR, MaxXR)
oss.YV = Me.TrasformazioneCoordinateY(oss.YR, RettangoloRiferimento, MinYR, MaxYR)
oss.Punto = New Point(oss.XV, oss.YV)
ListaDeiPunti.Add(oss.Punto)
Next
g.DrawLines(Penna, ListaDeiPunti.ToArray)
End Sub
Public X_MouseDown As Integer
Public Y_MouseDown As Integer
Public Rettangolo_MouseDown As Rectangle
Public DraggingInCorso As Boolean
Private Sub PictureBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown
If NotRettangoloRiferimento. Contains(e.X, e.Y) Then Exit Sub
X_MouseDown = e.X
Y_MouseDown = e.Y
Rettangolo_MouseDown = New Rectangle(RettangoloRiferimento.X, RettangoloRiferimento.Y, RettangoloRiferimento.Width, RettangoloRiferimento.Height)
DraggingInCorso = True
End Sub
Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
If Not DraggingInCorso ThenExit Sub
Dim SpostamentoX As Integer = e.X - X_MouseDown
Dim SpostamentoY As Integer = e.Y - Y_MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
RettangoloRiferimento = New Rectangle(Rettangolo_MouseDown.X + SpostamentoX, Rettangolo_MouseDown.Y + SpostamentoY, _
Rettangolo_MouseDown.Width, Rettangolo_MouseDown.Height)
ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
RettangoloRiferimento = New Rectangle(Rettangolo_MouseDown.X, Rettangolo_MouseDown.Y, Rettan golo_MouseDown.Width + SpostamentoX, Rettangolo_MouseDown.Height + SpostamentoY)
End If
Me.GraficoPrezzi()
End Sub
Private Sub PictureBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseUp
DraggingInCorso = False
End Sub
Sub GraficoPrezzi()
g.Clear(Color.White)
Dim PennaRettangolo As New Pen(Brushes.Black, 3)
g.DrawRectangle(PennaRettangolo, RettangoloRiferimento)
Me.CoordinateVirtualiEPlot(ListaBID, RettangoloRiferimento, MinYR, MaxYR, MinXR, MaxXR, g, Pens.Blue)
Me.CoordinateVirtualiEPlot(ListaASK, RettangoloRiferimento, MinYR, MaxYR, MinXR, MaxXR, g, Pens.Yellow)
Me.AsseOrdinate(RettangoloRiferimento, MinYR, MaxYR, g)
Me.PictureBox1.Image = b
End Sub
FunctionTrasformazioneCoordinateY( reale As Decimal, RettangoloRiferimento As Rectangle, MinYR As Decimal, MaxYR As Decimal)
Dim Yvirtuale As Integer = CInt(RettangoloRiferimento.Height - (reale - MinYR) / (MaxYR - MinYR) * RettangoloRiferimento.Height + RettangoloRiferimento.Y)
Return Yvirtuale End Function
FunctionTrasformazioneCoordinateX( reale As Decimal, RettangoloRiferimento As Rectangle, MinXR As Double, MaxXR As Double)
Dim Xvirtuale As Integer = CInt((reale - MinXR) / (MaxXR - MinXR) * RettangoloRiferimento.Width + RettangoloRiferimento.X)
Return Xvirtuale
End Function
ASSI CARTESIANI
Sub AsseOrdinate(RettangoloRiferimento As Rectangle, MinYR As Decimal, MaxYR As Decimal, g As Graphics)
g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
g.DrawLine(Pens.Aquamarine, New Point(RettangoloRiferimento.X, RettangoloRiferimento.Y + RettangoloRiferimento.Height), New Point(RettangoloRiferimento.X, RettangoloRiferimento.Y))
g.DrawLine(Pens.Aquamarine, New Point(RettangoloRiferimento.X + RettangoloRiferimento.Width, RettangoloRiferimento.Y + RettangoloRiferimento.Height), New Point(RettangoloRiferimento.X, RettangoloRiferimento.Y + RettangoloRiferimento.Height))
Dim Yvirtuale As Integer
Dim Xvirtuale As Integer
For a = MinYR To MaxYR Step (MaxYR - MinYR) / 10
Yvirtuale = Me.TrasformazioneCoordinateY(a, RettangoloRiferimento, MinYR, MaxYR)
g.DrawLine(Pens.BlueViolet, New Point(RettangoloRiferimento.X - 5, Yvirtuale), New Point(RettangoloRiferimento.X + 5, Yvirtuale))
Dim FontUsato As New Font("arial", 14, FontStyle.Italic, GraphicsUnit.Pixel)
Dim s As SizeF = g.MeasureString(a, FontUsato)
g.DrawString(a, FontUsato, Brushes.BlueViolet, New Point(RettangoloRiferimento.X - s.Width * 1 - 5, Yvirtuale - s.Height * 0.5))
Next
For a = MinXR To MaxXR Step (MaxXR - MinXR) / 10
Xvirtuale = Me.TrasformazioneCoordinateX(a, RettangoloRiferimento, MinXR, MaxXR)
g.DrawLine(Pens.BlueViolet, New Point(Xvirtuale, RettangoloRiferimento.Height + RettangoloRiferimento.Y - 5), New Point(Xvirtuale, RettangoloRiferimento.Height + RettangoloRiferimento.Y + 5))
Dim FontUsato As New Font("arial", 14, FontStyle.Italic, GraphicsUnit.Pixel)
Dim s As SizeF = g.MeasureString(a, FontUsato)
g.DrawString(a, FontUsato, Brushes.BlueViolet, New Point(Xvirtuale - s.Width * 0.5, RettangoloRiferimento.Height + RettangoloRiferimento.Y + s.Height * 1))
Next
End Sub
End Class
Nessun commento:
Posta un commento