Ab Version 2 benötigt man zusätzliche Orientierungshilfen, die sogenannten "Alignments".
Es sind 5 auf 5 Einheiten große Quadrate (außen schwarz, dann weiß, innen ein schwarzes Kästchen).
Die Spalten- und Zeilen-Positionen des innersten schwarzen Kästchens berechnet man wie folgt:
Gefunden habe ich diese Routine vom user "jgosar" bei "Stackoverflow" unter "Calculating the position of QR Code alignment patterns"
private int[] getAlignmentCoords(int version)
{
if (version <= 1) { return new int[0]; } // leeres Rückgabearray NUR bei Version 1
// für Version > 1
int anz = (version / 7) + 2; // Anzahl der Werte im Ergebnisfeld (möglich sind 2 bis 7)
int[] ergebnis = new int[anz];
ergebnis[0] = 6;
ergebnis[anz - 1] = 4 * version + 10; // vom rechten Rand aus das 7. Kästchen
if (anz == 2) { return ergebnis; } // Ende für Version 2 ... 6 mit 2 Rückgabewerten
// weiter nur für Version >= 7
ergebnis[anz - 2] = 2 * ((ergebnis[0] + ergebnis[anz - 1] * (anz - 2)) / ((anz - 1) * 2));
// nicht kürzen!!! INT-Divisionen
// Fehler im Vergleich zur Thonky-Tabelle bei Version 32: anz=6; e[0]=6; e[5]=138;
// e[4]=2*[ (6+138*4)/(5*2) ] = 2 *[558/10] = 2*55 = 110; 112 wäre richtig
if (version == 32) ergebnis[anz - 2] = 112;
// jetzt stimmen alle Werte mit der Thonky-Tabelle überein
// weiter nur für Version >= 14
int schrittweite = ergebnis[anz - 1] - ergebnis[anz - 2];
// Position vom rechten (letzten) minus Position vom vorletzten Alignment (s.o.)
for (int i = anz - 3; i > 0; i--)
ergebnis[i] = ergebnis[i + 1] - schrittweite; // von rechts nach links auffüllen
return ergebnis; // 4 RW (Version 14..20); 5 RW (21..27); 6 RW (28..34); 7 RW (35..40)
}
Beispiel mit Version 11: Dabei gibt es 17 + 4*11 Kästchen (61 K.) pro Zeile/Spalte
anz ergibt 11/7 + 2 = 1 + 2 = 3; Vorsicht: Integerdivision ohne Rest!
ergebnis[0] = 6;
ergebnis[2] = 4 * 11 + 10 = 54
ergebnis[1] = 2 * ( 6 + 54*1) / (2*2) = 30
Rückgabe des Arrays mit den Werten 6, 30 und 54
Damit lassen sich die Alignmentmitten über alle Kombinationen bestimmen (sie dürfen nicht in einem Finderbereich liegen --> die geklammerten Werte sind nicht erlaubt):
Zeile 6 und Spalten | (6) | 30 | (54) |
Zeile 30 und Spalten | 6 | 30 | 54 |
Zeile 54 und Spalten | (6) | 30 | 54 |
Das Muster für Version 11 sähe also so aus!
Spaltennummern rot; Zeilennummern blau
Eine schöne Tabelle findet Ihr bei Thonky.com:
Alignment-Positionen
Bei der Version 32 (Formel-Fehler s.o.) sind die Werte der Thonky-Tabelle "vernünftiger" als bei der obigen Formel - ohne die Korrektur! Mit der kleinen Korrekturzeile stimmt dann alles! Vorausgesetzt, dass die Werte der Thonky-Tabelle in Ordnung sind.