Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33

Discussione: Problema Grafico

  1. #1

    Problema Grafico

    Ragazzi dopo innumerevoli peripezie, sono riuscito a creare un programma che disegni il grafico della retta dei minimi quadrati una volta calcolata la sua equazione partendo da alcune coppie di numeri reali presi da tastiera, però ho ancora alcuni dubbi e problemi che spero voi possiate aiutarmi a risolvere.
    Inizio con il postare il codice che ho scritto (tutto a mano con il blocco note):

    <%@ Import Namespace="System.Drawing" %>
    <%@ Import Namespace="System.Drawing.Imaging" %>
    <script runat="server">
    Sub Page_Load (sender As Object, e As EventArgs)
    lbll.Text = "Calcolo della retta dei minimi quadrati "
    End sub

    Sub Submit(sender as object, e as EventArgs)
    Dim valori(5,5) As double
    Dim I, Sx, Sy, Sxy, Sx2, m, q, n As double
    Dim y01, y02 As double
    Dim objBitmap As New Bitmap(200,200)
    Dim objGraphic As Graphics = Graphics.FromImage(objBitmap)
    Dim whiteBrush As New SolidBrush(Color.White)
    Dim redpen As New pen(Color.Red, 2)
    Dim blackPen As New Pen(Color.Black, 2)

    valori(1,1) = x1.text
    valori(1,2) = y1.text
    valori(2,1) = x2.text
    valori(2,2) = y2.text
    valori(3,1) = x3.text
    valori(3,2) = y3.text
    valori(4,1) = x4.text
    valori(4,2) = y4.text
    valori(5,1) = x5.text
    valori(5,2) = y5.text
    n = 5
    sx = 0
    sy = 0
    sx2 = 0
    sxy = 0
    For I = 1 to 5
    Valori(I,3) = valori(I,1) * valori(I,1)
    Valori(I,4) = valori(I,1) * Valori(I,2)
    Sx = sx + valori(I,1)
    Sy = sy + valori(I,2)
    Sx2 = sx2 + valori(I,3)
    Sxy = sxy + valori(I,4)
    Next I
    m = (n*sxy-sx*sy)/(n*sx2-(sx)*(sx))
    q = (sx2*sy-sxy*sx)/(n*sx^2-(sx)*(sx))
    If q > 0 Then
    lbl2.Text = "Risultato : Y=" & m & "X+" & q
    Else
    lbl2.Text = "Risultato : Y=" & m & "X" & q
    End if
    y01 = 195 - q
    y02 = 195 - ((195*m)+q)
    objGraphic.FillRectangle(whiteBrush, 0, 0, 200, 200)
    objGraphic.DrawLine(blackPen, New Point(0,195), New Point(195,195))
    objGraphic.DrawLine(blackPen, New Point(5,5), New Point(5,200))
    objGraphic.DrawLine(redPen, New Point(5, y01), New Point(195, y02))
    Response.ContentType = "image/gif"
    objBitmap.Save (Response.OutputStream, ImageFormat.Gif)
    End Sub
    </script>
    <html>
    <body>
    <form runat="server">



    <asp:label id="lbll" runat="server"
    forecolor="#0000FF"
    font-bold="true"/></p>
    x1: <asp:TextBox id="x1" columns="10" runat="server" />
    y1: <asp:TextBox id="y1" columns="10" runat="server" />

    x2: <asp:TextBox id="x2" columns="10" runat="server" />
    y2: <asp:TextBox id="y2" columns="10" runat="server" />

    x3: <asp:TextBox id="x3" columns="10" runat="server" />
    y3: <asp:TextBox id="y3" columns="10" runat="server" />

    x4: <asp:TextBox id="x4" columns="10" runat="server" />
    y4: <asp:TextBox id="y4" columns="10" runat="server" />

    x5: <asp:TextBox id="x5" columns="10" runat="server" />
    y5: <asp:TextBox id="y5" columns="10" runat="server" />

    <asp:Button OnClick="Submit" Text="Esegui" runat="server" />


    <asp:Label id="lbl2" runat="server" /></p>
    </form>
    </body>
    </html>
    il codice qui sopra disegna effettivamente il grafico, però solo quello, voglio dire una volta che clicco il tasto esegui la pagina si svuota completamente, viene cancellata tutta la form e resta solamente il grafico.... oltretutto non mostra neppure l'equazione che dovrebbe fare con l'IF! Qulcuno di voi sà suggerirmi come far disegnare il grafico sotto la form e sotto l'equazione della retta? inoltre visto che utilizzo il tipo dati "double" perchè mi occorrono i decimali qualcuno mi sà dire come limitare il numero di cifre dopo la virgola da prendere? perchè altrimenti quando mi scrive l'equazione della retta scrive moltissime cifre dopo la virgola ed esteticamente non è che sia il massimo..... GRAZIE ANTICIPATAMENTE A CHI MI VORRà AIUTARE!

  2. #2
    Nessuno?

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Un modo è questo:

    codice:
    <%@ Page Language="VB" Strict="false" %>
    
    <%@ Import Namespace="System.Drawing" %>
    <%@ Import Namespace="System.Drawing.Imaging" %>
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    
    function $() 
    {
        var elements = new Array();
    
        for (var i = 0; i < arguments.length; i++) 
        {
            var element = arguments[i];
            if (typeof element == 'string')
                element = document.getElementById(element);
    
            if (arguments.length == 1)
                return element;
    
            elements.push(element);
        }
    
        return elements;
    }
    
    
    function Button1_onclick() 
    {
        var s =   "&x1=" + $("x1").value
                + "&x2=" + $("x2").value
                + "&x3=" + $("x3").value
                + "&x4=" + $("x4").value
                + "&x5=" + $("x5").value
                + "&y1=" + $("y1").value
                + "&y2=" + $("y2").value
                + "&y3=" + $("y3").value
                + "&y4=" + $("y4").value
                + "&y5=" + $("y5").value;
                
        
        var v = document.getElementById("grafico");
        v.style.display = "";
        v.src = "grafico.aspx?grafico=1" + s;
        
    }
    
    // ]]>
    </script>
    
    
    <script runat="server">
        Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
            lbll.Text = "Calcolo della retta dei minimi quadrati "
            Dim grafico As String = Me.Request.QueryString("grafico")
            If grafico IsNot Nothing AndAlso grafico = "1" Then
                creaGrafico()
            End If
        End Sub
    
        Sub creaGrafico()
            Dim valori(5, 5) As Double
            Dim I, Sx, Sy, Sxy, Sx2, m, q, n As Double
            Dim y01, y02 As Double
            Dim objBitmap As New Bitmap(200, 200)
            Dim objGraphic As Graphics = Graphics.FromImage(objBitmap)
            Dim whiteBrush As New SolidBrush(Color.White)
            Dim redpen As New Pen(Color.Red, 2)
            Dim blackPen As New Pen(Color.Black, 2)
    
            valori(1, 1) = Me.Request.QueryString("x1")
            valori(1, 2) = Me.Request.QueryString("y1")
            valori(2, 1) = Me.Request.QueryString("x2")
            valori(2, 2) = Me.Request.QueryString("y2")
            valori(3, 1) = Me.Request.QueryString("x3")
            valori(3, 2) = Me.Request.QueryString("y3")
            valori(4, 1) = Me.Request.QueryString("x4")
            valori(4, 2) = Me.Request.QueryString("y4")
            valori(5, 1) = Me.Request.QueryString("x5")
            valori(5, 2) = Me.Request.QueryString("y5")
            n = 5
            Sx = 0
            Sy = 0
            Sx2 = 0
            Sxy = 0
            For I = 1 To 5
                valori(I, 3) = valori(I, 1) * valori(I, 1)
                valori(I, 4) = valori(I, 1) * valori(I, 2)
                Sx = Sx + valori(I, 1)
                Sy = Sy + valori(I, 2)
                Sx2 = Sx2 + valori(I, 3)
                Sxy = Sxy + valori(I, 4)
            Next I
            m = (n * Sxy - Sx * Sy) / (n * Sx2 - (Sx) * (Sx))
            q = (Sx2 * Sy - Sxy * Sx) / (n * Sx ^ 2 - (Sx) * (Sx))
            If q > 0 Then
                lbl2.Text = "Risultato : Y=" & m & "X+" & q
            Else
                lbl2.Text = "Risultato : Y=" & m & "X" & q
            End If
            
            
            y01 = 195 - q
            y02 = 195 - ((195 * m) + q)
            objGraphic.FillRectangle(whiteBrush, 0, 0, 200, 200)
            objGraphic.DrawLine(blackPen, New Point(0, 195), New Point(195, 195))
            objGraphic.DrawLine(blackPen, New Point(5, 5), New Point(5, 200))
            objGraphic.DrawLine(redpen, New Point(5, y01), New Point(195, y02))
            
            img.ImgWriteText(objBitmap, lbl2.Text, Brushes.Red, New Font("arial", 12, FontStyle.Regular, GraphicsUnit.Pixel), 10, 0)
            
            Response.ContentType = "image/gif"
            objBitmap.Save(Response.OutputStream, ImageFormat.Gif)
            Me.Response.End()
        End Sub
    </script>
    
    <html>
    <body>
        <form id="Form1" runat="server">
        
    
    
            <asp:Label ID="lbll" runat="server" ForeColor="#0000FF" Font-Bold="true" /></p>
        x1:
        <asp:TextBox ID="x1" Columns="10" runat="server" Text="1" />
        y1:
        <asp:TextBox ID="y1" Columns="10" runat="server"  Text="2" />
    
        x2:
        <asp:TextBox ID="x2" Columns="10" runat="server" Text="3" />
        y2:
        <asp:TextBox ID="y2" Columns="10" runat="server" Text="4" />
    
        x3:
        <asp:TextBox ID="x3" Columns="10" runat="server" Text="5" />
        y3:
        <asp:TextBox ID="y3" Columns="10" runat="server" Text="6" />
    
        x4:
        <asp:TextBox ID="x4" Columns="10" runat="server" Text="7" />
        y4:
        <asp:TextBox ID="y4" Columns="10" runat="server" Text="8" />
    
        x5:
        <asp:TextBox ID="x5" Columns="10" runat="server" Text="9" />
        y5:
        <asp:TextBox ID="y5" Columns="10" runat="server" Text="10" />
    
        <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
        
    
    
            <asp:Label ID="lbl2" runat="server" /></p>
        [img]grafico.aspx?grafico=1[/img]
        </form>
    </body>
    </html>
    In sintesi, crei un <img. Quando imposti via javascript la proprietà src, viene fatta la richiesta della pagina inviando i parametri necessarii via get. La pagina legge i parametri e restituisce il grafico.
    Non può restituire la label. Perciò ho pensato di scrivere l'equazione direttamente nel grafico.

    Io ho usato:
    img.ImgWriteText(objBitmap, lbl2.Text, Brushes.Red, New Font("arial", 12, FontStyle.Regular, GraphicsUnit.Pixel), 10, 0)

    dove img è una mia classe. Tu puoi prendere l'idea e aggiungere le istruzioni per scrivere sull'immagine

    Graphics.DrawString(testo, font, colore, x, y)

    ps. se si salva l'immagine su disco, il discorso naturalmente è diverso.
    Pietro

  4. #4
    Grazie, però io desideravo se possibile effettuare solo delle modifiche al mio codice visual basic senza usare C# o Java.... qualcuno riesce con delle semplici modifiche al codice visual basic da me postato a far visualzizare tutto il resto oltre al grafico?

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    codice:
    <%@ Page Language="VB" Strict="false" %>
    
    <%@ Import Namespace="System.Drawing" %>
    <%@ Import Namespace="System.Drawing.Imaging" %>
    
    
    <script runat="server">
        Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
            lbll.Text = "Calcolo della retta dei minimi quadrati "
            Dim grafico As String = Me.Request.QueryString("grafico")
            If grafico IsNot Nothing AndAlso grafico = "1" Then
                creaGrafico()
            End If
        End Sub
    
        Private valori(5, 5) As Double
        
        Sub creaGrafico()
            
            Dim I, Sx, Sy, Sxy, Sx2, m, q, n As Double
            Dim y01, y02 As Double
            Dim objBitmap As New Bitmap(200, 200)
            Dim objGraphic As Graphics = Graphics.FromImage(objBitmap)
            Dim whiteBrush As New SolidBrush(Color.White)
            Dim redpen As New Pen(Color.Red, 2)
            Dim blackPen As New Pen(Color.Black, 2)
            If Me.Session("valori") Is Nothing Then
                valori(1, 1) = Me.Request.Form("x1")
                valori(1, 2) = Me.Request.Form("y1")
                valori(2, 1) = Me.Request.Form("x2")
                valori(2, 2) = Me.Request.Form("y2")
                valori(3, 1) = Me.Request.Form("x3")
                valori(3, 2) = Me.Request.Form("y3")
                valori(4, 1) = Me.Request.Form("x4")
                valori(4, 2) = Me.Request.Form("y4")
                valori(5, 1) = Me.Request.Form("x5")
                valori(5, 2) = Me.Request.Form("y5")
            
            Else
                valori = DirectCast(Me.Session("valori"), Double(,))
            End If
            n = 5
            Sx = 0
            Sy = 0
            Sx2 = 0
            Sxy = 0
            For I = 1 To 5
                valori(I, 3) = valori(I, 1) * valori(I, 1)
                valori(I, 4) = valori(I, 1) * valori(I, 2)
                Sx = Sx + valori(I, 1)
                Sy = Sy + valori(I, 2)
                Sx2 = Sx2 + valori(I, 3)
                Sxy = Sxy + valori(I, 4)
            Next I
            m = (n * Sxy - Sx * Sy) / (n * Sx2 - (Sx) * (Sx))
            q = (Sx2 * Sy - Sxy * Sx) / (n * Sx ^ 2 - (Sx) * (Sx))
            If q > 0 Then
                lbl2.Text = "Risultato : Y=" & m & "X+" & q
            Else
                lbl2.Text = "Risultato : Y=" & m & "X" & q
            End If
            
            
            y01 = 195 - q
            y02 = 195 - ((195 * m) + q)
            objGraphic.FillRectangle(whiteBrush, 0, 0, 200, 200)
            objGraphic.DrawLine(blackPen, New Point(0, 195), New Point(195, 195))
            objGraphic.DrawLine(blackPen, New Point(5, 5), New Point(5, 200))
            objGraphic.DrawLine(redpen, New Point(5, y01), New Point(195, y02))
            
            If Me.Session("valori") IsNot Nothing Then
                Me.Session("valori") = Nothing
                Response.ContentType = "image/gif"
                objBitmap.Save(Response.OutputStream, ImageFormat.Gif)
                Me.Response.End()
            Else
                Me.Session("valori") = valori
                Me.Literal1.Text = "[img]a1.aspx?grafico=1[/img]"
            End If
        End Sub
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            creaGrafico()
        End Sub
        
    </script>
    
    <html>
    <body>
        <form id="Form1" runat="server">
        
    
    
            <asp:Label ID="lbll" runat="server" ForeColor="#0000FF" Font-Bold="true" /></p>
        x1:
        <asp:TextBox ID="x1" Columns="10" runat="server" Text="1" />
        y1:
        <asp:TextBox ID="y1" Columns="10" runat="server"  Text="1" />
    
        x2:
        <asp:TextBox ID="x2" Columns="10" runat="server" Text="2" />
        y2:
        <asp:TextBox ID="y2" Columns="10" runat="server" Text="4" />
    
        x3:
        <asp:TextBox ID="x3" Columns="10" runat="server" Text="3" />
        y3:
        <asp:TextBox ID="y3" Columns="10" runat="server" Text="9" />
    
        x4:
        <asp:TextBox ID="x4" Columns="10" runat="server" Text="4" />
        y4:
        <asp:TextBox ID="y4" Columns="10" runat="server" Text="16" />
    
        x5:
        <asp:TextBox ID="x5" Columns="10" runat="server" Text="5" />
        y5:
        <asp:TextBox ID="y5" Columns="10" runat="server" Text="25" />
    
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        
    
    
            <asp:Label ID="lbl2" runat="server" /></p>
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
        </form>
    </body>
    </html>
    Pietro

  6. #6
    Scusa, sono alle prime armi di programmazzione, e per me è stata una vera imrpesa costruire quel codice... non è che gentilmente mi spiegheresti le modifiche che hai apportato tu? una cosa è far funzionare un programma ma la cosa più importante ritengo sia capire il perchè funzioni

  7. #7
    Ho appena provato il tuo programma..... ho visto che bisogna cliccare due volte sul bottone la prima volta dà l'equazione e la seconda volta il grafico. Però la seconda volta effettua lo stesso lo svuotamento della pagina lasciando solo il grafico... ma non è possibile fare in modo che ad un solo clic del bottone dia l'equazione ed il grafico sotto di essa?
    esempio:

    -FORM
    -BOTTONE
    -EQUAZIONE
    -GRAFICO

    facendo in modo che se cambio le coppie di numeri e clicco di nuovo sul bottone aggiorna solamente equaizone e grafico restando sempre nella medesima pagina?

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: lo avevo provato con IE7 e sembrava andare. Adesso ho provato con Opera e va come dici tu. Prova questa modifica.
    codice:
    <%@ Page Language="VB" Strict="false" %>
    
    <%@ Import Namespace="System.Drawing" %>
    <%@ Import Namespace="System.Drawing.Imaging" %>
    
    
    <script runat="server">
        Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
            lbll.Text = "Calcolo della retta dei minimi quadrati "
            Dim grafico As String = Me.Request.QueryString("grafico")
            If grafico IsNot Nothing AndAlso grafico = "1" Then
                creaGrafico()
            End If
        End Sub
    
        Private valori(5, 5) As Double
        
        Sub creaGrafico()
            
            Dim I, Sx, Sy, Sxy, Sx2, m, q, n As Double
            Dim y01, y02 As Double
            Dim objBitmap As New Bitmap(200, 200)
            Dim objGraphic As Graphics = Graphics.FromImage(objBitmap)
            Dim whiteBrush As New SolidBrush(Color.White)
            Dim redpen As New Pen(Color.Red, 2)
            Dim blackPen As New Pen(Color.Black, 2)
            If Me.Session("valori") Is Nothing Then
                valori(1, 1) = Me.Request.Form("x1")
                valori(1, 2) = Me.Request.Form("y1")
                valori(2, 1) = Me.Request.Form("x2")
                valori(2, 2) = Me.Request.Form("y2")
                valori(3, 1) = Me.Request.Form("x3")
                valori(3, 2) = Me.Request.Form("y3")
                valori(4, 1) = Me.Request.Form("x4")
                valori(4, 2) = Me.Request.Form("y4")
                valori(5, 1) = Me.Request.Form("x5")
                valori(5, 2) = Me.Request.Form("y5")
            
            Else
                valori = DirectCast(Me.Session("valori"), Double(,))
            End If
            n = 5
            Sx = 0
            Sy = 0
            Sx2 = 0
            Sxy = 0
            For I = 1 To 5
                valori(I, 3) = valori(I, 1) * valori(I, 1)
                valori(I, 4) = valori(I, 1) * valori(I, 2)
                Sx = Sx + valori(I, 1)
                Sy = Sy + valori(I, 2)
                Sx2 = Sx2 + valori(I, 3)
                Sxy = Sxy + valori(I, 4)
            Next I
            m = (n * Sxy - Sx * Sy) / (n * Sx2 - (Sx) * (Sx))
            q = (Sx2 * Sy - Sxy * Sx) / (n * Sx ^ 2 - (Sx) * (Sx))
            If q > 0 Then
                lbl2.Text = "Risultato : Y=" & m & "X+" & q
            Else
                lbl2.Text = "Risultato : Y=" & m & "X" & q
            End If
            
            
            y01 = 195 - q
            y02 = 195 - ((195 * m) + q)
            objGraphic.FillRectangle(whiteBrush, 0, 0, 200, 200)
            objGraphic.DrawLine(blackPen, New Point(0, 195), New Point(195, 195))
            objGraphic.DrawLine(blackPen, New Point(5, 5), New Point(5, 200))
            objGraphic.DrawLine(redpen, New Point(5, y01), New Point(195, y02))
            
            If Me.Session("valori") IsNot Nothing Then
                Me.Session("valori") = Nothing
                
                Dim grafico As String = Me.Request.QueryString("grafico")
                If grafico IsNot Nothing AndAlso grafico = "1" Then
                    Response.ContentType = "image/gif"
                    objBitmap.Save(Response.OutputStream, ImageFormat.Gif)
                    Me.Response.End()
                End If
            Else
                Me.Session("valori") = valori
                Me.Literal1.Text = String.Format("[img]a1.aspx?grafico=1&{0}[/img]", DateTime.Now.Ticks)
            End If
        End Sub
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            creaGrafico()
        End Sub
        
    </script>
    
    <html>
    <body>
        <form id="Form1" runat="server">
        
    
    
            <asp:Label ID="lbll" runat="server" ForeColor="#0000FF" Font-Bold="true" /></p>
        x1:
        <asp:TextBox ID="x1" Columns="10" runat="server" Text="1" />
        y1:
        <asp:TextBox ID="y1" Columns="10" runat="server"  Text="1" />
    
        x2:
        <asp:TextBox ID="x2" Columns="10" runat="server" Text="2" />
        y2:
        <asp:TextBox ID="y2" Columns="10" runat="server" Text="4" />
    
        x3:
        <asp:TextBox ID="x3" Columns="10" runat="server" Text="3" />
        y3:
        <asp:TextBox ID="y3" Columns="10" runat="server" Text="9" />
    
        x4:
        <asp:TextBox ID="x4" Columns="10" runat="server" Text="4" />
        y4:
        <asp:TextBox ID="y4" Columns="10" runat="server" Text="16" />
    
        x5:
        <asp:TextBox ID="x5" Columns="10" runat="server" Text="5" />
        y5:
        <asp:TextBox ID="y5" Columns="10" runat="server" Text="25" />
    
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        
    
    
            <asp:Label ID="lbl2" runat="server" /></p>
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
        </form>
    </body>
    </html>
    Se funziona lo spiego, altrimenti... mi nascondo
    Pietro

  9. #9
    Nulla da fare mostra solo l'equazione della retta ma dove dovrebbe essere il grafico cè solo il simbolo di un immagine che non viene caricata.... e in quest anuova versione anche se clicco una seconda volta non lo mostra neppure in una nuova pagina.... Non ti preoccupare non ti devi nascondere mi stai gia facendo un granfavore solo nel cagarmi

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Guarda questa istruzione:

    Me.Literal1.Text = String.Format("[img]a1.aspx?grafico=1&{0}[/img]", DateTime.Now.Ticks)

    La mia pagina di prova si chiama a1.aspx

    Scrivici il nome della tua pagina.

    ps. l'ho collaudato con IE7, Firefox2 e Opera9, e va...
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.