Mittwoch, 15. März 2023
vector::resize() zur Initialisierung einer 2D-Matrix
Es fällt auf, dass bei den Beispielen die man im Netz zu vector::resize() finden kann (z. B. [1], [2], [3]) kein einfaches Beispiel beschrieben wird das die Möglichkeit aufgreift einen vector mittels eines Templat-Objektes zu initialisieren.

Hier zunächst einmal die Definition von vector:resize():

void resize( size_type count, const value_type& value ); //vor C++ 20
constexpr void resize( size_type count, const value_type& value ); //ab C++ 20

Während die "size_type" - Variable count einen einfachen Integer-Wert repräsentiert, der die Größe des neu zu erzeugenden Containers beschreibt, stellt die "const value type&"-Variable value ein konstantes Objekt dar, das wiederum selbst ein Container sein kann.

Hier nutze ich dies z. B. um eine 2D-Matrix zu erzeugen, die ich mit dem Wert 3.14 (willkürliches Beispiel) initialisiere:



Consolen-Ausgabe:



[1] https://en.cppreference.com/w/cpp/container/vector/resize

[2] https://cplusplus.com/reference/vector/vector/resize/

[3] https://www.geeksforgeeks.org/vector-of-vectors-in-c-stl-with-examples/



Freitag, 10. Februar 2023
Opera umgeht Update-Einstellungen des Benutzers
Heute nach dem Hochfahren des Computers und Starten von Opera hat Opera mir ungefragt einen neuen Tab gezeigt durch den ich informiert wurde, dass der Browser geupdatet wurde. Und das obwohl ich das explizit deaktiviert hatte (was nur über Veränderung eines Links zum Browser ging). Tatsächlich zeigt mir Opera, wenn ich zu den Update-Einstellungen gehe, weiterhin an: "Die Überprüfung auf Updates ist deaktiviert". Im opera_installer-Update-Log finde ich: "--consent-given=0". Was sollte das also?

Das Update selbst hat gut funktioniert - und betraf wohl nur kosmetische Dinge und das Abspielen von Videos. Dinge, die ich für meine Anwendung von Opera sowieso nicht benötige.

Ich versuche jetzt über die hosts-Datei die Verbindung zum Update-Server zu kappen. Mal schauen, ob das hilft.



Donnerstag, 19. Januar 2023
GLM bzw. OpenGL und Mathematica
Folgendes C++ - Programm (das die GLM-Bibliothek von OpenGL benutzt für Matrix-Berechnungen) ...



...ergibt folgenden Output:



Wenn man nun, zwecks Fehlersuche im C++ - Programm, auf die Idee kommt, diese Rechnung mit Mathematica nachzuvollziehen, dann gelangt man nur dann zum richtigen Resultat, wenn man die Reihenfolge der Matrix-Multiplikation gegenüber dem C++ - Programm umstellt:



Der Grund für dieses unterschiedliche Verhalten liegt darin, dass OpenGL - Matrizen und GLM - Matrizen in "spaltenweiser Anordnung" (Column-major order) gespeichert werden. Mathematica-Matrizen werden dagegen in "zeilenweiser Anordnung" (Row-major order) im Speicher abgelegt.

Der Unterschied zwischen diesen beiden Speicherformaten für Matrizen wird im folgenden Wikipedia-Artikel sehr anschaulich erklärt:
https://en.wikipedia.org/wiki/Row-_and_column-major_order