|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectphysics.PhysicalEnvironment
Diese Klasse führt, bei Aufruf der entsprechenden Methode, einen Simulationschritt durch. Dabei werden zwei unterschiedliche Verfahren zur Berechnung dieses Schrittes angeboten.
Zum einen dasALL_STEP
Verfahren: In diesem Modus werden bei
jedem Aufruf alle registrierten Objekte bewegt, danach auf Kollisionen
geprüft und eventuelle Kollisionsreaktionen durchgeführt. Dies hat
den Vorteil, dass sich alle Objekte quasi-gleichzeitig bewegen. Der Nachteil
ist, dass ein Simulationsschritt erst beendet ist, wenn alle Objekte
abgearbeitet wurden, was bedeutet, dass der Thread, welcher diese Methode
aufruft, für unbestimmte Zeit blockiert wird.
Im Simulationsmodus SINGLE_STEP
wird versucht das Auftreten
dieses Problems zu verringern. Die Berechnung der Bewegung, das Prüfen
auf Kollisionen und die daraus resultierende Kollisionsreaktionen werden für
jedes Objekt einzeln durchgeführt. Wurde ein Objekt auf diese Weise
verarbeitet, wird die verstrichene Zeit überprüft. Übersteigt
diese einen festgesetzten Grenzwert, wird die weitere Bearbeitung
abgebrochen, so dass der aufrufende Thread mit hoher Wahrscheinlichkeit nicht
länger als das vorgegebene Zeitlimit blockiert wird.
Beim nächsten Simulationsschritt wird bei dem nächsten noch nicht
bearbeiteten Objekt fortgesetzt. Auf diese Weise ist es auch möglich,
dass während eines Simulationsschrittes die Körper mehrmals
abgearbeitet werden können, was die Genauigkeit der Simulation
erhöht.
Field Summary | |
static int |
ALL_STEP
Für den entsprechenden Simulationsmodus. |
static int |
SINGLE_STEP
Für den entsprechenden Simulationsmodus. |
Constructor Summary | |
PhysicalEnvironment(CollisionHandler ch,
int simulationType)
Erstellt eine Instanz der Klasse mit dem angegebenen CollisionHandler und für den angegebenen Simulationsmodus mit folgenden Werten: maxDeltaTime = Long.MAX_VALUE ,maxCalculationTime = 20 ,defaultEnergyPushFactor = 1 . |
|
PhysicalEnvironment(CollisionHandler ch,
int type,
long maxDeltaTime,
long maxCalcTime,
float epf)
Erstellt eine Instanz dieser Klasse mit den angegebenen Werten. |
Method Summary | |
boolean |
addDynamicTransformGroup(DynamicTransformGroup dynTraGrp)
Registriert eine DynamicTransformGroup für die Simulation. |
float |
getDefaultEnergyPushFactor()
Liefert den Stoßfaktor für Objekte der Szene, mit denen die registrierten Körper zwar kollidieren können, die jedoch selbst keine Instanzen der Klasse DynamicTransformGroup sind, zurück. |
long |
getMaxCalculationTime()
Gibt die maximale Berechnungszeit im Modus SINGLE_STEP
zurück. |
long |
getMaxDeltaTime()
Gibt die maxmale Zeitspanne zurück, die für einen Simulationsschritt verwendet wird. |
void |
nextStep()
Führt einen Simulationsschritt durch. |
boolean |
removeDynamicTransformGroup(DynamicTransformGroup dynTraGrp)
Entfernt einen Körper aus der Simulation. |
void |
setDefaultEnergyPushFactor(float value)
Setzt den Stoßfaktor für Objekte der Szene, mit denen die registrierten Körper zwar kollidieren können, die jedoch selbst keine Instanzen der Klasse DynamicTransformGroup sind. |
void |
setMaxCalculationTime(long value)
Setzt die maximale Berechnungszeit im Modus SINGLE_STEP . |
void |
setMaxDeltaTime(long maxValue)
Setzt die maximale Zeitspanne, die für einen Simulationsschritt verwendet werden soll. |
Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static final int SINGLE_STEP
public static final int ALL_STEP
Constructor Detail |
public PhysicalEnvironment(CollisionHandler ch, int simulationType) throws java.lang.IllegalArgumentException
maxDeltaTime = Long.MAX_VALUE
,maxCalculationTime = 20
,defaultEnergyPushFactor = 1
.
ch
- Der verwendete CollisionHandler.simulationType
- ALL_STEP
oder
SINGLE_STEP
.
java.lang.IllegalArgumentException
- Wenn kein gültiger Simulationsmodus
angegeben wurde.public PhysicalEnvironment(CollisionHandler ch, int type, long maxDeltaTime, long maxCalcTime, float epf) throws java.lang.IllegalArgumentException
ch
- Der verwendete CollisionHandler.type
- ALL_STEP
oder SINGLE_STEP
.maxDeltaTime
- Maximale Länge eines Zeitschritts
(maxDeltaTime > 0).maxCalcTime
- Maximale Berechnungszeit im Modus
SINGLE_STEP
(maxCalcTime > 0).epf
- Stoßfaktor für Objekte der Szene, mit denen die
registrierten Körper zwar kollidieren können, die jedoch
selbst keine Instanzen der Klasse
DynamicTransformGroup sind (0 >= epf >= 1).
java.lang.IllegalArgumentException
- Wenn einer der Parameter ungültig
ist.Method Detail |
public void setDefaultEnergyPushFactor(float value) throws java.lang.IllegalArgumentException
value
- Ein Wert zwischen 0 und 1.
java.lang.IllegalArgumentException
- Wenn der Stoßfaktor nicht zwischen
0 und 1 liegt.public float getDefaultEnergyPushFactor()
public boolean addDynamicTransformGroup(DynamicTransformGroup dynTraGrp)
dynTraGrp
- Die zu registrierende
DynamicTransformGroup.
true
, wenn der Körper erfolgreich registriert
wurde, sonst false
.public boolean removeDynamicTransformGroup(DynamicTransformGroup dynTraGrp)
dynTraGrp
- Der zu entfernende Körper.
true
, wenn der Körper erfolgreich entfernt
wurde, sonst false
.public void setMaxDeltaTime(long maxValue) throws java.lang.IllegalArgumentException
maxValue
- Die maximale Zeitspanne.
java.lang.IllegalArgumentException
- Wenn der angegebene Wert kleiner gleich
0 ist.public long getMaxDeltaTime()
public void setMaxCalculationTime(long value)
SINGLE_STEP
.
value
- Die maximale Berechnungsdauer.public long getMaxCalculationTime()
SINGLE_STEP
zurück.
public void nextStep()
maxDeltaTime
, so wird maxDeltaTime
genutzt.
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |