IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: používání JEuclid

Aktivity
Avatar
Jirka
Člen
Avatar
Jirka:4.2.2014 12:23

Ahoj, mohla by mi prosím nějaká dobrá duše mi vysvětlit jak se používá JEuclid http://jeuclid.sourceforge.net/…ramming.html hledal jsem pomocí googlu, ale nenašel jsem nic než jen kopie zápisu vzorců v MathML. Potřeboval bych aspoň ukázku jak implementovat do projektu a vypisovat pomocí JEuclid vzorce ve swingu.

edit: omlouvám se, omylem jsem vložil do jiné sekce

Editováno 4.2.2014 12:24
 
Odpovědět
4.2.2014 12:23
Avatar
Silvinios
Tvůrce
Avatar
Odpovídá na Jirka
Silvinios:4.2.2014 18:37

Stačí použít JMathComponent.

Příklad:

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import net.sourceforge.jeuclid.swing.JMathComponent;

public class Demo {

    public static void main(String[] args) {
        final JMathComponent component = new JMathComponent();
        component.setFontSize(40);

        JFrame frame = new JFrame("JEuclid Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(component);
        frame.setMinimumSize(new Dimension(500, 400));
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                String content = "<?xml version=\"1.0\"?>\r\n" +
                        "<!DOCTYPE math PUBLIC \"-//W3C//DTD MathML 2.0//EN\" \"http://www.w3.org/TR/MathML2/dtd/mathml2.dtd\">\r\n" +
                        "<math mode=\"display\">\r\n" +
                        "  <mrow>\r\n" +
                        "    <munderover>\r\n" +
                        "      <mo>&#x222B;</mo>\r\n" +
                        "      <mn>1</mn>\r\n" +
                        "      <mi>x</mi>\r\n" +
                        "    </munderover>\r\n" +
                        "    <mfrac>\r\n" +
                        "      <mi>dt</mi>\r\n" +
                        "      <mi>t</mi>\r\n" +
                        "    </mfrac>\r\n" +
                        "  </mrow>\r\n" +
                        "</math>";
                component.setContent(content);
            }
        });
    }

}
 
Nahoru Odpovědět
4.2.2014 18:37
Avatar
Jirka
Člen
Avatar
Odpovídá na Silvinios
Jirka:5.2.2014 8:25

děkuju za rychlou pomoc, ale při spuštění mi hodí tuto chybu

run:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at net.sourceforge.jeuclid.swing.JMathComponent.<clinit>(JMathComponent.java:75)
        at pokus.Pokus.main(Pokus.java:19)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        ... 2 more
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

jeuclid-core.3.1.9.jar mám mezi knihovnami pro kompilaci v projektu v NetBeans. udělal jsem někde chybu?

 
Nahoru Odpovědět
5.2.2014 8:25
Avatar
Jirka
Člen
Avatar
Jirka:5.2.2014 8:33

Update: po importování všech knihoven ze složky repo se mi projekt spustil a zobrazil tvůj integrál :) takže mám jen otázku, musím mít importovány všechny tyto knihovny, mít jen jeuclid-core nestačí předpokládám

 
Nahoru Odpovědět
5.2.2014 8:33
Avatar
Silvinios
Tvůrce
Avatar
Odpovídá na Jirka
Silvinios:5.2.2014 17:34

Přesně tak. Musíš mít importovány všechny závislosti.

 
Nahoru Odpovědět
5.2.2014 17:34
Avatar
Jirka
Člen
Avatar
Jirka:5.2.2014 18:58

to vykreslování se mi zdá celkem pomalé oproti jiným programům na sourceforge. ty máš s JEuclid zkušenosti, nebo jsi jen tak z fleku sepsal ten kód? v každém případě budu rád jakoukoliv radu jak se vyznat v APIdocs.

 
Nahoru Odpovědět
5.2.2014 18:58
Avatar
Jirka
Člen
Avatar
Jirka:5.2.2014 18:58

