|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectconstruction.Segment
Repräsentiert eine Strecke im Raum. Eine Strecke ist ein endlicher Teilabschnitt
einer Geraden und definiert durch einen Start- und Endpunkt.
Diese Klasse stellt Methoden bereit, um die Verhältnisse zwischen
Strecken untereinander, Strecken und Ebenen und Strecken und Punkten zu
ermitteln.
Field Summary | |
static int |
LINE_CROSSING
Wenn der Schnittpunkt bei mindestens einer Gerade nicht innerhalb des Segments liegt. |
static int |
NO_CROSSING
Wenn kein Schnittpunkt existiert |
static int |
SEGMENT_CROSSING
Wenn der Schnittpunkt innerhalb der überprüften Segmente liegt |
Constructor Summary | |
Segment()
Erstellt ein Segment mit dem Startpunt (0, 0, 0) und dem Endpunkt (1, 1, 1). |
|
Segment(javax.vecmath.Point3f startPoint,
javax.vecmath.Point3f endPoint)
Erstellt ein Segment. |
|
Segment(javax.vecmath.Point3f startPoint,
javax.vecmath.Vector3f dirVec)
Erstellt ein Segment. |
Method Summary | |
java.lang.Object |
clone()
|
void |
get(javax.vecmath.Point3f startPoint,
javax.vecmath.Point3f endPoint)
Liefert den Startpunkt und den Endpunkt des Segments. |
int |
getCrossInfo(Segment other,
float epsilon,
float[] scaleFactor,
javax.vecmath.Point3f point)
Liefert Informationen über den Schnitt zweier Segmente. |
int |
getCrossInfo(javax.vecmath.Vector4f plane,
float[] scaleFactor,
javax.vecmath.Point3f point)
Liefert Informationen über den Schnitt eines Segments mit einer Ebene. |
void |
getDirectionVector(javax.vecmath.Vector3f dirVec)
Liefert den Richtungsvektor des Segments. dirVec = endPoint - startPoint. |
void |
getEndPoint(javax.vecmath.Point3f endPoint)
Liefert den Endpunkt des Segments. |
float |
getScaleFactor(javax.vecmath.Point3f point)
Gibt den Skalierunsfaktor zurück, der mit dem Richtungsvektor des Segments multipliziert, und mit dem Startpunkt addiert, den Punkt point ergibt. |
void |
getStartPoint(javax.vecmath.Point3f startPoint)
Liefert den Startpunkt des Segments. |
boolean |
isPointIn(javax.vecmath.Point3f point)
Ermittelt, ob ein Punkt sich innerhalb des Segments befindet. |
float |
length()
Gibt die Länge des Segments zurück. |
void |
scale(float s)
Skaliert das Segments. |
void |
set(javax.vecmath.Point3f startPoint,
javax.vecmath.Point3f endPoint)
Setzt die Werte des Segments neu. |
void |
set(javax.vecmath.Point3f startPoint,
javax.vecmath.Vector3f dirVec)
Setzt die Werte des Segments neu. |
void |
set(Segment other)
Setzt die Werte dieses Segments auf die Werte von other . |
java.lang.String |
toString()
|
Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
public static final int NO_CROSSING
public static final int SEGMENT_CROSSING
public static final int LINE_CROSSING
Constructor Detail |
public Segment(javax.vecmath.Point3f startPoint, javax.vecmath.Point3f endPoint)
startPoint
- Startpunkt des Segments.endPoint
- Endpunkt des Segments.public Segment()
public Segment(javax.vecmath.Point3f startPoint, javax.vecmath.Vector3f dirVec)
startPoint
- Startpunkt des Segments.dirVec
- Vektor, der ausgehend vom Startpunkt auf den Endpunkt zeigt.
Richtungsvektor der Geraden, auf der die Strecke liegt.Method Detail |
public void set(javax.vecmath.Point3f startPoint, javax.vecmath.Point3f endPoint)
startPoint
- Startpunkt des Segments.endPoint
- Endpunkt des Segments.public void set(Segment other)
other
.
other
- Segments, dessen Werte übernommen werden sollen.public void set(javax.vecmath.Point3f startPoint, javax.vecmath.Vector3f dirVec)
startPoint
- Startpunkt des Segments.dirVec
- Vektor, der ausgehend vom Startpunkt auf den Endpunkt zeigt.
Richtungsvektor der Geraden, auf der die Strecke liegt.public void getStartPoint(javax.vecmath.Point3f startPoint)
startPoint
- Punkt, in dem die Werte des Startpunktes gespeichert werden.public void getEndPoint(javax.vecmath.Point3f endPoint)
endPoint
- Punkt, in dem die Werte des Endpunktes gespeichert werden.public void getDirectionVector(javax.vecmath.Vector3f dirVec)
dirVec
- Vector, in dem die Werte des Richtungsvektors gespeichert werden.public void get(javax.vecmath.Point3f startPoint, javax.vecmath.Point3f endPoint)
startPoint
- Punkt, in dem die Werte des Startpunktes gespeichert werden.endPoint
- Punkt, in dem die Werte des Endpunktes gespeichert werden.public float length()
public void scale(float s)
s
- Skalierungsfaktor.public int getCrossInfo(javax.vecmath.Vector4f plane, float[] scaleFactor, javax.vecmath.Point3f point)
plane
- Die Ebene, mit der dieses Segment geschnitten werden soll.
Die ersten drei Werte (x, y, z) sind die Werte des Normalenvektors
der Ebene. Der vierte Wert (w) ist die Entfernung der Ebene vom
Koordinatenursprung. Es gilt die Normalenform:
E: x * px + y * py + z * py + w = 0;wobei
px, py, pz
die Punktkoordinaten sind.scaleFactor
- Das Segmente liegt auf einer Geraden, welche wie folgt
beschrieben ist:
p:=this.startPoint + r * this.dirVec;wobei
dirVec
berechnet wird:
dirVec = endPoint - startPoint;In
scaleFactor[0]
wird nun der Wert von r
gespeichert.point
- Wenn sich die Ebene und die Gerade schneiden, dann wird hier der
Schnittpunkt gespeichert.
scaleFactor
enthält den Skalierungsfaktor.scaleFactor
enthält den Skalierungsfaktor.
public int getCrossInfo(Segment other, float epsilon, float[] scaleFactor, javax.vecmath.Point3f point)
other
- Das Segment, mit dem dieses Segment geschnitten werden soll.epsilon
- Bestimmt die Genauigkeit, mit der entschieden wird, ob
sich die beiden Segmente schneiden oder nicht.
Nachdem r
und s
berechnet wurden, werden
die daraus folgenden Schnittpunkte je Gerade berechnet und
miteinander verglichen. Der Parameter wird für die Methode
Tuple3f.epsilonEquals(javax.vecmath.Tuple3f, float)
verwendet.scaleFactor
- Die Segmente liegen jeweils auf Geraden, welche wie folgt
beschrieben werden:
p:=this.startPoint + r * this.dirVec; p:=other.startPoint + s * other.dirVec;wobei
dirVec
jeweils berechnet wird:
dirVec = endPoint - startPoint;In
scaleFactor[0]
wird nun der Wert von r
gespeichert, in scaleFactor[1]
der Wert von s
.point
- Wenn sich die beiden Geraden schneiden, dann wird hier der
Schnittpunkt gespeichert.
NO_CROSSING
, wenn die Geraden sich nicht schneiden.
LINE_CROSSING
, wenn sich die Geraden, auf denen die
Segmente liegen, schneiden, nicht jedoch innerhalb beider
Segmente. Die scaleFactor
enthalten den jeweiligen
Skalierungsfaktor.SEGMENT_CROSSING
, wenn sich beide Segmente schneiden.
Die scaleFactor
enthalten den jeweiligen
Skalierungsfaktor.Tuple3f.epsilonEquals(javax.vecmath.Tuple3f, float)
public float getScaleFactor(javax.vecmath.Point3f point)
point
ergibt. Es gilt:
scaleFactor = getScaleFactor(point); point = startPoint + scaleFactor * dirVec;Dies gilt jedoch nur für den Fall, dass sich
point
auf
der Geraden des Segments befindet. Liegt point
nicht auf dieser
Geraden, wird Float.NaN
zurückgegeben.
point
- Der Punkt, der überprüft werden soll.
point
nicht auf der Geraden des Segments liegt, dann wird
Float.NaN
zurückgegeben.public boolean isPointIn(javax.vecmath.Point3f point)
point
- Der Punkt, der überprüft werden soll.
true
, wenn sich der Punkt innerhalb des Segments befindet,
sonst false
.public java.lang.String toString()
public java.lang.Object clone() throws java.lang.CloneNotSupportedException
java.lang.CloneNotSupportedException
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |