Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TMathBitmap (https://www.delphipraxis.net/51154-tmathbitmap.html)

Khabarakh 7. Aug 2005 00:07


TMathBitmap
 
Liste der Anhänge anzeigen (Anzahl: 2)
(Suche nach ähnlichen Themen findet nix, also los :mrgreen:)


TMathBitmap

Zusammenfassung:
Wenn ihr vorhabt, irgendetwas zu mindestens 34,6% Mathematisches in irgendeiner Form graphisch darzustellen, solltet ihr euch dieses Package anschauen.

Etwas ausführlicher:
Meine kleine Hilfe, in der da steht:
Das Package Mathbit besteht aus drei Hauptklassen:
  • TMathBitmap
    TMathBitmap ist eine Kapselung des TBitmap32 der GR32-Library. Es erweitert die Klasse durch die Möglichkeit, relative Koordinaten zu benutzen, die dann intern durch die Eigenschaft ViewRect in absolute Koordinaten umgerechnet werden. Außerdem bietet es ein vollständig einstellbares Gitternetz.

  • TMathImage
    TMathImage ist ein TCustomControl, das ein TMathBitmap als
    OffScreenBitmap nutzt. Es bietet verschiedene Möglichkeiten, den
    Viewport zu verändern:


    Verschieben: Linke Maustaste gedrückt halten


    Zoom:
    - Rechte Maustaste
    - Tasten '+' und '-'
    - Mausrad


    Durch die Eigenschaft BufferDisplacement kann das OffScreenBitmap gepuffert werden, um ein reibungsloses Verschieben mit der Maus auch bei aufwändigen Zeichnungen zu ermöglichen (s. auch die beiliegende Demo).

  • TPlotter
    TPlotter ist die Basisklasse für die drei Klassen TCartesianPlotter, TPolarPlotter und TParametricPlotter, mit denen mathematische Funktionen leicht auf ein TMathBitmap geplottet werden können.
    Alle drei Klassen benutzen den CQParser von Fabian K.



Nachdem ihr diese Zusammenfassung gelesen habt (oder auch nicht), solltet ihr euch erstmal die Demo im Anhang anschauen, denn Bilder sagen bekanntlich mehr als 10³ Worte.

Installation:
benötigt werden:Nochmal vielen Dank an dizzy, dass ich seinen Parser benutzen darf.


Getestet unter D6 und D2005.

Im zweiten Anhang befindet sich neben dem Package selbst der Sourcecode der Demo sowie eine kleine Hilfe. Obwohl ich fast den ganzen heutigen Tag an dieser gearbeitet habe, ist sie eher knapp an Umfang. Ich werde sie aber auch nicht mehr groß erweitern, weil es IMO einfach extrem langweilig ist, eine Hilfe zu schreiben. Endlich kann ich die Jungs von der JVCL verstehen :mrgreen: .

[add]Es steht weder in diesem Post, noch in der Hilfe, noch in der Demo, ein Wunder, dass es mir überhaupt noch eingefallen ist: Für "+", "-" und Mausrad benötigt TMathImage den Fokus. [/add]

BlackJack 7. Aug 2005 12:13

Re: TMathBitmap
 
ich muss schon sagen, eine sehr schöne komponente. vor alem das (fast) ruckelfreie verschieben und zoomen hat mir gefallen. mir fällt jetzt zwar nichts ein, wofür ich diese koponente benutzen könnte (viel hab ich selber schon gemacht), aber trotzdem: respekt! :mrgreen:

edit: ach ja wenn man beim apfelmännchen reimzoomt kommt man ziemlich schnell an die grenzen der float-(un)genauigkeit. benutzt du vielleicht Single als Float-wert? dann nimm doch lieber Double oder Extended.

Jarmen_Kell 7. Aug 2005 12:47

Re: TMathBitmap
 
Ich kanns zZ nicht gebrauchen und hab zumindest einen Plotter mit Koodsystem, Achsen, Verschieb- und Zoommöglichkeiten schon gebaut.
Dennnoch - oder gerade deswegen - weiß ich, was da an Arbeit hintersteckt und kann nur sagen: Respekt :)

Khabarakh 7. Aug 2005 13:40

Re: TMathBitmap
 
Zitat:

Zitat von BlackJack
ich muss schon sagen, eine sehr schöne komponente. vor alem das (fast) ruckelfreie verschieben und zoomen hat mir gefallen. mir fällt jetzt zwar nichts ein, wofür ich diese koponente benutzen könnte (viel hab ich selber schon gemacht), aber trotzdem: respekt! :mrgreen:

edit: ach ja wenn man beim apfelmännchen reimzoomt kommt man ziemlich schnell an die grenzen der float-(un)genauigkeit. benutzt du vielleicht Single als Float-wert? dann nimm doch lieber Double oder Extended.

