Benutzer-Werkzeuge

Webseiten-Werkzeuge


skriptsose2020:code-beispiele_aus_den_vorlesungnsvideos_sose2020

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
skriptsose2020:code-beispiele_aus_den_vorlesungnsvideos_sose2020 [2020/04/29 17:55]
d.golovko angelegt
skriptsose2020:code-beispiele_aus_den_vorlesungnsvideos_sose2020 [2020/06/18 01:10] (aktuell)
d.golovko
Zeile 1: Zeile 1:
 ====Code-Beispiele aus den Vorlesungsvideos SoSe2020===== ====Code-Beispiele aus den Vorlesungsvideos SoSe2020=====
  
-==Woche 2: Methoden===+===Woche 2: Rekapitulation Woche 1 und Start in die Woche 2=== 
 +<hidden Strings>​ 
 +<code java> 
 +int counter ​1; // counts how many times draw() has run 
 +void setup() { 
 +}
  
 +void draw() {
 +  String word1 = "​Hallo";​
 +  String word2 = "​Person";​
 +  System.out.println(word1 + " " + word2 + " " + counter); // alternative to println()
 +  counter++;
 +}
 +</​code>​
 +</​hidden>​
 +
 +<hidden Konstanten>​
 +<code java>
 +int pos = 0; // coordinates of the circle center
 +final int SIZE_CIRCLE = 100; // circle diameter
 +
 +void setup() {
 +  size(600, 400);
 +}
 +
 +void draw() {
 +  background(200);​
 +  circle(pos, pos, SIZE_CIRCLE);​
 +  pos++;
 +}
 +</​code>​
 +</​hidden>​
 +\\
 +
 +===Woche 2: Arrays===
 <hidden Code> <hidden Code>
 +<code java>
 +int punkteStud1 = 11;
 +int punkteStud2 = 9;
 +int punkteStud3 = 8;
 +int punkteStud4 = 12;
 +//...
 +
 +//Arrays anlegen
 +//Variante 1
 +int[] punkteStudVar1 = new int[4];
 +punkteStudVar1[0] = 11;
 +punkteStudVar1[1] = 9;
 +punkteStudVar1[2] = 8;
 +punkteStudVar1[3] = 12;
 +
 +//Variante 2
 +int[] punkteStudVar2 = {11,​9,​8,​12};​
 +
 +//Werte ändern und auslesen
 +punkteStudVar2[2] = 10;
 +
 +punkteStudVar1[2] = punkteStudVar2[2];​
 +
 +//Länge von Arrays
 +//!Wichtig! Arrays fangen bei 0 an
 +int arrayLange = punkteStudVar2.length;​
 +println(arrayLaenge);​
 +
 +//​Zweidimensionale Arrays
 +int[][] StudentenHA = new int[4][2];
 +StudentenHA[0][0] = 11;
 +StudentenHA[1][0] = 9;
 +StudentenHA[2][0] = 8;
 +StudentenHA[3][0] = 12;
 +
 +StudentenHA[0][1] = 8;
 +StudentenHA[1][1] = 13;
 +StudentenHA[2][1] = 15;
 +StudentenHA[3][1] = 9;</​code>​
 +</​hidden>​
 +
 +\\
 +===Woche 2: Schleifen===
 +<hidden while und for>
 +<code java>
 +void setup(){
 +  ​
 +  int x=0;
 +  int y=-10;
 +  while (x>y){
 +    y++;
 +    print (y+", ");
 +  }
 +
 +  println();
 +
 +
 +  for (int i = 0; i<20; i++){
 +    print (i +", ");
 +  }
 +
 +}
 +
 +void draw(){
 +}
 +</​code>​
 +</​hidden>​
 +
 +<hidden Beispiel mit Arrays>
 +<code java>
 +int[] intArray0 = {0,​1,​2,​3,​4,​5,​6,​7,​8,​9};​ //​Deklaration und initialisierung von intArray0, alle Werte sind fest.
 +
 +int[] intArray2 = new int[10];//​Deklaration und initialisierung von intArray2
 +
 +void setup(){
 + 
 +  ​
 +  intArray2[9] = 23;
 +  ​
 +  println("​Länge von intArray0: "​+intArray0.length);​
 +  println("​Länge von intArray2: "​+intArray2.length);​
 +
 +
 +
 +
 +
 +  print("​intArray0:​["​);​ // Gebe "​intArray0:​["​ aus (ohne Zeilenumbruch)
 +  ​
 +  int counter = 0; // Lege Variable counter zum durchgehen des Arrays-0 an
 +
 +  while (counter < intArray0.length){ //Solange counter kleiner ist als die Arraylänge tue:
 +    ​
 +    print(intArray0[counter]+",​ "); //Gebe den Arrayeintrag an der Stelle "​counter"​ aus.
 +    counter++; //Erhoehe counter um 1.
 +  }
 +  ​
 +  println("​]"​);​
 +  ​
 +  ​
 +  print("​intArray2:​["​);​
 +  for ( int i = 0; i < intArray2.length;​ i++){
 +    print(intArray2[i]+",​ ");
 +  }
 +  println("​]"​);​
 +  ​
 +  ​
 +}
 +
 +
 +void  draw(){
 +}
 +</​code>​
 +</​hidden>​
 +
 +<hidden Beispiel mit zweidimensionalen Arrays>
 +<code java>
 +int[][] intArray0 = {{0,​1,​2,​3,​4,​5,​6,​7,​8,​9,​10},​{0,​1,​2,​3,​4,​5,​6,​7,​8,​9},​{0,​1,​2,​3,​4,​5,​6,​7,​8,​9},​
 +{0,​1,​2,​3,​4,​5,​6,​7,​8,​9},​{0,​1,​2,​3,​4,​5,​6,​7,​8,​9},​{0,​1,​2,​3,​4,​5,​6,​7,​8,​9},​
 +{0,​1,​2,​3,​4,​5,​6,​7,​8,​9},​{0,​1,​2,​3,​4,​5,​6,​7,​8,​9},​{0,​1,​2,​3,​4,​5,​6,​7,​8,​9},​{0,​1,​2,​3,​4,​5,​6,​7,​8,​9}}; ​
 +//​Deklaration und initialisierung von intArray0
 +
 +int[][] intArray2 = new int[10][10];//​Deklaration und initialisierung von intArray2
 +
 +void setup(){
 + 
 +   //​setze einige werte
 +  intArray2[9][2] = 92;  ​
 +  intArray2[9][9] = 99;
 +  intArray2[1][1] = 11;
 +  ​
 +  //gebe längen der arrays aus 
 +  println("​Länge von intArray0: "​+intArray0.length);​
 +  println("​Länge von intArray2: "​+intArray2.length);​
 +  println();
 +  println();
 +
 +   
 +  /*Gebe das gesamte 2D Array intArray0 aus.*/
 +   
 +  int zeile = 0; // Lege Variable counter zum durchgehen des Arrays-0 an
 +  while (zeile < intArray0.length){ //Solange counter kleiner ist als die Arraylänge tue:
 +    ​
 +    int spalte= 0;
 +    while (spalte< intArray0[zeile].length){
 +       ​print(intArray0[zeile][spalte] + " "); //Gebe den Arrayeintrag an der stelle [zeile][spalte] aus.
 +       ​spalte++;​ //Erhoehe spalte um 1.
 +    }
 +    ​
 +    println();
 +    zeile++; //Erhoehe zeile um 1.
 +  }
 +  ​
 +  ​
 +  //​Zeilenumbrüche für die übersichtlichkeit
 +  println();
 +  println();
 +  ​
 +  ​
 +  ​
 +  /*Gebe das gesamte 2D Array intArray2 aus.*/
 +  ​
 +  for ( int z = 0; z < intArray2.length;​ z++){ // z gibt die zeile an.
 +    ​
 +    for (int s = 0; s <​intArray2[z].length;​ s++){ //s gibt die Spalte an.
 +      print(intArray2[z][s] + "​\t"​);​ // Gebe den Eintrag [z][s] aus.
 +    }
 +    ​
 +    println();
 +  }
 +  ​
 +  ​
 +}
 +
 +
 +void  draw(){
 +  ​
 +}
 +</​code>​
 +</​hidden>​
 +\\
 +===Woche 2: Methoden====
 +
 +<hidden Beispeiele von Methoden>​
 <code java> <code java>
 void setup() { void setup() {
Zeile 52: Zeile 268:
 void greet() { void greet() {
   println("​Hallo Welt"​);​   println("​Hallo Welt"​);​
 +}
 +</​code>​
 +</​hidden>​
 +\\
 +
 +===Woche 3: Steuerung eines zweirädigen Roboters===
 +
 +<hidden Über globale Variablen>​
 +<code java>
 +float posX = 300; // x coordinate of the circle center
 +float posY = 200; // y coordinate of the circle center
 +float angle = PI/4; // current direction of the robot
 +final int RADIUS = 50; // radius of the robot
 +
 +
 +void setup() {
 +  size(600, 400);
 +}
 +
 +void draw() {
 +  background(200);​
 +  show();
 +  move(4);
 +  turn(0.05);
 +}
 +
 +// Turns the robot by the given angle value
 +void turn(float angleDiff) {
 +  angle = angle + angleDiff;
 +}
 +
 +// Moves the robot forward by the given distance
 +void move(float distance) {
 +  posX = posX + distance * cos(angle);
 +  posY = posY + distance * sin(angle);
 +}
 +
 +// Draws the robot
 +void show() {
 +  circle(posX,​ posY, RADIUS*2); ​
 +  line(posX, posY, posX + RADIUS * cos(angle), posY + RADIUS * sin(angle));​
 +}
 +
 +
 +</​code>​
 +</​hidden>​
 +\\
 +
 +===Woche 3: Klassen===
 +
 +<hidden Haupt-Sketch>​
 +<code java>
 +Robot robot1; // large robot
 +Robot robot2; // small robot
 +
 +void setup() {
 +  size(600, 400);
 +  robot1 = new Robot(300, 200, PI/4, 50); 
 +  robot2 = new Robot(500, 200, PI, 20);
 +}
 +
 +void draw() {
 +  background(200);​
 +  robot1.show();​
 +  robot2.show();​
 +  robot1.move(4);​
 +  robot1.turn(0.05);​
 +  robot2.move(2);​
 +  float distance = robot1.calculateDistance(robot2);​
 +  if (distance <= 0) { 
 +  // dies ist anders als im Vorlesungs-Video,​ weil die Radienlängen in der Methode calculateDistance() abgezogen werden
 +    robot1.turn(PI);​
 +    robot2.turn(PI);​
 +  }
 +}
 +</​code>​
 +</​hidden>​
 +<hidden Klasse Robot>
 +<code java>
 +class Robot {
 +
 +  // 1. Attribute
 +  float posX; // x coordinate of the circle center
 +  float posY; // y coordinate of the circle center
 +  float angle; // current direction of the robot
 +  int radius; // radius of the robot
 +
 +
 +  // 2. Konstruktor,​ x: x coordinate of the center, y: y coordinate of the center, direction: where the roboter is looking towards, size: radius of the robot
 +  Robot(float posX, float posY, float direction, int size) {
 +    this.posX = posX;
 +    this.posY = posY;
 +    this.angle = direction;
 +    this.radius = size;
 +  }
 +
 +  // 3. Methoden
 +  // Turns the robot by the given angle value
 +  void turn(float angleDiff) {
 +    this.angle = this.angle + angleDiff;
 +  }
 +
 +  // Moves the robot forward by the given distance
 +  void move(float distance) {
 +    posX = posX + distance * cos(angle);
 +    posY = posY + distance * sin(angle);
 +  }
 +
 +  // Draws the robot
 +  void show() {
 +    circle(posX,​ posY, radius*2); ​
 +    line(posX, posY, posX + radius * cos(angle), posY + radius * sin(angle));​
 +  }
 +
 +  // Calculates distance from this robot to the other
 +  float calculateDistance(Robot other) {
 +    float deltaX = this.posX - other.posX;
 +    float deltaY = this.posY - other.posY;
 +    float distance = sqrt(deltaX*deltaX + deltaY*deltaY);​
 +    return distance - this.radius - other.radius;​ // dies ist anders als im Vorlesungs-Video
 +  }
 +}
 +</​code>​
 +</​hidden>​
 +\\
 +
 +===Woche 4: Bibliotheken===
 +{{anchor:​woche4}}
 +
 +<hidden Video-Bibliothek:​ Abzug des Hintergrunds>​
 +<code java>
 +/**
 + * Background Subtraction ​
 + * by Golan Levin. ​
 + *
 + * Detect the presence of people and objects in the frame using a simple
 + * background-subtraction technique. To initialize the background, press a key.
 + */
 +
 +
 +import processing.video.*;​
 +
 +int numPixels;
 +int[] backgroundPixels;​
 +Capture video;
 +
 +void setup() {
 +  size(640, 480); 
 +  ​
 +  // This the default video input, see the GettingStartedCapture ​
 +  // example if it creates an error
 +  //video = new Capture(this,​ 160, 120);
 +  String[] cameras = Capture.list();​
 +  video = new Capture(this,​ cameras[0]);​
 +  ​
 +  // Start capturing the images from the camera
 +  video.start();  ​
 +  ​
 +  numPixels = video.width * video.height;​
 +  // Create array to store the background image
 +  backgroundPixels = new int[numPixels];​
 +  // Make the pixels[] array available for direct manipulation
 +  loadPixels();​
 +}
 +
 +void draw() {
 +  if (video.available()) {
 +    video.read();​ // Read a new video frame
 +    video.loadPixels();​ // Make the pixels of video available
 +    // Difference between the current frame and the stored background
 +    int presenceSum = 0;
 +    for (int i = 0; i < numPixels; i++) { // For each pixel in the video frame...
 +      // Fetch the current color in that location, and also the color
 +      // of the background in that spot
 +      color currColor = video.pixels[i];​
 +      color bkgdColor = backgroundPixels[i];​
 +      // Extract the red, green, and blue components of the current pixel'​s color
 +      int currR = (currColor >> 16) & 0xFF;
 +      int currG = (currColor >> 8) & 0xFF;
 +      int currB = currColor & 0xFF;
 +      // Extract the red, green, and blue components of the background pixel'​s color
 +      int bkgdR = (bkgdColor >> 16) & 0xFF;
 +      int bkgdG = (bkgdColor >> 8) & 0xFF;
 +      int bkgdB = bkgdColor & 0xFF;
 +      // Compute the difference of the red, green, and blue values
 +      int diffR = abs(currR - bkgdR);
 +      int diffG = abs(currG - bkgdG);
 +      int diffB = abs(currB - bkgdB);
 +      // Add these differences to the running tally
 +      presenceSum += diffR + diffG + diffB;
 +      // Render the difference image to the screen
 +      pixels[i] = color(diffR,​ diffG, diffB);
 +      // The following line does the same thing much faster, but is more technical
 +      //pixels[i] = 0xFF000000 | (diffR << 16) | (diffG << 8) | diffB;
 +    }
 +    updatePixels();​ // Notify that the pixels[] array has changed
 +    println(presenceSum);​ // Print out the total amount of movement
 +  }
 +}
 +
 +// When a key is pressed, capture the background image into the backgroundPixels
 +// buffer, by copying each of the current frame'​s pixels into it.
 +void keyPressed() {
 +  video.loadPixels();​
 +  arraycopy(video.pixels,​ backgroundPixels);​
 +}
 +</​code>​
 +</​hidden>​
 +
 +<hidden OpenCV: Gesichtserkennung>​
 +<code java>
 +import gab.opencv.*;​
 +import java.awt.Rectangle;​
 +import processing.video.*;​
 +
 +OpenCV opencv;
 +Rectangle[] faces;
 +Capture video;
 +
 +void setup() {
 +  size(640, 480);
 +  video = new Capture(this,​ Capture.list()[0]);​
 +  opencv = new OpenCV(this,​ width, height);
 +  opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);  ​
 +  ​
 +  video.start();​
 +}
 +
 +void draw() {
 +  video.read();​
 +  opencv.loadImage(video);​
 +  ​
 +  image(video,​ 0, 0); // display a video frame on the drawing canvas
 +
 +  noFill();
 +  stroke(0, 255, 0);
 +  strokeWeight(3);​
 +  Rectangle[] faces = opencv.detect();​
 +  for (int i = 0; i < faces.length;​ i++) {
 +    rect(faces[i].x,​ faces[i].y, faces[i].width,​ faces[i].height);​
 +  }
 +}
 +</​code>​
 +</​hidden>​
 +
 +<hidden Bildverarbeitung:​ Kantendetektion>​
 +<code java>
 +import gab.opencv.*;​
 +import processing.video.*;​
 +
 +OpenCV opencv;
 +Capture video;
 +
 +void setup() {
 +  ​
 +  size(640, 480);
 +  video = new Capture(this,​ Capture.list()[0]);​
 +  opencv = new OpenCV(this,​ width, height);
 +  video.start();​
 +
 +}
 +
 +void draw() {
 +  video.read();​ // read current video frame 
 +  opencv.loadImage(video);​ // and load it into the opencv object
 +  opencv.findCannyEdges(20,​ 75); // find edges
 +  PImage canny = opencv.getSnapshot();​ // get the black-and-white resulting image
 +  image(canny,​ 0, 0); // display the image on the drawing canvas
 +}
 +</​code>​
 +</​hidden>​
 +
 +<hidden Bildverarbeitung:​ Hough-Transformation>​
 +<code java>
 +import gab.opencv.*;​
 +import processing.video.*;​
 +
 +OpenCV opencv;
 +Capture video;
 +
 +void setup() {
 +
 +  size(640, 480);
 +  video = new Capture(this,​ Capture.list()[0]);​
 +  opencv = new OpenCV(this,​ width, height);
 +  video.start();​
 +}
 +
 +void draw() {
 +  video.read();​ // read current video frame 
 +  opencv.loadImage(video);​ // and load it into the opencv object
 +  opencv.findCannyEdges(20,​ 75); // find edges
 +  opencv.getSnapshot();​ // get the black-and-white resulting image
 +  image(video,​ 0, 0); // display the video frame on the drawing canvas
 +
 +  // Find lines with Hough line detection
 +  // Arguments are: threshold, minLength, maxLineGap
 +  ArrayList<​Line>​ lines = opencv.findLines(100,​ 30, 20);
 +
 +  for (Line line : lines) {
 +    // lines include angle in radians, measured in double precision
 +    // so we can select out vertical and horizontal lines
 +    // They also include "​start"​ and "​end"​ PVectors with the position
 +    if (line.angle >= radians(0) && line.angle < radians(1)) {
 +      stroke(0, 255, 0);
 +      line(line.start.x,​ line.start.y,​ line.end.x, line.end.y);​
 +    }
 +
 +    if (line.angle > radians(89) && line.angle < radians(91)) {
 +      stroke(255, 0, 0);
 +      line(line.start.x,​ line.start.y,​ line.end.x, line.end.y);​
 +    }
 +  }
 } }
 </​code>​ </​code>​
 </​hidden>​ </​hidden>​
  
skriptsose2020/code-beispiele_aus_den_vorlesungnsvideos_sose2020.1588175705.txt.gz · Zuletzt geändert: 2020/04/29 17:55 von d.golovko