ESPWortuhr / Multilayout-ESP-Wordclock

Software for an ESP8266 based word clock with support of different layouts and languages
91 stars 49 forks source link

Spiegeln der Anzeige #190

Closed merlin2533 closed 1 year ago

merlin2533 commented 1 year ago

Eine weitere Funktion für die Layouts waren optimal Spiegel

Ihr habt die Reverse Funktion entsprechend gecoded diese ist schon top. Optimal wäre jetzt noch zu spiegeln. Denn wenn die LED Streifen verkehrt Rum eingebaut sind dann müsste man sie alle spiegeln.

Dies über das Frontend zu aktivieren wäre genial

dbambus commented 1 year ago

hallo @merlin2533,

ich bin im Hintergrund grad daran am werkeln, wird sich aber noch ein Wochenende ziehen :-) letztlich will ich Drehungen um +90,+180 und -90 Grad und spiegeln über die Weboberfläche einbauen. Alles was dazu gemacht werden muss ist Funktionen zu schreiben, welche die Forntmatrix kurz vor der led.set() manipulieren.

Daher etwas Geduld, kommt aber noch.

merlin2533 commented 1 year ago

Um eine Matrix in C zu spiegeln, kann man eine Schleife verwenden, die über die Spalten und Zeilen der Matrix iteriert und die entsprechenden Elemente vertauscht. Hier ist ein Beispiel für eine Funktion, die eine 2D-Matrix spiegelt:

Copy code void mirrorMatrix(int matrix[][N], int rows, int cols) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols / 2; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[i][cols - 1 - j]; matrix[i][cols - 1 - j] = temp; } } }

In diesem Beispiel wird die Funktion "mirrorMatrix" mit einer 2D-Integer-Matrix, der Anzahl der Zeilen und Spalten aufgerufen. Innerhalb der Funktion werden zwei Schleifen verwendet, um über die Zeilen und Spalten der Matrix zu iterieren. In jeder Iteration werden die entsprechenden Elemente vertauscht.

Hinweis: "N" ist eine Konstante die vorher definiert wurde und die Größe der Matrix angibt.


Von: David Panusch @.> Gesendet: Montag, 16. Januar 2023 00:31 An: ESPWortuhr/Wortuhr @.> Cc: Markus Straub @.>; Mention @.> Betreff: Re: [ESPWortuhr/Wortuhr] Spiegeln der Anzeige (Issue #190)

hallo @merlin2533https://github.com/merlin2533,

ich bin im Hintergrund grad daran am werkeln, wird sich aber noch ein Wochenende ziehen :-) letztlich will ich Drehungen um +90,+180 und -90 Grad und spiegeln über die Weboberfläche einbauen. Alles was dazu gemacht werden muss ist Funktionen zu schreiben, welche die Forntmatrix kurz vor der led.set() manipulieren.

Daher etwas Geduld, kommt aber noch.

— Reply to this email directly, view it on GitHubhttps://github.com/ESPWortuhr/Wortuhr/issues/190#issuecomment-1383284596, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ANLX53Y4FN2GPFBRBJYMOV3WSSCFPANCNFSM6AAAAAAT4DJYSE. You are receiving this because you were mentioned.Message ID: @.***>

merlin2533 commented 1 year ago

Here is an example of C code that rotates a square matrix by 90 degrees clockwise:

Copy code

include

void rotate90(int n, int matrix[n][n]) { for (int i = 0; i < n / 2; i++) { for (int j = i; j < n - i - 1; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[j][n - 1 - i]; matrix[j][n - 1 - i] = matrix[n - 1 - i][n - 1 - j]; matrix[n - 1 - i][n - 1 - j] = matrix[n - 1 - j][i]; matrix[n - 1 - j][i] = temp; } } }


