![]() |
AW: Taschenrechner mit natürlicher Eingabe
Wie arbeitet dein Parser? Baut er einen Baum auf? Dann koenntest du dir ueberlegen, einfach den Zeichenkontext (das Bitmap, Zeichenkoordinaten und evtl. noch Schriftgroesse (Exponenten kleiner)) durchzureichen und jeden Knoten sich selbst zeichnen zu lassen.
Wuerde ich in zwei Methoden aufteilen: Eine, die die Groesse des benoetigten Zeichenbereiches zurueckgibt und eine, die tatsaechlich zeichnet. In Pseudocode koennte die Additions-Zeichen-Methode z.B. so aussehen:
Code:
Bei Zahlen-Knoten musst du eben nur die enthaltene Zahl zeichnen, bei Bruch-Knoten musst du Bruchstriche zeichnen etc., aber alles nach gleichem Schema.
Additionsknoten::zeichne(ACanvas: TCanvas, AStartpunkt: Koordinate, ASchriftgroesse: Zahl)
{ ErsterBereich: Rechteck := ErsterUnterbaum->zeichen_groesse(ASchriftgroesse); ZweiterBereich: Rechteck := ZweiterUnterbaum->zeichen_groesse(ASchriftgroesse); OperatorBereich: Rechteck := ermittle_text_groesse("+", ASchriftgroesse); ErsterBereich->zeichne(ACanvas, AStartpunkt, ASchriftgroesse); AStartpunkt->verschiebe(ErsterBereich->X, 0); Canvas->zeichne_text("+", ASchriftgroesse, AStartpunkt); AStartpunkt->verschiebe(OperatorBereich->X, 0); ZweiterBereich->zeichne(ACanvas, AStartpunkt, ASchriftgroesse); } |
AW: Taschenrechner mit natürlicher Eingabe
@Implementation:
ich bin mir nicht ganz sicher ob ich dich richtig verstanden habe. Meinst du das so? ![]() Das wäre zur Not eine Alternative gewesen, lieber wäre mir das wie im Bild. |
AW: Taschenrechner mit natürlicher Eingabe
Zitat:
Hier wäre z.B. LaTex zu nennen, das Formeln grafisch so aufbereiten kann dass man es in mathematischen Büchern gebrauchen kann. Hier ne kleine Übersicht wie das aussieht: ![]() Schon allein dieser Sourcecode, der aus einem LaTex-Dokument einen grafischen Output erzeugt ist schon ziemlich hardcore. Noch schwieriger wäre ein Editor, der die Formel in der für Mathematiker geläufigen Form anzeigt und ein direktes Ändern erlaubt. Sagen wir mal es würde eine Formel in dieser Schreibweise vorliegen:
Code:
Mit einigem Aufwand wäre es vielleicht möglich, diesen String in ein LaTex-Format zu überführen; aber das wird nicht einfach.
y = (sin(x)/x) ^ 2
|
AW: Taschenrechner mit natürlicher Eingabe
Zitat:
Zitat:
|
AW: Taschenrechner mit natürlicher Eingabe
Also das mit LaTeX geht auf jeden Fall in die richtge Richtung, danke dafür. Ich werd mich mal damit beschäftigen, mal gucken was dabei rum kommt. Ich komme bestimmt aber nochmal auf euch zu sprechen :)
|
AW: Taschenrechner mit natürlicher Eingabe
Also ich versuche das Ganzen evtl. aus einer neuen Richtung zu betrachten. Einen Parser zu Progen die diese geilen LaTeX Formenln, oder wie sie auch aussehen sollen, direkt interpretiert, ist wahrscheinlich keine gute Idee. Was du evtl. angehen solltest ist zuerst einen normalen Formelparser zu progen, der diese häßlichen sqrt statt Wurzelzeichen interpretiert. Hast du einen stabilen Formelparser programmiert, hast du das halbe Problem hinter dir. Der zweite Teil deines Programms wäre dann einen grafischen Formeleditor zu programmieren. Hast du das geschafft, was an für sich schon etwas Arbeit ist, programmierst du einen Parser der die grafische Formeln in in die häßliche normale Formel umsetzt, also die mit sqrt.
In dem Fall wäre das Problem zweigeteilt. Ein Programmteil das sich um die grafische Darstellung kümmert, der zweite Teil der die Berechnung durchführt. |
AW: Taschenrechner mit natürlicher Eingabe
wolframalpha.com bekommt das ganz gut hin:
![]() und es gibt auch eine API dafür: ![]() |
AW: Taschenrechner mit natürlicher Eingabe
Also wenn es um Formeldarstellung geht, würde ich mal gucken, wie es andere Programme machen, die LaTeX interpretieren und darstellen.
Davon gibt es viele in JavaScript, aber auch in C und Java ... eine Websuche wird da genug Quellcode finden (auch unter nicht-Copyleft-Lizenzen). Wenn es nicht so schön wie LaTeX werden soll, würde ich einfach an den Blättern deines Formelbaumes anfangen und die dort gerenderten Formeln als Boxen betrachten, die du dann in die jeweils höhere Darstellung einbaust. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz