Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi wieder konvertierungs problem (https://www.delphipraxis.net/88826-wieder-konvertierungs-problem.html)

Nuclear-Ping 21. Mär 2007 20:12

Re: wieder konvertierungs problem
 
Alternativ gänge auch eine repeat- oder while-Schleife.
Delphi-Quellcode:
lphi := 0;
while (lphi < 189.0) do
  begin
    ...
    lphi := lphi + 13.5;
  end;

marabu 21. Mär 2007 20:19

Re: wieder konvertierungs problem
 
Hallo Mario,

sobald du Float-Werte zur (Schleifen-)Steuerung benutzt, arbeitest du nicht mehr mit exakten, sondern mit Schwellwerten. Darüberhinaus musst du dann wegen der möglichen Abbildungsfehler oft eine Epsilon-Umgebung betrachten. Es ist wirklich besser Integer-Werte zu benutzen, wenn es irgendwie möglich ist.

Freundliche Grüße

Nuclear-Ping 21. Mär 2007 20:28

Re: wieder konvertierungs problem
 
Aha, eigentlich logisch, aber gewußt habe ich es noch nicht. Danke für den Tip. ;)

EWeiss 21. Mär 2007 20:39

Re: wieder konvertierungs problem
 
Zitat:

Zitat von Nuclear-Ping
Alternativ gänge auch eine repeat- oder while-Schleife.
Delphi-Quellcode:
lphi := 0;
while (lphi < 189.0) do
  begin
    ...
    lphi := lphi + 13.5;
  end;

wobei es hier auch wieder probleme mit der Berechnung gibt.

Delphi-Quellcode:
for lphi : = 202.5 to 229.5 do
Zitat:

229.5-202.5/13.5
Gut hier wäre der teiler 2 kann aber nicht bei null anfangen

Das würde ja dann nicht mehr funktionieren!
Delphi-Quellcode:
lphi := 13.5 * i
habe es so gelößt

Delphi-Quellcode:
      glColor3f(1.0,1.0,0.0);
    lphi := 202.5;
      for i := 1 to 2 do
      begin
      if not (lphi = 216) then
        lphi := lphi + 13.5 * i
      else
        lphi := lphi + 13.5;
gibt bestimmt eine intelligentere methode(berechnung)

gruss Emil

marabu 21. Mär 2007 20:42

Re: wieder konvertierungs problem
 
Direkt aus der Abteilung Transferwissen:

Delphi-Quellcode:
for i := 15 to 17 do
begin
  lphi := 13.5 * i;
  // ...
end;
Freundliche Grüße

EWeiss 21. Mär 2007 20:45

Re: wieder konvertierungs problem
 
Zitat:

Zitat von marabu
Direkt aus der Abteilung Transferwissen:

Delphi-Quellcode:
for i := 15 to 17 do
begin
  lphi := 13.5 * i;
  // ...
end;
Freundliche Grüße

ich bekomme die Krise .... heheheheh stimmt ;)
so einfach doch so umständlich(von mir)

gruss Emil

EWeiss 21. Mär 2007 21:54

Re: wieder konvertierungs problem
 
ein prob hab ich noch dann läufts..

Code:
   lmax=0;
   rmax=0;
   for (i=0; i<576;i++)
   {
      ltemp=abs(wavedata[i]);
      if (ltemp>lmax) lmax=ltemp;
   }
   for (i=0; i<576;i++)
   {
      rtemp=abs(wavedata[i+576]);
      if (rtemp>rmax) rmax=rtemp;
   }

   lphi=(float)lmax;
   rphi=(float)rmax;
Delphi-Quellcode:
   

   lmax := 0;
   rmax := 0;

   for i := 0 to 576 do
   begin
      ltemp := abs(wavedata[i]);
      if (ltemp>lmax) then
      lmax := ltemp;
   end;

   for i := 0 to 576  do
   begin
      rtemp := abs(wavedata[i+576]);
      if (rtemp>rmax) then
      rmax := rtemp;
   end;

   lphi := lmax;
   rphi := rmax;
Die beiden Werte
Delphi-Quellcode:
   lphi := lmax;
   rphi := rmax;
müßten wieder nach single konvertiert werden da sonst integer angenommen wird.
Dann sind die werte aber zu hoch und die VU ist auf anschlag. ;)

PS: Gibt es eigentlich keine Grundregeln wie Integer zu single konvertiert werden kann?
Ähnlich wie FloatToStr usw...

Float wäre doch auch in Delphi single warum gibt es dann nicht sowas wie IntToFloat

gruss Emil

marabu 22. Mär 2007 09:35

Re: wieder konvertierungs problem
 
Hallo Emil,

wenn wavedata ein array of Integer ist, dann geht es auch so:

Delphi-Quellcode:
uses
  Math;

var
  lphi, rphi: Single;
  wavedata: array of Integer;

begin
   lphi := MaxIntValue(Copy(wavedata, 0, 576));
   rphi := MaxIntValue(Copy(wavedata, 576, 576));
end;
Eine Konvertierung von Integer nach Float kann der Compiler automatisch vornehmen. Umgekehrt ist es wegen des Informationsverlustes in Pascal (Pascal ist nicht Basic oder Perl - alles ist strikt) nicht erlaubt, sodass du Trunc() oder andere Funktionen benutzen musst.

Freundliche Grüße

EWeiss 22. Mär 2007 09:51

Re: wieder konvertierungs problem
 
Zitat:

Zitat von marabu
Hallo Emil,

wenn wavedata ein array of Integer ist, dann geht es auch so:

Delphi-Quellcode:
uses
  Math;

var
  lphi, rphi: Single;
  wavedata: array of Integer;

begin
   lphi := MaxIntValue(Copy(wavedata, 0, 576));
   rphi := MaxIntValue(Copy(wavedata, 576, 576));
end;
Eine Konvertierung von Integer nach Float kann der Compiler automatisch vornehmen. Umgekehrt ist es wegen des Informationsverlustes in Pascal (Pascal ist nicht Basic oder Perl - alles ist strikt) nicht erlaubt, sodass du Trunc() oder andere Funktionen benutzen musst.

Freundliche Grüße

Supi Danke für die Infos ...
Habe mir erlaubt dir eine PN zu schicken.

Aber hier die Deklaration von wavedata
Delphi-Quellcode:
Type
  TWaveData = Array[0..576] Of byte;
  PWaveData = ^TWaveData;
end;
Daten werden so eingelesen!
Delphi-Quellcode:
wavedata := @This_Mod^.WaveformData[0][0];
In der PN habe ich mal näher geschildert (als ich die Antwort hier noch nicht kannte)
wo das problem liegt.

Ich denke die berechnung über 'abs' so wie ursprünglich aufgeführt kann nicht funktionieren
da die variablen ganz anderes deklariert sind in c++
Bekomm auch unabhängig jetzt von der konvertierung immer einen wert von 255.
Was noch erschwerend hinzukommt ist halt das die konvertierung nach Single kläglich scheitert.

Deine Variante habe ich mal geprüft geht aber wegen dem Array nicht..
Werd mal versuchen die umzustricken.
EDIT: geht nicht wieder wegen konvertierungs problemen..

Danke wie immer Emil

EWeiss 24. Mär 2007 10:17

Re: wieder konvertierungs problem
 
Muss das nochmal aufgreifen.
Irgendwie will das immer noch nicht.

Sieht aus wie ein schleichendes irgendetwas hat aber nichts mit der
Visualisierung eines realen VU Meters zu tun.

Niemand ne Idee wo oder was da falsch sein könnte ?

Der Quelltext ist im SourceCode Forumsbereich.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.
Seite 2 von 4     12 34      

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