Ich freue mich, dass es dir gefällt :) . Zu den Float-Grenzen habe ich mir überlegt, einfach einen eigenen Typ im gesamten Package zu benutzen, den man per $DEFINE schnell als einen der drei "wirklichen" Float-Typen definieren kann. Single war nur als Übergangslösung gedacht. Außerdem werde ich noch eine Beschriftung der Achsen hinzufügen, weitere Vorschläge erwünscht :wink: .

Zitat:

Ich kanns zZ nicht gebrauchen und hab zumindest einen Plotter mit Koodsystem, Achsen, Verschieb- und Zoommöglichkeiten schon gebaut.
Dennnoch - oder gerade deswegen - weiß ich, was da an Arbeit hintersteckt und kann nur sagen: Respekt Smile
Danke, der CQParser hat mir beim Plotten aber auch viel Arbeit abgenommen :wink: . Dein Programm/Komponente hast du aber (noch) nicht in der DP vorgestellt, oder? Ich habe jedenfalls nichts gefunden.

BlackJack 7. Aug 2005 17:24

Re: TMathBitmap
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von BlackJack
ich muss schon sagen, eine sehr schöne komponente. vor alem das (fast) ruckelfreie verschieben und zoomen hat mir gefallen. mir fällt jetzt zwar nichts ein, wofür ich diese koponente benutzen könnte (viel hab ich selber schon gemacht), aber trotzdem: respekt! :mrgreen:

edit: ach ja wenn man beim apfelmännchen reimzoomt kommt man ziemlich schnell an die grenzen der float-(un)genauigkeit. benutzt du vielleicht Single als Float-wert? dann nimm doch lieber Double oder Extended.

Ich freue mich, dass es dir gefällt Smile . Zu den Float-Grenzen habe ich mir überlegt, einfach einen eigenen Typ im gesamten Package zu benutzen, den man per $DEFINE schnell als einen der drei "wirklichen" Float-Typen definieren kann. Single war nur als Übergangslösung gedacht. Außerdem werde ich noch eine Beschriftung der Achsen hinzufügen, weitere Vorschläge erwünscht Wink

ja, genau so habe ich das in meinem RayTracer auch gemacht, hier ein schnipsel:
Delphi-Quellcode:
{$UNDEF EXTENDED}

{$IFDEF EXTENDED}
type TFloat = Extended;
{$ELSE}
type TFloat = Double;
{$ENDIF}

const FlSize = SizeOf(TFloat);
und dann arbetie ich im gesamten Projekt nur mit TFloat.

das $DEFINE (bzw. im moment $UNDEF) benutze ich, da ich z.T. Assembler-routinen habe, und wenn man in ASM mit der FPU arbeitet, gibt es da utnerschiese zwischen Singe/Double und Extended. das sieht dann z.b. so aus (mal eine Funtion um Vektoren zu addieren):
Delphi-Quellcode:
function vAdd(const AVec1, AVec2: TVector): TVector;
  {$IFNDEF EXTENDED}
  asm
  mov ecx, @Result
  fld TFloat ptr [eax + FlSize*0]
  fadd TFloat ptr [edx + FlSize*0]
  fstp TFloat ptr [ecx + FlSize*0]
  fld TFloat ptr [eax + FlSize*1]
  fadd TFloat ptr [edx + FlSize*1]
  fstp TFloat ptr [ecx + FlSize*1]
  fld TFloat ptr [eax + FlSize*2]
  fadd TFloat ptr [edx + FlSize*2]
  fstp TFloat ptr [ecx + FlSize*2]
  end;
  {$ELSE}
  begin
  Result[0] := AVec1[0] + AVec2[0];
  Result[1] := AVec1[1] + AVec2[1];
  Result[2] := AVec1[2] + AVec2[2];
  end;
  {$ENDIF}
Moment, wieso benutze ich eigentlich für Extended kein ASM? :gruebel:

Alexander 7. Aug 2005 17:45

Re: TMathBitmap
 
Vielleicht kannst du ja auch Hagens Variante mit unendlich langen Zahlen nehmen :)

Khabarakh 7. Aug 2005 18:12

Re: TMathBitmap
 
Ich glaube, DEC Math wäre doch etwas "overkill" :wink: .

Alexander 7. Aug 2005 20:27

Re: TMathBitmap
 
Wenn du meinst :). Ich finde so was immer lustig (wollte ich in meinen Plotter auch noch mal einbinden :-D )

Jarmen_Kell 8. Aug 2005 14:21

Re: TMathBitmap
 
Zitat:

Danke, der CQParser hat mir beim Plotten aber auch viel Arbeit abgenommen Wink . Dein Programm/Komponente hast du aber (noch) nicht in der DP vorgestellt, oder? Ich habe jedenfalls nichts gefunden.
Nein, hab ich nicht und werde ich vermutlich auch nicht^^
Ich bin mir nicht mal mehr sicher, ob ich das noch habe :gruebel:

jfheins 9. Okt 2005 22:27

Re: TMathBitmap
 
Ist das Absicht, dass man das Koordinatensystem drehen kann, wenn man z.B. das Zoom-Rchteck von unten rechts nach oben links zieht ? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Seite 1 von 2  1 2      

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