Gerade.java

public class Gerade {
  // beschreibt Gerade in zwei Dimensionen
  
  // Datenfelder
  private double m;   // Steigung
  private double b;   // y-Achsenabschnitt
  
  // Methoden
  // Konstruktor
  public Gerade(double m1, double b1) {
    m = m1;
    b = b1;
  }
  
  public void verschiebe(double x, double y) {
    // verschiebt Gerade um Vektor (x, y)
    verschiebeX(x);
    verschiebeY(y);
  }
  
  public String toString() {
    // Ausgabe: y = m*x + b
    // an Vorzeichen von b anpassen
    if (b > 0) {
      return "y = " + m + "*x + " + b;
    } else if (b < 0) {
      return "y = " + m + "*x - " + (-b);
    } else {
      // b == 0!
      return "y = " + m + "*x";      
    }
    
  }
  
  private void verschiebeX(double x) {
    // verschiebt Gerade um x in x-Richtung
    b = b - m*x;
  }
  
  private void verschiebeY(double y) {
    // verschiebt Gerade um y in y-Richtung
    b = b + y;
  }
  
  public void drehe(double alpha) {
    // drehe Gerade um Winkel alpha (im Bogenmaß) um den Nullpunkt
    
    // neue Steigung aus Addition der Winkel
    double beta = Math.atan(m);    // Winkel der Geraden
    m = Math.tan(alpha + beta);
    
    // neuer y-Achsenabschnitt aus Punkt-Steigungsform
    // alter Punkt P = (0,b)
    // nach Drehung: P' = (-b sin(alpha), b cos(alpha))
    // b' = Py' - m'*Px'
    b = b*(Math.cos(alpha) + m*Math.sin(alpha));
  }
  
  public Punkt berechneSchnittpunkt(Gerade g1) {
    // bestimmt den Schnittpunkt der aktuellen Geraden und der Geraden g1 

    double xS = - (b - g1.b)/(m - g1.m);
    double yS = m*xS + b;
    
    Punkt schnittpunkt = new Punkt(xS, yS);
    return schnittpunkt;
  }
}