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!


Anmelden zum Antworten