Vektor Klasse in float[]
-
Hi,
ich habe eine Klasse zur Verwaltung von 3D Vektoren:
class Vektor { float x,y,z; ... }ich habe es bereits geschaft ein float arry der Länge 3 in solch einen Vektor zu konvertieren:
Vektor v; float arry[3]; //natürlich auch initialisiert v = *(VECTOR_3F*) arry;Aber wie geht das andersherum? Wie konvertiere ich solch einen Vektor in ein float arry?
-
Gar nicht, denn es geht nicht. Nutze lieber std::vector oder boost::array. Obwohl die zwei Templates für diesen Kleinkram wohl overkill sind.
Alternative: Alle Elemente einzeln zuweisen
float arr[3]; arr[0] = ptr[0]; arr[1] = ptr[1]; arr[2] = ptr[2];Oder eben mit Funktionen wie memcpy die Bytes kopieren.
-
Vektor v; float arr[3]; arr[0] = v.x; arr[1] = v.y; arr[2] = v.z;So mache ich das zur Zeit.
Ich hatte aber gehofft, dass das schneller geht.
-
Wie wäre es mit einem Konstruktor?
Vektor(const float *arr) { x = arr[0]; //... }
-
Mike789 schrieb:
Vektor v; float arr[3]; arr[0] = v.x; arr[1] = v.y; arr[2] = v.z;So mache ich das zur Zeit.
Ich hatte aber gehofft, dass das schneller geht.Warum definierst Du "Vektor" nicht einfach mit einem float[3] als Datenelement? Dann darfst Du auch std::memcpy verwenden, um die Elemente zu kopieren und kannst auf x/y/z per Index zugreifen. Und wenn Dir v.coeffs[idx] zu umständlich ist, kannst Du ja den operator[] überladen. Und wenn Du die Elemente noch benennen willst, kannst Du ja entsprechende Zugriffsfunktionen definieren -- v.x() könnte eine Referenz auf das richtige Element liefern.
kk
-
krümelkacker schrieb:
Mike789 schrieb:
Vektor v; float arr[3]; arr[0] = v.x; arr[1] = v.y; arr[2] = v.z;So mache ich das zur Zeit.
Ich hatte aber gehofft, dass das schneller geht.Warum definierst Du "Vektor" nicht einfach mit einem float[3] als Datenelement? Dann darfst Du auch std::memcpy verwenden, um die Elemente zu kopieren und kannst auf x/y/z per Index zugreifen. Und wenn Dir v.coeffs[idx] zu umständlich ist, kannst Du ja den operator[] überladen. Und wenn Du die Elemente noch benennen willst, kannst Du ja entsprechende Zugriffsfunktionen definieren -- v.x() könnte eine Referenz auf das richtige Element liefern.
kk
gute Idee!