/*
* Datei: Gerade2D.java
* Autor(en): Lukas K�nig
* Java-Version: 6.0
* Letzte Aenderung: 23.12.2008
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/
package fmg.fmg8.graphVis.zeichenModi;
import fmg.fmg8.umgebung2D.Vektor2D;
/**
* Implementierung einer Strecke.
*
* @author Lukas K�nig
*/
public class Strecke2D {
/**
* Der Anfangspunkt der Strecke.
*/
private Vektor2D anfPkt;
/**
* Der Endpunkt der Strecke.
*/
private Vektor2D endPkt;
/**
* Konstruktor.
*
* @param anfang Der Anfangspunkt der Geraden.
* @param ende Der Endpunkt der Geraden.
*/
public Strecke2D(final Vektor2D anfang, final Vektor2D ende) {
this.anfPkt = new Vektor2D(anfang);
this.endPkt = new Vektor2D(ende);
}
/**
* Konstruktor.
*
* @param s Die andere Strecke, von der die Endpunkte �bernommen werden.
*/
public Strecke2D(final Strecke2D s) {
this.anfPkt = s.anfPkt;
this.endPkt = s.endPkt;
}
/**
* @return Returns the anfPkt.
*/
public Vektor2D getAnfPkt() {
return this.anfPkt;
}
/**
* @return Returns the endPkt.
*/
public Vektor2D getEndPkt() {
return this.endPkt;
}
/**
* Gibt die Richtung der Gerade normiert zur�ck.
*
* @return Die Richtung der Geraden.
*/
public Vektor2D getNormRicht() {
Vektor2D richt = new Vektor2D(this.endPkt);
richt.sub(anfPkt);
richt.normal();
return richt;
}
/**
* @return Die L�nge der Strecke.
*/
public double getLaenge() {
return this.anfPkt.distanz(this.endPkt);
}
/**
* @param anfang The anfPkt to set.
*/
public void setAnfPkt(final Vektor2D anfang) {
this.anfPkt = anfang;
}
/**
* @param ende The endPkt to set.
*/
public void setEndPkt(final Vektor2D ende) {
this.endPkt = ende;
}
/**
* Berechnet den Schnttpunkt der beiden Strecken this und q.
*
* @param q Die andere Strecke.
*
* @return Der Schnittpunkt von g ung h. Wenn die Strecken keinen
* Schnittpunkt haben, wird <code>null</code> zur�ckgegeben.
*/
public Vektor2D schnPkt(final Strecke2D q) {
Vektor2D vp, vq;
Gerade2D g, h;
vp = this.getNormRicht();
vq = q.getNormRicht();
g = new Gerade2D(this.anfPkt, vp);
h = new Gerade2D(q.anfPkt, vq);
Vektor2D strSchnPkt = g.schnPkt(h);
if (strSchnPkt == null) {
return null;
}
if (strSchnPkt.istInRechteckOR(this.anfPkt, this.endPkt)
&& strSchnPkt.istInRechteckOR(q.anfPkt, q.endPkt)) {
return strSchnPkt;
} else {
return null;
}
}
/**
* @return Der Text.
*/
@Override
public String toString() {
return "<" + this.anfPkt + " - " + this.endPkt + ">";
}
}