2D-Arrays & Pixelgrafiken
Informatik · Klasse 10 IMP · Gymnasium Baden-Württemberg · PRIMM-Methode
🎯 Worum geht's? Klasse 10–13 · 1–2 Unterrichtsstunden
Nach dieser Seite kannst du …
- Zeilen und Spalten eines 2D-Arrays mit Indizes ansprechen
- vorhersagen, welches Bild ein Programm in ein Pixel-Raster zeichnet
- Programme verändern, damit ein gewünschtes Bild entsteht
Vorwissen: Arrays, verschachtelte Schleifen
📝 Aufgaben
Jede Aufgabe hat fünf Schritte: Predict › Run › Investigate › Modify › Make. Wähle eine Aufgabe aus – oder nutze oben die Leiste „Aufgaben: 1, 2, 3 …“.
📖 Die PRIMM-Methode
Jede Aufgabe durchläuft fünf Phasen:
P – Predict
Was erzeugt der Code wohl?
R – Run
Grafik betrachten & analysieren.
I – Investigate
Code gezielt untersuchen.
M – Modify
Code für neues Ziel anpassen.
M – Make
Eigene Pixelgrafik programmieren!
💡 Was sind 2D-Arrays?
Ein 2D-Array ist wie eine Tabelle aus Zeilen und
Spalten.
In Java: int[][] bild = new int[zeilen][spalten];
—
jeder Eintrag bild[z][s]
speichert eine Farbe als RGB-Hex-Zahl.
Zwei ineinandergeschachtelte Schleifen befüllen alle Pixel.
🏅 Zuletzt verdiente Badges
Analysiere die Methode, ohne die Grafik anzusehen.
Aufruf: schachbrett(8)
(0+0) % 2? Was ergibt (0+1) % 2?
Welche Farbe erhält Pixel [0][0]?Sieh dir die erzeugte Pixelgrafik an.
Welche Farbe hat das Pixel bei Zeile 0, Spalte 1?
Was ergibt (z + s) % 2 für
z=3, s=3?
Warum werden zwei ineinandergeschachtelte Schleifen verwendet?
Passe die Methode so an, dass ein rot-blaues
Schachbrett entsteht
(0xFF0000 statt weiß, 0x0000FF statt schwarz).
Die Logik mit % 2 bleibt gleich – nur die Farben ändern sich.
Implementiere dreifarbenMuster: Statt schwarz/weiß sollen
drei Farben diagonal abwechseln.
Nutze (z + s) % 3 und eine Palette deiner Wahl.
Für groesse = 9 soll ein gleichmäßiges Muster entstehen.
| Farbe | Hex-Code |
|---|---|
| Rot | 0xFF4136 |
| Gelb | 0xFFDC00 |
| Blau | 0x0074D9 |
| Grün | 0x2ECC40 |
| Orange | 0xFF851B |
| Cyan | 0x7FDBFF |
palette ab und wähle den Index mit (z + s) % 3.Analysiere die Methode, ohne die Grafik anzusehen.
Aufruf: farbverlauf(16, 12)
rot für s=0? Was ist gruen für z=0?
Welche Farbe erscheint oben-links?Berechne: Welchen Hex-Wert hat das Pixel oben-rechts (z=0, s=15, breite=16)?
| Variable | Formel | Dein Wert |
|---|---|---|
| rot | (15 × 255) / 15 | |
| gruen | (0 × 255) / 11 | |
| blau | – |
Was bedeutet der Ausdruck
(rot << 16) | (gruen << 8) | blau?
Warum ist das Array als
int[hoehe][breite] deklariert (erst Zeilen, dann Spalten)?
Setze blau nicht auf 128, sondern berechne ihn so:
blau = 255 - rot.
Was ändert sich in der Grafik? Passe den Code an und prüfe.
blau ändert sich – rot ist schon berechnet.
Implementiere graustufen: Jedes Pixel soll einen
Graustufenwert erhalten,
der von links nach rechts dunkler wird.
Tipp: Bei Grau gilt rot == gruen == blau.
Für s=0 soll Weiß entstehen, für s=breite-1 Schwarz.
Aufruf: diagonalMuster(12)
(2+3) % 6 = ? →
palette[?]
Trage die Palette-Indizes für die erste Zeile (z=0, s=0 bis s=5) ein:
(z + s) % 6.Welcher Ausdruck statt
(z + s) erzeugt senkrechte Farbstreifen?
Warum stellt
idx = (z + s) % palette.length sicher, dass kein Array-Index-Fehler auftritt?
Ändere den Ausdruck so, dass waagerechte Streifen
entstehen
(alle Pixel in einer Zeile haben dieselbe Farbe).
Ändere nur den Index-Ausdruck (z + s).
Implementiere rahmenMuster: Der äußere Rahmen (1 Pixel Breite) soll
rot (0xFF0000),
der Rest weiß (0xFFFFFF) sein.
Für n = 10 soll ein weißes Quadrat mit rotem Rand entstehen.
Aufruf: rahmenKreuz(9)
Bestimme die Farbe (blau/rot/grau) für diese Pixel:
| Pixel | istRand? | istKreuz? | Farbe |
|---|---|---|---|
| [0][0] | Ja | Nein | |
| [4][4] | Nein | Ja | |
| [2][3] | Nein | Nein | |
| [0][4] | Ja | Ja |
Warum werden
boolean-Variablen für die Bedingungen verwendet?
Was passiert, wenn n
gerade ist (z. B. n=8)? Was ist dann die Mitte?
Ändere das Kreuz zu einem Diagonalkreuz:
Die Pixel auf den Diagonalen (z == s oder z + s == n - 1)
sollen rot sein, der Rahmen bleibt blau, der Hintergrund grau.
Implementiere zielscheibe: Die Farbe jedes Pixels hängt vom
Abstand zur Bildmitte ab.
Nutze abwechselnd zwei Farben je nach abstand % 2.
Tipp: Abstand (gerundet) = (int) Math.round(Math.sqrt((z-m)*(z-m) + (s-m)*(s-m)))
mit Mitte m = n / 2.
abstand % 2.Analysiere die Methode, ohne die Grafik anzusehen.
Aufruf: spiegelung(8)
s und (n-1-s)? Welche Spalten
erhalten dieselbe Farbe?
Welche Farbe haben die Pixel bild[2][1] und bild[2][6] bei n=8?
Was bewirkt n - 1 - s als
zweiter Spaltenindex?
Wie viele Spalten je Zeile werden bei n=8 tatsächlich
berechnet (der Rest wird gespiegelt kopiert)?
Ändere die Methode so, dass das Bild vertikal
gespiegelt wird
(oben ↔ unten, statt links ↔ rechts).
Ersetze dazu n - 1 - s durch den passenden Ausdruck für Zeilen.
Implementiere viertelSpiegelung: Das Bild soll in allen vier Quadranten
gespiegelt identisch sein. Berechne die Farbe nur für das obere-linke Viertel und kopiere es in die
übrigen drei.
Nutze (z % 4) + (s % 4) für die Farbberechnung des Grundmusters.
Analysiere die Methode, ohne die Grafik anzusehen.
Aufruf: zielscheibe(14)
Math.sqrt((z-m)*(z-m) + (s-m)*(s-m))? Wovon
hängt die Farbe ab?
Welchen Abstand hat Pixel [0][0] vom Mittelpunkt bei n=14 (m = 14 / 2 = 7)?
Formel: Math.sqrt((0-7)² + (0-7)²) ≈ ?
Warum wird % 2 auf den
gerundeten Abstand angewendet?
Was würde sich ändern, wenn man
% 3 statt % 2 verwendet?
Ändere die Zielscheibe so, dass sie drei Farben
statt zwei verwendet
(rot, weiß, blau – abwechselnd von innen nach außen). Nutze % 3 und eine Farb-Palette.
abstand % 3.
Implementiere ellipse: Statt eines Kreises soll eine Ellipse entstehen.
Verwende unterschiedliche Skalierungsfaktoren für x- und y-Richtung:
double rx = breite / 2.0, ry = hoehe / 2.0 und prüfe
(dz/ry)² + (ds/rx)² <= 1.
Pixel [z][s] liegt innerhalb der Ellipse, wenn:
((z - ry) / ry)² + ((s - rx) / rx)² ≤ 1
rx = breite / 2.0, ry = hoehe / 2.0. Ein Pixel liegt innen, wenn ((z − ry) / ry)² + ((s − rx) / rx)² ≤ 1.Bevor du deinen Code schreibst, plane deine Grafik.
Hier siehst du die Ergebnisse der ersten vier Aufgaben. Nutze sie als Inspiration.
Was haben alle vier Methoden gemeinsam?
Welchen Vorteil hat ein 2D-Array gegenüber einzelnen Variablen für jedes Pixel?
Wie viele Pixel hat ein
int[20][30]-Bild insgesamt?
Klicke auf das Raster, um Pixel einzufärben. Wähle eine Farbe und male dein Motiv. Dies entspricht dem manuellen Befüllen eines 2D-Arrays.
Schreibe eine eigene Java-Methode, die ein 2D-Array mit Farbwerten füllt.
Der Simulator führt deinen Code direkt aus. Verfügbar: z, s,
breite, hoehe, Math.*.
| Farbe | Hex-Code | Farbe | Hex-Code |
|---|---|---|---|
| Schwarz | 0x000000 |
Weiß | 0xFFFFFF |
| Rot | 0xFF0000 |
Blau | 0x0000FF |
| Grün | 0x00FF00 |
Gelb | 0xFFFF00 |
| Orange | 0xFF8800 |
Grau | 0x808080 |
🏅 Deine Badges
📊 Statistik
↺ Fortschritt zurücksetzen
Achtung: Alle gespeicherten Ergebnisse werden unwiderruflich gelöscht.
📄 Arbeitsblatt erstellen
Wähle aus, welche Bereiche auf das Arbeitsblatt kommen. Es enthält dann alle … Aufgaben dieser Seite aus diesen Bereichen – mit Kästchen zum Ankreuzen, leeren Tabellen und Platz zum Schreiben, ohne Lösungen und Tipps.