Punkt.java

public class Punkt {
  // stellt einen Punkt auf einer abstrakten 2d-Zeichenfläche dar
  // wird gleichzeitig auch als Verschiebungsvektor verwendet, ist also
  //   als Ortsvektor zu verstehen

  // abstrakte Zeichenfläche: 
  //    unendlich ausgedehnt 
  //    genaue Koordinaten (keine Pixel)
    
  protected double x, y;

  // Konstruktoren

  public Punkt(double x1, double y1) {
    x = x1;
    y = y1;
  }

  public Punkt() {
    // Standardpunkt: der Ursprung
    this(0.0, 0.0);
  }

  // öffentliche Methoden

  public void move(Punkt p) {
    // um p verschieben
    x += p.x;
    y += p.y;
  }

  public void scale(double s) {
    // skaliert um Faktor s, Bezugspunkt O
    // meint hier: als Vektor vom Ursprung
    x *= s;
    y *= s;
  }

  public void rotate(double alpha) {
    // dreht um Winkel alpha, Drehpunkt O
   
    double xn =  x * Math.cos(alpha) + y*Math.sin(alpha);
    y = -x * Math.sin(alpha) + y*Math.cos(alpha);
    x = xn;
  }

  public int getX() {
    // gibt die X-Koordinate des Punkts für den Bildschirm
    return (int) Math.round(x);
  }

  public int getY() {
    // gibt die Y-Koordinate des Punkts für den Bildschirm
    return (int) Math.round(y);
  }

  public String toString() {
    return "(" + x + ", " + y + ")";
  }
}