Darstellung Mathematischer Gleichungen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Darstellung Mathematischer Gleichungen

Beitrag von Epcop »

Hallo,

gibt es bereits eine einfache Möglichkeit, mathematische Gleichungen "schön" darzustellen?

Z.B.:

((2+1)/(2+3))+8*√9+2^2 =


Das Ganze in "schön": Mit richtiger waagrechter Bruchlinie, den Rest dann auch mittiger, die 9 schön im Wurzelzeichen usw.

Eine einfache Grafik zur Darstellung wäre schon in Ordnung.

Oder muss man da selbst kreativ werden?

Was ich mir vorstelle ist, dass ich nur die Gleichung schreibe, und nicht unnötig kompliziert noch was "formatieren" muss.

Benutzeravatar
theo
Beiträge: 10462
Registriert: Mo 11. Sep 2006, 19:01

Re: Darstellung Mathematischer Gleichungen

Beitrag von theo »

Es gibt was für Delphi, ist allerdings nur auf russisch beschrieben.
Möglicherweise kriegst du das mit ein paar Handgriffen für Lazarus auf Windows zum Laufen.
Auf Linux scheint es leider nicht ohne weiteres zu funzen, da es nicht portiertes WinAPI wie "GetGlyphOutline" verwendet.

Jedenfalls denke ich, dass es das wäre, was du suchst.
http://www.delphikingdom.com/asp/viewit ... alogid=718

Benutzeravatar
theo
Beiträge: 10462
Registriert: Mo 11. Sep 2006, 19:01

Re: Darstellung Mathematischer Gleichungen

Beitrag von theo »

Habe mal mein Windows gebootet. Hat ganz schön gestaubt. :lol:
Also so ein bisschen geht das schon damit.
Man müsste noch ziemlich schrauben, aber so etwas macht er schon:

mathex.png
mathex.png (7.92 KiB) 1386 mal betrachtet
S.a. https://stackoverflow.com/questions/101 ... xpressions

Für Cross-platform müsste man wahrscheinlich auf Freetype umstellen.

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Darstellung Mathematischer Gleichungen

Beitrag von wp_xyz »

Es gibt auch QDSEquations, https://github.com/karser/QDSEquations, das auch einen Formel-Editor enthält, ähnlich wie in den Office-Programmen, der ist aber etwas hakelig zu bedienen. Mein Test des beigefügten Demo-Programms (--> Screenshot) lief zunächst unter Delphi 7. Dann habe ich gesehen, dass es auch ein Lazarus-Package gibt. Das kompilierte und installierte auf Anhieb, nur beim Demo-Projekt musste ich die fehlende lpr-Datei aus der dpr-Datei regenerieren. Die Units enthalten allesamt die Windows-Unit, man müsste mal durchspielen, ob man sie durch LCLIntf ersetzen kann...

[EDIT]
Man muss in ein paar Message-Methoden den Message-Typ von TWMirgendwas auf TLMirgendwas ersetzen, sowie die Message-Konstante von WM_irgendwas auf LM_irgendwas - ich denke, das war das wesentliche. In eine Utility-Unit gibt es noch eine Keyboard-Mapping-Routine, bei der mir auf die Schnelle nicht eingefallen ist, wie man die in der LCL umsetzt - muss aber machbar sein, wenn man sich mit dem Thema näher beschäftigt.
Dateianhänge
qdsequation.png
qdsequation.png (24.14 KiB) 1357 mal betrachtet

Benutzeravatar
theo
Beiträge: 10462
Registriert: Mo 11. Sep 2006, 19:01

Re: Darstellung Mathematischer Gleichungen

Beitrag von theo »

@wp_xyz: Was man bei beiden Codes noch auf dem Schirm haben muss, ist das Thema UTF-8 vs. Ansi vs. WideChar.
Auch in QDSEquations hat es Dinge wie GetTextExtentPoint32W welche mit WideChar arbeiten.
Ich sage nicht, dass das automatisch ein grosses Problem sein muss, aber es könnte für Verwirrung sorgen.

EDIT: Übrigens: Manchmal kann in solchen Fällen auch die Unit DelphiCompat aus dem LCL Extensions Package (Sonst von Virtualtreeview benötigt) hilfreich sein.

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Darstellung Mathematischer Gleichungen

Beitrag von wp_xyz »

theo hat geschrieben:
Mo 26. Sep 2022, 10:04
Auch in QDSEquations hat es Dinge wie GetTextExtentPoint32W welche mit WideChar arbeiten.
Ich habe in diesem Fällen einfach Canvas.TextExtent aufgerufen, obwohl das Argument in WideChar ist. FPC macht da einen phantastischen Job in der automatischen Konvertierung (manchmal aber auch nicht, und das macht den Umgang mit WideChar/WideString und Strings allgemein immer noch zu einem gewissen Abenteuer - da gebe ich dir recht):

Code: Alles auswählen

function TEqExtSymbol.CalcHeight: Integer;
var
  Size: TSize;
begin
  SetCanvasFont;
  {$IFDEF FPC}
  Size := Canvas.TextExtent(Symbol);
  {$ELSE}
  GetTextExtentPoint32W(Canvas.Handle,@Symbol,1,Size);
  {$ENDIF}
  Result:=Size.CY
end;

Benutzeravatar
theo
Beiträge: 10462
Registriert: Mo 11. Sep 2006, 19:01

Re: Darstellung Mathematischer Gleichungen

Beitrag von theo »

OK.
GetTextExtentPoint32W ist bspw. eine Funktion, die in DelphiCompat enthalten ist.
Mit dieser Unit kann man sich manchmal etwas Arbeit ersparen, bei Delphi/WinApi Code.

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: Darstellung Mathematischer Gleichungen

Beitrag von Epcop »

Das russische Tool finde ich ziemlich gut. Leider ist der Fehler mit dem Bruchstrich drin. Den Fehler kann ich aber nicht korrigieren.

Inzwischen habe ich an einem eigenen Tool herumprobiert. Aber ganz so einfach ist es nicht, wie ich zunächst dachte. Wahrscheinlich ist es einfacher, das russische zu korrigieren. Interessant wäre, ob der gleiche Fehler auch in einer Delphi Umgebung ist oder dort funktioniert. Wollte mir die Community Edition besorgen, aber die Delphi Webseite funktioniert bei mir gar nicht oder im Schneckentempo.
Mit den Texten des russischen habe ich ziemliche Probleme, da mir nur kryptische Texte angezeigt werden (Win 7).


Ich habe allerdings AsciiMath gefunden. Leider, nicht für Lazarus, sondern für HTML.

http://asciimath.org/ bzw. https://docs.mathjax.org/en/latest/input/asciimath.html

Finde ich ziemlich interessant. Schöner wäre es noch, wenn man das als Grafik speichern könnte usw.

hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: Darstellung Mathematischer Gleichungen

Beitrag von hum4n0id3 »

Wäre LibreOffice Math eine Möglichkeit?

Antworten