venerdì 5 maggio 2017

Esonero I


 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


    Sub AggiustamentoTempiEMinMax(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), RettangoloRiferimento 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 Not RettangoloRiferimento.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 Then Exit 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, Rettangolo_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

    Function TrasformazioneCoordinateY(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

    Function TrasformazioneCoordinateX(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