Von: David Panusch @.> Gesendet: Montag, 16. Januar 2023 00:31 An: ESPWortuhr/Wortuhr @.> Cc: Markus Straub @.>; Mention @.> Betreff: Re: [ESPWortuhr/Wortuhr] Spiegeln der Anzeige (Issue #190)

hallo @merlin2533https://github.com/merlin2533,

ich bin im Hintergrund grad daran am werkeln, wird sich aber noch ein Wochenende ziehen :-) letztlich will ich Drehungen um +90,+180 und -90 Grad und spiegeln über die Weboberfläche einbauen. Alles was dazu gemacht werden muss ist Funktionen zu schreiben, welche die Forntmatrix kurz vor der led.set() manipulieren.

Daher etwas Geduld, kommt aber noch.

— Reply to this email directly, view it on GitHubhttps://github.com/ESPWortuhr/Wortuhr/issues/190#issuecomment-1383284596, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ANLX53Y4FN2GPFBRBJYMOV3WSSCFPANCNFSM6AAAAAAT4DJYSE. You are receiving this because you were mentioned.Message ID: @.***>

merlin2533 commented 1 year ago
virtual const uint16_t getMinArr(uint8_t col, uint8_t row) override {
    #define LED_LAYOUT_ROTATE 1
    //if (LED_LAYOUT_ROTATE = 1)
        //{
            for (int i = 0; i < sizeof(min_arr[i]); i++) {
                for (int j = 0; j < sizeof(min_arr[i][j]) / 2; j++) {
                    int temp = min_arr[i][j];
                    min_arr[i][j] = min_arr[i][sizeof(min_arr[i][j]) - 1 - j];
                     min_arr[i][sizeof(min_arr[i][j]) - 1 - j] = temp;
                }
            }

       // }

    return min_arr[col][row];
};
dbambus commented 1 year ago

Hallo @merlin2533,

vielen Dank für den Vorschlag. Ich hatte gedacht, du meinst die gesamte Front spiegeln? Nicht nur das Minuten Array?

Ich hab das nun ein Reverse vom MinArray implementiert, aber etwas anders als deinen Vorschlag, der zweifelsfrei auch möglich ist :-)

Ich hab das über die std functions von C++ umgesetzt.

std::reverse(std::begin(minArray), std::end(minArray));

Hier meine Implementierung: https://github.com/ESPWortuhr/Wortuhr/pull/192/commits/370b72cfa1032dd12f8dbab3428d57022daad73a

Kurze Erklärung:

Ich versuche, IF-Abfragen innerhalb von Uhrentypen zu umgehen und einen allgemeineren Ansatz zu finden, der für alle Fronten gelten kann. Daher habe ich die Funktion showMinute() überarbeitet und dort die Option reverse hinzugefügt. Dazu war es notwendig, dass ich an dieser Stelle auf das MinArray zugreifen kann, also habe ich die getMinArr()-Funktion entsprechend umgeschrieben. Es wären auch andere Optionen möglich gewesen, aber so habe ich auch die Möglichkeit, die Start-LED des MinArrays zu shiften. Falls ich das noch implementieren möchte :-), aber für Layouts mit Minuten LEDs in den Ecken ist das ein interessanter Gedankengang.

Das Spiegeln der FrontMatrix ist etwas aufwendiger zu implementieren, da ich hier noch etwas am Unterbau der Uhr umcoden muss. Aktuell ist die Variable "frontMatrix" ein lineares Array, daher muss das noch auf ein 2D Array umgestellt werden. :-)

dbambus commented 1 year ago

Hallo @merlin2533,

hey ich habe mal an dem Feature weitergearbeitet. Könntest du das mal testen ? Jetzt sollte es möglich sein das Layout über die Website zu spiegeln und zu Reverse / Transponieren ?

https://github.com/dbambus/Wortuhr/tree/Reversed

Noch ist ein Ein extra Branch in meinem Fork. Ich kann Fehler nicht ausschließen.

dbambus commented 1 year ago

Hey, ich habe das in https://github.com/ESPWortuhr/Wortuhr/pull/216 gelöst