AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei Algorithmus

Ein Thema von Newbie44 · begonnen am 30. Aug 2007 · letzter Beitrag vom 30. Aug 2007
Antwort Antwort
Newbie44
(Gast)

n/a Beiträge
 
#1

Hilfe bei Algorithmus

  Alt 30. Aug 2007, 11:59
Hallo,

ich hab eine kleine Binärdatei in der sind kodierte zahlen drinnen

Umrechnung der Koordinaten:

- Die Zahl muss gedreht werden (da Little Endian) 00 00 05 00 --> 00 05 00 00
- Aufteilung in Zahl und Mantisse, z. B: Zahl: 00 05 Mantisse: 00 00
- einzelnes Ausrechnen der Zahl und der Mantisse

Besonderheiten Mantisse:

Von Dezimal nach Hexadezimal

Bei der Zahl 0,632 sitzt die 6 auf der Zehntelstelle, die 3 auf der Hunderstelstelle und die 2 auf der Tausendstelstelle. Ein Zehntel ist 10-1, ein Hundertstel 10-2 usw.

Das wäre Dann 0,A1CA oder im format CA A1 00 00

und Umgekehrt:

Arbeite die Ziffern nach dem Komma von rechts nach links ab.
Multipliziere die Ziffern mit wachsenden Potenzen der Basis, angefangen mit
16° = 1, und summiere die Produkte:

Code:
     10 •     1 =    10
     12 •    16 =   192
      1 •   256 =   256
     10 •  4096 = 40960
                  ——————
                           41418

Teile dann diese Summe durch die nächste Potenz der Basis 16:

41418 : 65536 = 0,631988525390625

und addiere den bereits ermittelten ganzzahligen Anteil 0:

Code:
    0,631988525390625
  + 0
   ——————————————————
    0,631988525390625
Negative Koordinaten:

Die Negativen Daten liegen codiert vor. Sie beginnen jeweils mit einen F oder im Binärsystem ist die höchstmögliche Stelle eine 1.

Von der Zahl wird FF FF FF FF abgezogen,

Wenn z. B. die Zahl

4076C5FF vorliegt dann wird Little Endian angewendet FF C5 76 40

wir ziehen von der Zahl nun FFFF FFFF ab

Code:
FF FF FF FF
-   FF C5 76 40
00 3A 89 BF

Die Zahl 3A, 89 BF wird nun umgewandelt.

Das ergibt dann.

58,538070678710937

Da es aber eine Minuszahl ist muss noch x -1 genommen werden

Aufgerundet sieht das Ergebnis dann so aus:

-58,538


Hier ist ein Ausschnitt der Datei:

Code:
3A000000C22E68023711570255384602298A3502965624021B7D0F024C66FA01C6AFE801AEFFD80129A3CA0149D6B901601CA8011DDB99011D9B8C0115FF7E018CD67601C8E76D01039F6501D53F5B017C5D530161814A
Das erste DWORD sagt mir, wie viele Koordinaten drinnen stehen (Multiplizieren mal 3, da es 3 koordinaten für einen Punkt gibt)

Nur wie programmiere ich jetzt das umrechnen von diesen korrdinaten?

Den Rechenweg hab ich ja bereits beschrieben

Ich hoffe Ihr könnt mir beim Algorithmsu helfen

Gruß

Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Hilfe bei Algorithmus

  Alt 30. Aug 2007, 12:10
Und es ist nicht einfach nur Single?
Ich meine: Wer kocht denn schon mit einem eigenen Format?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Newbie44
(Gast)

n/a Beiträge
 
#3

Re: Hilfe bei Algorithmus

  Alt 30. Aug 2007, 12:14
Da gibt es einiges. Aber ich hab eben dieses Zahlenformat umzurechnen. du kannst auch gerne probieren wie du anders zum ergebnis kommst. aber eigentlich ist diese form vom zahlenspeichern normal nicht üblich, aber wird halt hier benutzt. ich möchte halt das format verarbeiten
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Hilfe bei Algorithmus

  Alt 30. Aug 2007, 12:21
Aha,
du musst einfach nur die 4 Bytes nehmen und das ganze durch 2^16 = 65536 teilen, fertig.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Newbie44
(Gast)

n/a Beiträge
 
#5

Re: Hilfe bei Algorithmus

  Alt 30. Aug 2007, 12:23
aha danke, kommt dann als datentyp wohl ein single raus?
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#6

Re: Hilfe bei Algorithmus

  Alt 30. Aug 2007, 12:25
Das ist simples Festkomma Format im 2'er Komplementär, 16:16.

Delphi-Quellcode:
function ToDouble(Value: Integer): Double;
  
  function Swap(Value: Integer): Integer; // swap Endianess
  asm
    BSWAP EAX
  end;

begin
  Result := Swap(Value) / $10000; // Fixpoint 16:16
end;
Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Hilfe bei Algorithmus

  Alt 30. Aug 2007, 12:31
Wieso noch swap? Little Endian ist doch völlig in Ordnung
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Newbie44
(Gast)

n/a Beiträge
 
#8

Re: Hilfe bei Algorithmus

  Alt 30. Aug 2007, 12:34
Zitat von negaH:
Das ist simples Festkomma Format im 2'er Komplementär, 16:16.

Delphi-Quellcode:
function ToDouble(Value: Integer): Double;
  
  function Swap(Value: Integer): Integer; // swap Endianess
  asm
    BSWAP EAX
  end;

begin
  Result := Swap(Value) / $10000; // Fixpoint 16:16
end;
Gruß Hagen
Hallo,

wow danke das geht ja echt, ja es ist ein Komplementär verfahren. Deshalb hat es mich gewundert, warum ich die zahlen dann nicht tauschen muss.

das mit den swap ist klar, sonst sind ja die zahlen ganz anders als die die ich haben möchte.

so jetzt muss ich es noch für c++ umschreiben damit ist der käse gegessen.

vielen dank für deine hilfe
  Mit Zitat antworten Zitat
Newbie44
(Gast)

n/a Beiträge
 
#9

Re: Hilfe bei Algorithmus

  Alt 30. Aug 2007, 16:36
Jetzt hab ich doch noch ne frage, wie muss ich dann die Datei einlesen damit ich Sie in double convertieren kann, das was in der datei steht sind ja nicht von haus aus gleich die ziffern die ich suche.

blockweise einlesen klappt ja schon ganz gut, jedoch ist mit der datentyp nicht ganz sicher. ein String ist es irgendwie nicht auch ein normaler integer nicht (oder doch)

wäre euch für diese kleine hilfe dankbar
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Hilfe bei Algorithmus

  Alt 30. Aug 2007, 19:43
Na irgendwie so (anhand deiner obigen Beschreibung):
Delphi-Quellcode:
var Datei:Tfilestream;
    anzahl,wert:integer;
    i,j:integer;
    koord:array of array[1..3] of double;
begin
  Datei:=TFileStream.create('xyz.dat',fmopenread);
  try
    Datei.read(anzahl,4);
    setlength(koord,anzahl);
    for i:=0 to anzahl-1 do for j:=1 to 3 do
    begin
      Datei.read(wert,4);
      koord[i,j]:=toDouble(wert);
    end
  finally
    Datei.free;
  end;
end;
oder ist der Text da direkt so drin enthalten
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort


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