Skip to content

U0209 Vom Punkt zur Fläche

Erzeuge eine Bildsequenz vom Punkt zur Fläche durch das Hinzufügen progressiv wachsender – also prozentual größer werdender – Punkte (kreisförmige, schwarze Flächen) in sechs Einzelbildern. Der Rand kann bei Bedarf angeschnitten werden.

Erstelle insgesamt zwei verschiedene Bildsequenzen Füge die Möglichkeit (Funktion) des Anschnitts den Grundflächen hinzu.

Welche neuen Fragen ergeben sich? Was ist zu beobachten? Dokumentieren sie ihr Ergebnis in MKDocs.

Punkte Punkte

Reflexion:

Ich habe zuerst den Mausfaktor zu hoch eingestellt. Die Punkte waren dann irgendwann zu groß, um sie vernünftig anordnen zu können. Ich bin mir auch nicht sicher, ob ich die Aufgabe richtig verstanden habe, und es nicht pro Kachel eine prozentuale Erhöhung der Punktgröße geben sollte.

Ich habe im zweiten Bild den Mousefaktor reduziert, und zu pro positionierten Punkt die Größe erhöht. Ich habe auch beim zweiten Mal weniger Punkte genommen und alle 6 Kacheln der Reihe nach bepunktet, um nicht zu schnell eine nichthandelbare Größe zu erhalten. Der interessante Nebeneffekt ist, dass die Serie wie eine kosmische Katastrophe ausschaut. Der kleine Punkt In den Serien als Mond des Mittleren, der Große der kollidierende Himmelskörper. In der Serie Überlagern sich die Punkte in einem Umkreisen, ähnlich des Falken beim Paarungsrituals. Nur zerstörerischer. Müsste ich die Serie benennen, wäre sie zweigeteilt in 'Prolog' für die ersten drei Kacheln, und 'Untergang in drei Akten' für die letzten.

Zu beobachten ist: es stellt sich keine Flächenwirkung ein. Dafür hätte ich vermutlich Punkte in einem Raster anordnen und vergrößern müssen. Würde ich die Übung nocheimal machen, würde ich diesen Ansatz wählen, sofern die Fläche das Ziel der Übung ist. Ich habe auch interessante Kupferstichtechniken gesehen, die Flächen mit punkten ausfüllen und die Reliefstruktur durch einen vergrößerten Abstand der Punkte zueinander umsetzen. Durch die visuell verbundenen Leerstellen werden so Konturen angedeutet. Diese Technik scheint eine Studie ebenfalls zu lohnen.

Code:



// --- Einstellungen ---

int cols = 3;

int rows =3;

int mousefactor = 2;

float padding = 10;

float pointSize = 10;




float cellSize;

float startX, startY;



ArrayList<Dot> dots;



void setup() {

  size(1000, 700);

  dots = new ArrayList<Dot>();



  // Quadratgröße richtet sich nach Höhe

  cellSize = (height - padding * (rows + 1)) / rows;

  float totalWidth = cols * cellSize + (cols + 1) * padding;

  startX = (width - totalWidth) / 2 + padding;

  startY = padding;

}



void draw() {

  background(200); // Hintergrund leicht grau für Kontrast



  // Raster zeichnen

  for (int i = 0; i < cols; i++) {

    for (int j = 0; j < rows; j++) {

      float x = startX + i * (cellSize + padding);

      float y = startY + j * (cellSize + padding);

      fill(255);

      stroke(0);

      rect(x, y, cellSize, cellSize);

    }

  }



  // Punkte zeichnen

  for (Dot d : dots) {

    d.display();

  }



  // Punktgröße anzeigen

  fill(0);

  text("Punktgröße: " + pointSize, 10, height - 10);

}



void mousePressed() {

  // Punkt an Klickposition hinzufügen

  dots.add(new Dot(mouseX, mouseY, pointSize));
  mousefactor ++; // Schnipsel für U0209 (vergrößert Punkt nach jedem Klick)
  pointSize = pointSize + 0.75 * mousefactor;
}



void keyPressed() {

  if (key == '+' || key == '=') {

    pointSize += 10;

    if (pointSize > 1000) pointSize = 1000;

  }

  if (key == '\t') { // Lifeimprovement -> löscht alle Punkte nach TAB
   dots.clear();
   mousefactor = 2; // Schnipsel für U0209
   pointSize = 10; // Schnipsel für U0209
  }
  if (key == 'z') { // Lifeimprovement -> löscht letzten Punkt nach z
    if (dots.size() - 1 >= 0) {
     dots.remove(dots.size() - 1);
    }
  }

  if (key == '-' || key == '_') { // Punktgröße

    pointSize -= 10;

    if (pointSize < 2) pointSize = 2;

  }

}



// Punktklasse

class Dot {

  PVector pos;

  float size;



  Dot(float x, float y, float s) {

    pos = new PVector(x, y);

    size = s;

  }



  void display() {

    fill(0);

    noStroke();

    circle(pos.x, pos.y,  size);

  }

}