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
 
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#5

Re: TMathBitmap

  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?
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
 


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 08:27 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