none
Espressioni matematiche

    Question

  • Ho trovato un vecchio post a questo link che specifica il problema:

    io ho un'espressione matematica (come per esempio sqrt(2^3+2)) ho già trovato come trovarne il risultato, ma vorrei che, anzichè scrivere sqrt, il computer facesse la radice "disegnata" come la si scrive su un quaderno.

    Oppure, anche delle frazioni.

    Avete suggerimenti per fare ciò?

    Ringrazio per tutte le risposte.

    Saluti

    Ps. Uso Vs.net 2008 e .net framework 3.5


    Giammi http:\\teamprogramma.weebly.com!
    Saturday, March 26, 2011 7:03 PM

Answers

  • Ciao Giammi potresti usare questa libreria includendo un control WebBrowser per il rendering.

    http://www.mathjax.org/

    La libreria in questione gira su tutti i browser, nel nostro caso WebBrowser sarà in IE, e va bene. Infatti è supportato dalla versione 6.0. 

    E' possibile da .NET pubblicare una istanza di un oggetto che poi userai dal browser come se fosse in Javascript 

    Usa questo codice:

    VB.NET:

    Public Class Form1
    
      <System.Runtime.InteropServices.ComVisible(True)>
      Public Class MathRenderContext
    
        Private mExpression As String
    
        Public Property Expression As String
          Get
            Return mExpression
          End Get
          Set(ByVal value As String)
            mExpression = value
          End Set
        End Property
    
        Public Sub New(ByVal expression As String)
          Me.Expression = expression
        End Sub
      End Class
    
      ''' <summary>
      ''' Returns the path for HTML files
      ''' </summary>
      ''' <returns></returns>
      ''' <remarks></remarks>
      Private Function GetHTMLRoot() As String
    
        Return IO.Path.GetDirectoryName(Application.ExecutablePath)
    
      End Function
    
      Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
        WebBrowser1.ObjectForScripting = New MathRenderContext("\sqrt{a+b+c}")
        WebBrowser1.Navigate(New Uri(IO.Path.Combine(GetHTMLRoot(), "HTML/MathRender.htm")))
    
      End Sub
    End Class
    
    

    HTML:

    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <!--<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />-->
    
      <title>Render Math</title>
    
      <script type="text/x-mathjax-config">
       MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
      </script>
    
      <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
    
      <script type="text/javascript" >
        function loadExpression() {
          var expression = window.external.Expression;
                
          var divExpressionContent = MathJax.HTML.Element(
                  "div", 
                  {id: "divExpressionContent", style: { padding: "5px" }}, 
                  [ "$" + expression + "$" ]
                );
    
          // append to parent div
          var divExpression = document.getElementById("divExpression"); 
          divExpression.appendChild(divExpressionContent);
        }
      </script>
    </head>
    <body onload="loadExpression()">
      <div id="divExpression" ></div>
    </body>
    </html>
    
    

    Il risultato è proprio quello che cerchi... e puoi rappresentare espressioni MOLTO complesse.

    Have fun.

    CIAO


    Adriano
    Tuesday, March 29, 2011 8:33 PM

All replies

  • Ciao Giami,

    per far apparire il simbolo 'radice' puoi utilizzare questo spezzone di codice :

    txtSquareRoot.Text = Char.ConvertFromUtf32(Integer.Parse("221A", Globalization.NumberStyles.HexNumber))
    

    Ciao

     


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    Sunday, March 27, 2011 7:32 PM
  • Ciao Giami,

    per far apparire il simbolo 'radice' puoi utilizzare questo spezzone di codice :

    txtSquareRoot.Text = Char.ConvertFromUtf32(Integer.Parse("221A", Globalization.NumberStyles.HexNumber))
    

    Ciao

     


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    Io intendevo, scrivere i numeri sotto radice. Comunque grazie lo stesso!!
    Giammi http:\\teamprogramma.weebly.com!
    Monday, March 28, 2011 8:42 PM
  • Ciao Giammi potresti usare questa libreria includendo un control WebBrowser per il rendering.

    http://www.mathjax.org/

    La libreria in questione gira su tutti i browser, nel nostro caso WebBrowser sarà in IE, e va bene. Infatti è supportato dalla versione 6.0. 

    E' possibile da .NET pubblicare una istanza di un oggetto che poi userai dal browser come se fosse in Javascript 

    Usa questo codice:

    VB.NET:

    Public Class Form1
    
      <System.Runtime.InteropServices.ComVisible(True)>
      Public Class MathRenderContext
    
        Private mExpression As String
    
        Public Property Expression As String
          Get
            Return mExpression
          End Get
          Set(ByVal value As String)
            mExpression = value
          End Set
        End Property
    
        Public Sub New(ByVal expression As String)
          Me.Expression = expression
        End Sub
      End Class
    
      ''' <summary>
      ''' Returns the path for HTML files
      ''' </summary>
      ''' <returns></returns>
      ''' <remarks></remarks>
      Private Function GetHTMLRoot() As String
    
        Return IO.Path.GetDirectoryName(Application.ExecutablePath)
    
      End Function
    
      Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
        WebBrowser1.ObjectForScripting = New MathRenderContext("\sqrt{a+b+c}")
        WebBrowser1.Navigate(New Uri(IO.Path.Combine(GetHTMLRoot(), "HTML/MathRender.htm")))
    
      End Sub
    End Class
    
    

    HTML:

    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <!--<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />-->
    
      <title>Render Math</title>
    
      <script type="text/x-mathjax-config">
       MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
      </script>
    
      <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
    
      <script type="text/javascript" >
        function loadExpression() {
          var expression = window.external.Expression;
                
          var divExpressionContent = MathJax.HTML.Element(
                  "div", 
                  {id: "divExpressionContent", style: { padding: "5px" }}, 
                  [ "$" + expression + "$" ]
                );
    
          // append to parent div
          var divExpression = document.getElementById("divExpression"); 
          divExpression.appendChild(divExpressionContent);
        }
      </script>
    </head>
    <body onload="loadExpression()">
      <div id="divExpression" ></div>
    </body>
    </html>
    
    

    Il risultato è proprio quello che cerchi... e puoi rappresentare espressioni MOLTO complesse.

    Have fun.

    CIAO


    Adriano
    Tuesday, March 29, 2011 8:33 PM
  • Grazie molte!!!

    è quello che cercavo, ma avrei due piccole domande:

    1. Valuta anche le espressioni o devo essere io a valutarle? (Ho capito che non le valuta ma è sempre meglio essere sicuri ;-)
    2. Leggendo l'HTML ho notato che la src è un link (http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML) devo essere connesso a internet per eseguire la libreria?

    Grazie Molte per la risposta!!!!!!!!!!!!!!!!!!

    Saluti!!!!!!!!!!

    :-) Jymmy


    Giammi http:\\teamprogramma.weebly.com!
    Wednesday, March 30, 2011 6:18 PM
  • Ciao Giammi, 

    1) non valuta espressioni, ma le rappresenta

    2) allora l'HTML è un CDN che prevede la connessione, ma puoi scaricare tutto e tenerti in "canna" l'engine localmente.

    CIAO!

     


    Adriano
    Thursday, March 31, 2011 9:15 AM
  • Grazie tante!

    Ho provato e funziona tutto, ma ho una piccola domanda: devo mettere questa espressione su una bitmap.

    Hai suggerimenti?

    Grazie molte!!!!!!!!!!!!!!!!!!


    Giammi http:\\teamprogramma.weebly.com!
    Saturday, April 02, 2011 6:50 PM