to vykreslování se mi zdá celkem pomalé oproti jiným programům na sourceforge. ty máš s JEuclid zkušenosti, nebo jsi jen tak z fleku sepsal ten kód? v každém případě budu rád jakoukoliv radu jak se vyznat v APIdocs :)

 
Nahoru Odpovědět
5.2.2014 18:58
Avatar
Silvinios
Tvůrce
Avatar
Odpovídá na Jirka
Silvinios:10.2.2014 22:12

Zkušenosti s JEuclid nemám žádné a přiznám se, že MathML jsem vůbec neznal, takže jsem to musel vyzkoušet :)

Souhlasím, že rychlost není nic moc, ale s jinými knihovnami zkušenosti nemám.

Je pravda, že APIdocs často nestačí. Pak už zbývá jen metoda pokus-omyl a prohlížení zdrojáků, případně Google, ale o tom jsi už psal, že se ti nepodařilo nic rozumného najít...

 
Nahoru Odpovědět
10.2.2014 22:12
Avatar
Jirka
Člen
Avatar
Jirka:11.2.2014 8:26

no po hraní si s MathML a LatexMath, sbírání kódu a informací po netu jsem si upravil cizí kód:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextArea;

import net.sourceforge.jeuclid.swing.JMathComponent;


public class MathML extends JFrame implements ActionListener {
    private JTextArea latexSource;
        private JButton btnRender;
        private JPanel drawingArea;
        private JSpinner spinner;

        public MathML() {
                this.setTitle("MathML Example");
                this.setSize(500, 500);
                Container content = this.getContentPane();
                content.setLayout(new GridLayout(2, 1));
                this.latexSource = new JTextArea();
                setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
                JPanel editorArea = new JPanel();
                editorArea.setLayout(new BorderLayout());
                editorArea.add(new JScrollPane(this.latexSource),BorderLayout.CENTER);
                editorArea.add(btnRender = new JButton("Render"),BorderLayout.SOUTH);
                editorArea.add(spinner = new JSpinner(),BorderLayout.NORTH);
                spinner.setValue(18);

                content.add(editorArea);
                content.add(this.drawingArea = new JPanel());
                this.btnRender.addActionListener(this);

                String retezec = "<?xml version=\"1.0\"?>\r\n" +
                         "<!DOCTYPE math PUBLIC \"-//W3C//DTD MathML 2.0//EN\" \"http://www.w3.org/TR/MathML2/dtd/mathml2.dtd\">\r\n" +
                         "<math mode=\"display\">\r\n" +
                         "  <mrow>\r\n" +
                         "    <munderover>\r\n" +
                         "      <mo>&#x222B;</mo>\r\n" +
                         "      <mn>1</mn>\r\n" +
                         "      <mi>x</mi>\r\n" +
                         "    </munderover>\r\n" +
                         "    <mfrac>\r\n" +
                         "      <mi>dt</mi>\r\n" +
                         "      <mi>t</mi>\r\n" +
                         "    </mfrac>\r\n" +
                         "  </mrow>\r\n" +
                         "</math>";

                this.latexSource.setText(retezec);
        }

        public void render() {

                        // get the text
                        String latex = this.latexSource.getText();

                        // create a formula
                        JMathComponent formula = new JMathComponent();
                        formula.setFontSize((int)this.spinner.getValue());
                        this.drawingArea.removeAll();
                        this.drawingArea.add(formula);
                        formula.setContent(latex);




        }

        public static void main(String[] args) {
                MathML frame = new MathML();
                frame.setVisible(true);
        }

    @Override
        public void actionPerformed(ActionEvent e) {
                if( e.getSource()==this.btnRender ) {
                        render();
                }

        }

}

první render je celkem pomalý (až 5sec),ale další je již rychlý. Oproti LatexMath (zatim jsem moc nezkoumal vykreslování) je výhoda vykreslení s JEculid ta, že po "resize" rámečku nezmizi renderovaný obsah. Ale jak říkám, JLatexMath jsem nezkoumal blíže.

src:

http://forge.scilab.org/index.php/p/jlatexmath/
 
Nahoru Odpovědět
11.2.2014 8:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.