Skip to content
Snippets Groups Projects
Verified Commit 74259746 authored by Jan Kožusznik's avatar Jan Kožusznik
Browse files

Correct bullet simulation

parent ba626e1a
Branches
No related merge requests found
...@@ -4,7 +4,7 @@ import javafx.geometry.Point2D; ...@@ -4,7 +4,7 @@ import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image; import javafx.scene.image.Image;
public class BulletAnimated { public class BulletAnimated {
private Point2D position; private Point2D position;
private Point2D start; private Point2D start;
...@@ -12,10 +12,13 @@ public class BulletAnimated { ...@@ -12,10 +12,13 @@ public class BulletAnimated {
private Point2D initialSpeed; private Point2D initialSpeed;
private double size; private double size;
private double mass = 2; private double mass = 2;
private double strenghtOfCannon = 80; private double strenghtOfCannon = 50;
private double cannonLength = 100; private double cannonLength = 100;
private boolean accelerate = true; private boolean accelerate = true;
private boolean hitToGround = false; private boolean hitToGround = false;
private double crossSectionalArea;
private double dragCoefficient = 0.47;
private Image image; private Image image;
private World world; private World world;
...@@ -44,19 +47,23 @@ public class BulletAnimated { ...@@ -44,19 +47,23 @@ public class BulletAnimated {
gc.restore(); gc.restore();
} }
public void simulate(double timeStep) { public void simulate(double deltaT) {
if (accelerate && start.distance(position) < cannonLength) { if (accelerate && start.distance(position) < cannonLength) {
double cannonAngle = cannon.getAngle(); double cannonAngle = cannon.getAngle();
speed = speed speed = speed
.add(new Point2D(Math.cos(cannonAngle) * strenghtOfCannon, Math.sin(cannonAngle) * strenghtOfCannon) .add(new Point2D(Math.cos(cannonAngle) * strenghtOfCannon, Math.sin(cannonAngle) * strenghtOfCannon)
.multiply(1 / mass * timeStep * 10)); .multiply(1 / mass * deltaT));
} else if (!hitToGround) { } else if (!hitToGround) {
accelerate = false; accelerate = false;
Point2D acceleration = new Point2D(0, -Constants.GRAVITATIONAL_ACCELERATION*50 * mass * timeStep * 10); Point2D airResistanceforce = new Point2D(
speed = speed.add(acceleration.multiply(timeStep)); -1. / 2 * crossSectionalArea * Constants.AIR_DENSITY * dragCoefficient * Math.pow(speed.getX(), 2),
-1. / 2 * crossSectionalArea * Constants.AIR_DENSITY * 0.47 * Math.pow(speed.getY(), 2));
Point2D acceleration = new Point2D(-airResistanceforce.getX() * mass,
-Constants.GRAVITATIONAL_ACCELERATION + airResistanceforce.getY() * mass);
speed = speed.add(acceleration.multiply(deltaT));
} }
if (!hitToGround) { if (!hitToGround) {
position = position.add(speed.multiply(timeStep)); position = position.add(speed);
if (!accelerate && position.getY() <= size / 2) { if (!accelerate && position.getY() <= size / 2) {
hitToGround = true; hitToGround = true;
position = new Point2D(position.getX(), size / 2); position = new Point2D(position.getX(), size / 2);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment