Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

skript:klassen

Dies ist eine alte Version des Dokuments!




Klassen

1. Steuerung eines Roboters mit Hilfe einer Klasse

Programm, welches einen Roboter vorwärts bewegen und drehen lässt. Realisierung mit Klassen (Processing / Java):

Im Sketch-Tab:

Haupttab.pde
Robot myRobot = new Robot(25, 100, 100, 0);
 
void setup() {
  size(600, 400);
}
 
void draw() {
  clear();
  myRobot.drawRobot();
  myRobot.move(4);
  myRobot.turn(0.1);
}

Im neuen Tab „Robot“:

Robot.pde
class Robot {
  // Attribute:
  int radius; // Radius des Roboters
  float xPos; // x-Position des Roboters
  float yPos; // y-Position des Roboters
  float angle; // Richtung des Roboters
 
  /*
   * Konstruktor
   */
   Robot(int paramRadius, float paramXPos, float paramYPos, float paramAngle) {
     this.radius = paramRadius;
     this.xPos = paramXPos;
     this.yPos = paramYPos;
     this.angle = paramAngle;
   }
 
/*
 * Zeichnet den Roboter
 */
  void drawRobot() {
    ellipse(xPos, yPos, radius*2, radius*2); 
    // *2, weil die ellipse-Funktion den Diameter verwendet
    line(xPos, yPos, xPos + radius * cos(angle), yPos + radius * sin(angle));
    // Linie zwischen dem Roboterzentrum und dem Roboterrand in die Bewegungsrichtung
  }
 
/*
 * Bewegt den Roboter nach vorne in seine Richtung
 */
  void move(float distance) {
    xPos = xPos + distance * cos(angle);
    yPos = yPos + distance * sin(angle);
  }
 
/*
 * Rotiert den Roboter
 */
  void turn(float angleDiff) {
    angle = angle + angleDiff;
  }
}

2. Zwei Roboter auf der gleichen Zeichenfläche

Haupttab.pde
Robot robot1; // Der 1. Roboter  
Robot robot2; // Der 2. Roboter
 
void setup() 
{
  size(600, 400);
  robot1 = new Robot(25, 300, 200, PI/4); // den 1. Roboter initialisieren
  robot2 = new Robot(50, 50, 200, 0); // den 2. Roboter initialisieren
}
 
void draw() {
  clear();
  robot1.drawRobot(); // beide Roboter zeichnen
  robot2.drawRobot();
  robot1.turn(0.1); // beide Roboter bewegen
  robot1.move(4);
  robot2.move(2);
  // Falls die beiden zu nah sind, sollen sie sich umdrehen:
  if (robot1.radius + robot2.radius >= robot1.distance(robot2)) {
    robot1.turn(PI);
    robot2.turn(PI);
  }
}

Im neuen Tab „Robot“:

Robot.pde
class Robot {
 
  // Attribute:
  int radius; // Radius des Roboters
  float xPos; // x-Position des Roboters
  float yPos; // y-Position des Roboters
  float angle; // Richtung des Roboters
 
  /*
   * Konstruktor
   */
  Robot(int paramRadius, float paramXPos, float paramYPos, float paramAngle) {
    this.radius = paramRadius;
    this.xPos = paramXPos;
    this.yPos = paramYPos;
    this.angle = paramAngle;
  }
 
  // Methoden:
  /*
   * Berechnet die Entfernung zwischen dem Zentrum von diesem Roboter und vom anderen Roboter
   */
  float distance(Robot other) {
    float deltaX = this.xPos - other.xPos;
    float deltaY = this.yPos - other.yPos;
    float dist = sqrt((sq(deltaX) + sq(deltaY)));
    return dist;
  }
 
 
  /*
   * Zeichnet den Roboter
   */
  void drawRobot() {
    ellipse(xPos, yPos, radius*2, radius*2); 
    // *2, weil die ellipse-Funktion den Diameter verwendet
    line(xPos, yPos, xPos + radius * cos(angle), yPos + radius * sin(angle));
    // Linie zwischen dem Roboterzentrum und dem Roboterrand in die Bewegungsrichtung
  }
 
  /*
   * Bewegt den Roboter nach vorne in seine Richtung
   */
  void move(float distance) {
    xPos = xPos + distance * cos(angle);
    yPos = yPos + distance * sin(angle);
  }
 
  /*
   * Dreht den Roboter
   */
  void turn(float angleDiff) {
    angle = angle + angleDiff;
  }
}
skript/klassen.1525880783.txt.gz · Zuletzt geändert: 2018/05/09 17:46 von d.golovko