AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TMathBitmap
Thema durchsuchen
Ansicht
Themen-Optionen

TMathBitmap

Ein Thema von Khabarakh · begonnen am 7. Aug 2005 · letzter Beitrag vom 12. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Khabarakh
Khabarakh
Registriert seit: 18. Aug 2004
(Suche nach ähnlichen Themen findet nix, also los )


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 .

[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]
Angehängte Dateien
Dateityp: zip demoproject_165.zip (339,1 KB, 134x aufgerufen)
Dateityp: zip mathbit_262.zip (374,4 KB, 99x aufgerufen)
Moderator in der EE
 
Benutzerbild von BlackJack
BlackJack

 
Delphi 2005 Personal
 
#2
  Alt 7. Aug 2005, 12:13
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!

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.
  Mit Zitat antworten Zitat
Jarmen_Kell
 
#3
  Alt 7. Aug 2005, 12:47
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
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh
 
#4
  Alt 7. Aug 2005, 13:40
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!

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 .

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 . Dein Programm/Komponente hast du aber (noch) nicht in der DP vorgestellt, oder? Ich habe jedenfalls nichts gefunden.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

 
Delphi 2005 Personal
 
#5
  Alt 7. Aug 2005, 17:24
Zitat von Khabarakh:
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!

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?
  Mit Zitat antworten Zitat
Alexander

 
Turbo Delphi für .NET
 
#6
  Alt 7. Aug 2005, 17:45
Vielleicht kannst du ja auch Hagens Variante mit unendlich langen Zahlen nehmen
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh
 
#7
  Alt 7. Aug 2005, 18:12
Ich glaube, DEC Math wäre doch etwas "overkill" .
Sebastian
  Mit Zitat antworten Zitat
Alexander

 
Turbo Delphi für .NET
 
#8
  Alt 7. Aug 2005, 20:27
Wenn du meinst . Ich finde so was immer lustig (wollte ich in meinen Plotter auch noch mal einbinden )
Alexander
  Mit Zitat antworten Zitat
Jarmen_Kell
 
#9
  Alt 8. Aug 2005, 14:21
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins
 
#10
  Alt 9. Okt 2005, 22:27
Ist das Absicht, dass man das Koordinatensystem drehen kann, wenn man z.B. das Zoom-Rchteck von unten rechts nach oben links zieht ?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz