commentaar methods ivm jump
This commit is contained in:
@@ -432,9 +432,29 @@ public class Worm {
|
|||||||
// region Jump
|
// region Jump
|
||||||
//===================================================================================
|
//===================================================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this constant contains the gravity
|
||||||
|
*/
|
||||||
private final double G = 5.0;
|
private final double G = 5.0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this constant contains the duration of the force
|
||||||
|
*/
|
||||||
private final double FORCE_TIME = 0.5;
|
private final double FORCE_TIME = 0.5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* let the worm jump
|
||||||
|
*
|
||||||
|
* @post the worm jumps to his new place. The new place is the x-coordinate plus the jump distance
|
||||||
|
* with the jump velocity
|
||||||
|
* |Tuple.create(location.item1 + jumpDistance(this.jumpVelocity), location.item2)
|
||||||
|
* @post the current action points schould be 0 after a jump
|
||||||
|
* |this.points = 0
|
||||||
|
* @throws IllegalStateException()
|
||||||
|
* if the current action points is equal to 0 or the orientation is more then
|
||||||
|
* pi the worm can not jump
|
||||||
|
* |this.points == 0 || this.orientation < Math.PI
|
||||||
|
*/
|
||||||
public void jump() {
|
public void jump() {
|
||||||
|
|
||||||
if (!canJump())
|
if (!canJump())
|
||||||
@@ -446,25 +466,63 @@ public class Worm {
|
|||||||
this.points = 0;
|
this.points = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a boolean whether the worm can jump or not
|
||||||
|
*
|
||||||
|
* @return True if and only if the action points is bigger then 0 and the orientation
|
||||||
|
* is lower then pi
|
||||||
|
* |result == this.points > 0 && this.orientation < Math.PI
|
||||||
|
*/
|
||||||
private boolean canJump() {
|
private boolean canJump() {
|
||||||
return this.points > 0 && this.orientation < Math.PI;
|
return this.points > 0 && this.orientation < Math.PI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the time the worm will jump
|
||||||
|
*
|
||||||
|
* @return the time the worm will jump. The distance divided by the velocity multiplied
|
||||||
|
* with the cosinus of the orientation
|
||||||
|
* |jumpDistance(this.jumpVelocity) / (this.jumpVelocity * Math.cos(this.orientation))
|
||||||
|
*/
|
||||||
public double jumpTime() {
|
public double jumpTime() {
|
||||||
|
|
||||||
return jumpDistance(this.jumpVelocity) / (this.jumpVelocity * Math.cos(this.orientation));
|
return jumpDistance(this.jumpVelocity) / (this.jumpVelocity * Math.cos(this.orientation));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param deltaTime
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public Tuple<Double, Double> jumpStep(double deltaTime) {
|
public Tuple<Double, Double> jumpStep(double deltaTime) {
|
||||||
|
|
||||||
|
|
||||||
return Tuple.create(oldLocation.item1 + this.jumpVelocity * Math.cos(this.orientation) * deltaTime,
|
return Tuple.create(oldLocation.item1 + this.jumpVelocity * Math.cos(this.orientation) * deltaTime,
|
||||||
oldLocation.item2 + this.jumpVelocity * Math.sin(this.orientation) * deltaTime - (1/2) * G * Math.pow(deltaTime, 2));
|
oldLocation.item2 + this.jumpVelocity * Math.sin(this.orientation) * deltaTime - (1/2) * G * Math.pow(deltaTime, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the distance the worm will jump
|
||||||
|
*
|
||||||
|
* @param v
|
||||||
|
* the velocity of the jump
|
||||||
|
* @return the distance the worm will jump. The distance is equal to the velocity powered by 2 multiplied
|
||||||
|
* with the sinus of 2 times the orientation en this divided with the gravity
|
||||||
|
* |(Math.pow(v, 2) * Math.sin(2 * this.orientation)) / this.G
|
||||||
|
*/
|
||||||
private double jumpDistance(double v) {
|
private double jumpDistance(double v) {
|
||||||
return (Math.pow(v, 2) * Math.sin(2 * this.orientation)) / this.G;
|
return (Math.pow(v, 2) * Math.sin(2 * this.orientation)) / this.G;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the velocity of the jump
|
||||||
|
*
|
||||||
|
* @return the velocity of the jump. The force of the jump is equal to 5 multiplied with the
|
||||||
|
* current action points plus the mass multiplied with the gravity. Therefrom the velocity
|
||||||
|
* is equal to the force divided with the mass, multiplied with the time te force takes
|
||||||
|
* |force = 5 * this.points + this.mass * G
|
||||||
|
* |velocity = (force / this.mass) * FORCE_TIME
|
||||||
|
*/
|
||||||
private double jumpVelocity() {
|
private double jumpVelocity() {
|
||||||
|
|
||||||
double force = 5 * this.points + this.mass * G;
|
double force = 5 * this.points + this.mass * G;
|
||||||
|
Reference in New Issue
Block a user