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;
}
}