construction
Class Segment

java.lang.Object
  extended byconstruction.Segment

public class Segment
extends java.lang.Object

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.

Version:
1.0.1 (2005/01/31)
Author:
Martin Hedler

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

NO_CROSSING

public static final int NO_CROSSING
Wenn kein Schnittpunkt existiert

See Also:
Constant Field Values

SEGMENT_CROSSING

public static final int SEGMENT_CROSSING
Wenn der Schnittpunkt innerhalb der überprüften Segmente liegt

See Also:
Constant Field Values

LINE_CROSSING

public static final int LINE_CROSSING
Wenn der Schnittpunkt bei mindestens einer Gerade nicht innerhalb des Segments liegt.

See Also:
Constant Field Values
Constructor Detail

Segment

public Segment(javax.vecmath.Point3f startPoint,
               javax.vecmath.Point3f endPoint)
Erstellt ein Segment. Die angegebenen Parameter werden kopiert.

Parameters:
startPoint - Startpunkt des Segments.
endPoint - Endpunkt des Segments.

Segment

public Segment()
Erstellt ein Segment mit dem Startpunt (0, 0, 0) und dem Endpunkt (1, 1, 1).


Segment

public Segment(javax.vecmath.Point3f startPoint,
               javax.vecmath.Vector3f dirVec)
Erstellt ein Segment. Die angegebenen Parameter werden kopiert.

Parameters:
startPoint - Startpunkt des Segments.
dirVec - Vektor, der ausgehend vom Startpunkt auf den Endpunkt zeigt. Richtungsvektor der Geraden, auf der die Strecke liegt.
Method Detail

set

public void set(javax.vecmath.Point3f startPoint,
                javax.vecmath.Point3f endPoint)
Setzt die Werte des Segments neu. Die angegebenen Parameter werden kopiert.

Parameters:
startPoint - Startpunkt des Segments.
endPoint - Endpunkt des Segments.

set

public void set(Segment other)
Setzt die Werte dieses Segments auf die Werte von other.

Parameters:
other - Segments, dessen Werte übernommen werden sollen.

set

public void set(javax.vecmath.Point3f startPoint,
                javax.vecmath.Vector3f dirVec)
Setzt die Werte des Segments neu. Die angegebenen Parameter werden kopiert.

Parameters:
startPoint - Startpunkt des Segments.
dirVec - Vektor, der ausgehend vom Startpunkt auf den Endpunkt zeigt. Richtungsvektor der Geraden, auf der die Strecke liegt.

getStartPoint

public void getStartPoint(javax.vecmath.Point3f startPoint)
Liefert den Startpunkt des Segments.

Parameters:
startPoint - Punkt, in dem die Werte des Startpunktes gespeichert werden.

getEndPoint

public void getEndPoint(javax.vecmath.Point3f endPoint)
Liefert den Endpunkt des Segments.

Parameters:
endPoint - Punkt, in dem die Werte des Endpunktes gespeichert werden.

getDirectionVector

public void getDirectionVector(javax.vecmath.Vector3f dirVec)
Liefert den Richtungsvektor des Segments. dirVec = endPoint - startPoint.

Parameters:
dirVec - Vector, in dem die Werte des Richtungsvektors gespeichert werden.

get

public void get(javax.vecmath.Point3f startPoint,
                javax.vecmath.Point3f endPoint)
Liefert den Startpunkt und den Endpunkt des Segments.

Parameters:
startPoint - Punkt, in dem die Werte des Startpunktes gespeichert werden.
endPoint - Punkt, in dem die Werte des Endpunktes gespeichert werden.

length

public float length()
Gibt die Länge des Segments zurück.

Returns:
Die Länge des Segments.

scale

public void scale(float s)
Skaliert das Segments. Der Startpunkt bleibt erhalten.

Parameters:
s - Skalierungsfaktor.

getCrossInfo

public int getCrossInfo(javax.vecmath.Vector4f plane,
                        float[] scaleFactor,
                        javax.vecmath.Point3f point)
Liefert Informationen über den Schnitt eines Segments mit einer Ebene. Entweder schneidet die Gerade auf welcher das Segment liegt, die Ebene nicht, oder die Gerade schneidet zwar die Ebene, jedoch nicht innerhalb des Segments, oder das Segment schneidet die Ebene.

Parameters:
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.
Returns:
  • NO_CROSSING, wenn sich die Gerade und die Ebene nicht schneiden.
  • LINE_CROSSING, wenn die Gerade, auf der das Segment liegt, die Ebene schneidet, nicht jedoch innerhalb des Segments. Der scaleFactor enthält den Skalierungsfaktor.
  • SEGMENT_CROSSING, wenn sich das Segmente und die Ebene schneiden. Der scaleFactor enthält den Skalierungsfaktor.

getCrossInfo

public int getCrossInfo(Segment other,
                        float epsilon,
                        float[] scaleFactor,
                        javax.vecmath.Point3f point)
Liefert Informationen über den Schnitt zweier Segmente. Dei beiden Segmente können sich nicht schneiden, die Geraden, auf denen sich die Segmente befinden können sich schneiden, oder die Segment können sich schneiden.

Parameters:
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.
Returns:
  • 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.
See Also:
Tuple3f.epsilonEquals(javax.vecmath.Tuple3f, float)

getScaleFactor

public 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. 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.

Parameters:
point - Der Punkt, der überprüft werden soll.
Returns:
Der errechnete Skalierungsfaktor. Wenn der Punkt point nicht auf der Geraden des Segments liegt, dann wird Float.NaN zurückgegeben.

isPointIn

public boolean isPointIn(javax.vecmath.Point3f point)
Ermittelt, ob ein Punkt sich innerhalb des Segments befindet.

Parameters:
point - Der Punkt, der überprüft werden soll.
Returns:
true, wenn sich der Punkt innerhalb des Segments befindet, sonst false.

toString

public java.lang.String toString()

clone

public java.lang.Object clone()
                       throws java.lang.CloneNotSupportedException
Throws:
java.lang.CloneNotSupportedException