From 47c46c03d6762ca615512640fdce4f0ef08f2f29 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Fri, 7 Jul 2023 19:32:30 +0300
Subject: [PATCH 01/26] improvements
---
pom.xml | 2 +-
src/main/java/main/graphics/Window.java | 12 ++--
.../java/vehicleGraphics/BorderPainter.java | 7 +-
.../java/vehicleGraphics/VehiclePainter.java | 70 ++++++++++---------
.../java/vehicleGraphics/VehiclePanel.java | 14 +++-
.../vehicleGraphics/VehiclePanelData.java | 20 ++++--
6 files changed, 71 insertions(+), 54 deletions(-)
diff --git a/pom.xml b/pom.xml
index 4b2e48f..cc587ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.github.KrumSpace
SpacePlane
- 0.2
+ 0.3
19
diff --git a/src/main/java/main/graphics/Window.java b/src/main/java/main/graphics/Window.java
index 1623f7c..e582ce7 100644
--- a/src/main/java/main/graphics/Window.java
+++ b/src/main/java/main/graphics/Window.java
@@ -6,14 +6,14 @@
import javax.swing.JFrame;
import javax.swing.JPanel;
-import vehicles.Vehicle;
import vehicleGraphics.VehiclePanelData;
import vehicleGraphics.VehiclePanel;
import vehicles.VehicleAdapter;
//
public class Window extends JFrame {
- private static final int[] SIZE_CORRECTION = new int[] {17, 40};
+ private static final Dimension PANEL_SIZE = new Dimension(1000, 900);
+ private static final int[] WINDOW_SIZE_CORRECTION = new int[] {17, 40};
private static final Point LOCATION = new Point(600, 50);
private static final String WINDOW_TITLE = "Vehicle viewer";
private static final Color BACKGROUND = Color.BLACK;
@@ -30,11 +30,9 @@ public Window(VehicleAdapter vehicleAdapter) {
private void setWindowConfig() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocation(LOCATION);
-
- Dimension optimalSize = VehiclePanelData.getOptimalSize();
setSize(new Dimension(
- optimalSize.width + SIZE_CORRECTION[0],
- optimalSize.height + SIZE_CORRECTION[1]));
+ PANEL_SIZE.width + WINDOW_SIZE_CORRECTION[0],
+ PANEL_SIZE.height + WINDOW_SIZE_CORRECTION[1]));
setTitle(WINDOW_TITLE);
}
@@ -45,6 +43,6 @@ private void setContents(VehicleAdapter vehicleAdapter) {
}
private JPanel getVehiclePanel(VehicleAdapter vehicleAdapter) {
- return new VehiclePanel(new VehiclePanelData(vehicleAdapter));
+ return new VehiclePanel(new VehiclePanelData(vehicleAdapter, PANEL_SIZE));
}
}
\ No newline at end of file
diff --git a/src/main/java/vehicleGraphics/BorderPainter.java b/src/main/java/vehicleGraphics/BorderPainter.java
index 3ae5f48..3a2f385 100644
--- a/src/main/java/vehicleGraphics/BorderPainter.java
+++ b/src/main/java/vehicleGraphics/BorderPainter.java
@@ -6,22 +6,21 @@
//
class BorderPainter implements PainterInterface {
private final VehiclePanelData panelData;
- private final Dimension size;
//
- protected BorderPainter(VehiclePanelData panelData, Dimension size) {
+ protected BorderPainter(VehiclePanelData panelData) {
this.panelData = panelData;
- this.size = size;
}
//
@Override
public void paint(Graphics g, int[] drawLocation) {
- g.setColor(panelData.getBorderColor());
+ Dimension size = panelData.getPanelSize();
int
offset = panelData.getBorderOffset(),
x = size.width,
y = size.height;
+ g.setColor(panelData.getBorderColor());
g.drawRect(offset, offset, Math.max(0, x - 2 * offset), Math.max(0, y - 2 * offset));
}
}
\ No newline at end of file
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index f91031c..033d8c9 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -12,7 +12,6 @@
//
class VehiclePainter implements PainterInterface {
- private static final int[] VEHICLE_DRAW_SIZE = new int[] {980, 880};
private static final Color
PART_COLOR = new Color(100, 100, 100),
PART_BORDER_COLOR = new Color(150, 150, 150),
@@ -23,39 +22,50 @@ class VehiclePainter implements PainterInterface {
private static final int
PART_MASS_DECIMAL_DIGITS = 2,
PART_LENGTH_DECIMAL_DIGITS = 1;
+
private final ImageObserver imageObserver;
private final VehiclePanelData panelData;
- private final int[]
- panelDrawSize,
- vehicleDrawSize;
+ private final double angle;
//
- protected VehiclePainter(ImageObserver imageObserver, VehiclePanelData panelData) {
+ protected VehiclePainter(ImageObserver imageObserver, VehiclePanelData panelData, double angle) {
this.imageObserver = imageObserver;
this.panelData = panelData;
-
- Dimension size = VehiclePanelData.getOptimalSize();
- panelDrawSize = new int[] {size.width, size.height};
- vehicleDrawSize = VEHICLE_DRAW_SIZE;
+ this.angle = angle;
}
//
@Override
public final void paint(Graphics g, int[] drawLocation) {
+ Dimension panelSize = panelData.getPanelSize();
+ int drawDiameter = Math.min(panelSize.width, panelSize.height);
+
+ //draw y = actual -x
+ //draw x = actual -y
+
+ //vehicle & scale
+ Vehicle vehicle = panelData.getVehicle();
+ double scale = vehicle.getLength() / drawDiameter;
+
+ //buffered image stuff
+ int[]
+ bufferedImageSize = new int[] {
+ drawDiameter, //define width here, currently width = height
+ drawDiameter},
+ bufferedImageCenter = new int[] {
+ bufferedImageSize[0] / 2,
+ bufferedImageSize[1] / 2},
+ bufferedImageLocation = new int[] {
+ drawLocation[0] + (panelSize.width - bufferedImageSize[0]) / 2,
+ drawLocation[1] + (panelSize.height - bufferedImageSize[1]) / 2};
+
BufferedImage image = new BufferedImage(
- panelDrawSize[0], panelDrawSize[1],
+ bufferedImageSize[0], bufferedImageSize[1],
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = image.createGraphics();
- double angle = -20;
- g2.transform(getTransform(
- angle, new int[] {
- vehicleDrawSize[0] / 2,
- vehicleDrawSize[1] / 2}));
- paintVehicle(g2, vehicleDrawSize);
- int[] vehicleDrawLocation = new int[] {
- drawLocation[0] + (panelDrawSize[0] - vehicleDrawSize[0]) / 2,
- drawLocation[1] + (panelDrawSize[1] - vehicleDrawSize[1]) / 2};
- g.drawImage(image, vehicleDrawLocation[0], vehicleDrawLocation[1], imageObserver);
+ g2.transform(getTransform(angle, bufferedImageCenter));
+ paintVehicle(g2, bufferedImageSize, vehicle, scale);
+ g.drawImage(image, bufferedImageLocation[0], bufferedImageLocation[1], imageObserver);
}
//for rotation
@@ -67,25 +77,19 @@ private AffineTransform getTransform(double angle, int[] center) {
}};
}
- private void paintVehicle(Graphics2D g2, int[] drawSize) {
+ private void paintVehicle(Graphics2D g2, int[] drawSize, Vehicle vehicle, double scale) {
int[] drawCenter = new int[] {drawSize[0] / 2, drawSize[1] / 2};
-
- //vehicle
- Vehicle vehicle = panelData.getVehicle();
- double scale = vehicle.getLength() / drawSize[0];
-
- //parts
List parts = vehicle.getParts();
- int xPart = 0;
+ double xPart = 0;
for (int i = 0; i < parts.size(); i++) {
VehiclePart part = parts.get(i);
double[]
scaledPartSize = new double[] {
- part.getLength() / scale,
- part.getDiameter() / scale},
+ part.getDiameter() / scale,
+ part.getLength() / scale},
partDrawLoc = new double[] {
- drawCenter[0] + (double) drawSize[0] / 2 - scaledPartSize[0] - xPart / scale,
- drawCenter[1] - scaledPartSize[1] / 2};
+ drawCenter[0] - scaledPartSize[0] / 2,
+ xPart / scale};
paintVehiclePart(g2, part, partDrawLoc, scaledPartSize);
xPart += part.getLength();
}
@@ -107,7 +111,7 @@ private void paintVehiclePart(Graphics2D g2, VehiclePart part,
private void paintPartInfo(Graphics2D g2, VehiclePart part,
double[] partDrawLoc, double[] scaledPartSize) {
g2.setColor(PART_TEXT_COLOR);
- int[] textOffset = new int[] {-35, 5};
+ int[] textOffset = new int[]{-35, 5};
//title
g2.setFont(PART_TITLE_FONT);
diff --git a/src/main/java/vehicleGraphics/VehiclePanel.java b/src/main/java/vehicleGraphics/VehiclePanel.java
index e876fcc..9d918db 100644
--- a/src/main/java/vehicleGraphics/VehiclePanel.java
+++ b/src/main/java/vehicleGraphics/VehiclePanel.java
@@ -1,10 +1,12 @@
package vehicleGraphics;
+import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
//
public class VehiclePanel extends JPanel {
+ private static final double VEHICLE_DRAW_ANGLE = 30;
private final VehiclePanelData panelData;
private final PainterInterface
borderPainter,
@@ -16,9 +18,17 @@ public VehiclePanel(VehiclePanelData panelData) {
super();
this.panelData = panelData;
setBackground(panelData.getBackgroundColor());
- borderPainter = new BorderPainter(panelData, VehiclePanelData.getOptimalSize());
+
+ borderPainter = new BorderPainter(panelData);
rotationTestPainter = new RotationTestPainter(this);
- vehiclePainter = new VehiclePainter(this, this.panelData);
+ vehiclePainter = new VehiclePainter(this, this.panelData, VEHICLE_DRAW_ANGLE);
+ }
+
+ @Override
+ public void update(Graphics g) {
+ super.update(g);
+ Dimension size = getSize();
+ panelData.setPanelSize(size.width, size.height);
}
//
diff --git a/src/main/java/vehicleGraphics/VehiclePanelData.java b/src/main/java/vehicleGraphics/VehiclePanelData.java
index 81c445d..f029578 100644
--- a/src/main/java/vehicleGraphics/VehiclePanelData.java
+++ b/src/main/java/vehicleGraphics/VehiclePanelData.java
@@ -7,23 +7,29 @@
//
public class VehiclePanelData {
- private static final Dimension
- OPTIMAL_SIZE = new Dimension(1000, 900);
private static final Color
BACKGROUND = Color.BLACK,
BORDER_COLOR = Color.RED;
private static final int BORDER_OFFSET = 0;
+ private final VehicleAdapter vehicleAdapter;
+ private final Dimension panelSize;
+
//
- public static Dimension getOptimalSize() {
- return OPTIMAL_SIZE;
+ public VehiclePanelData(VehicleAdapter vehicleAdapter, Dimension panelSize) {
+ this.vehicleAdapter = vehicleAdapter;
+ this.panelSize = panelSize;
}
- private final VehicleAdapter vehicleAdapter;
+ //
+ public void setPanelSize(int width, int height) {
+ panelSize.width = width;
+ panelSize.height = height;
+ }
//
- public VehiclePanelData(VehicleAdapter vehicleAdapter) {
- this.vehicleAdapter = vehicleAdapter;
+ public Dimension getPanelSize() {
+ return panelSize;
}
//
From e6d84f8c5ddcda22af2498a1c5f52090147fa320 Mon Sep 17 00:00:00 2001
From: thelordgod
Date: Sat, 8 Jul 2023 03:12:53 +0300
Subject: [PATCH 02/26] update
---
.../java/vehicleGraphics/VehiclePainter.java | 64 ++++++++++++++++---
.../java/vehicleGraphics/VehiclePanel.java | 5 +-
src/main/java/vehicles/Vehicle.java | 19 +++++-
src/main/java/vehicles/VehiclePart.java | 5 +-
src/main/java/vehicles/VehiclePartInfo.java | 13 ++++
5 files changed, 87 insertions(+), 19 deletions(-)
create mode 100644 src/main/java/vehicles/VehiclePartInfo.java
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index 033d8c9..d658df4 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -9,6 +9,7 @@
import vehicles.Vehicle;
import vehicles.VehiclePart;
+import vehicles.VehiclePartInfo;
//
class VehiclePainter implements PainterInterface {
@@ -47,27 +48,74 @@ public final void paint(Graphics g, int[] drawLocation) {
Vehicle vehicle = panelData.getVehicle();
double scale = vehicle.getLength() / drawDiameter;
+ double[] drawCenter = new double[] {
+ panelSize.width / 2.0,
+ panelSize.height / 2.0
+ };
+
+ for (VehiclePart part : vehicle.getParts()) {
+ paintPart(g, part, vehicle.getPartInfo(part), drawCenter, scale);
+ }
+
//buffered image stuff
+ }
+
+ private void paintPart(Graphics g, VehiclePart part, VehiclePartInfo partInfo, double[] drawCenter, double scale) {
+ double[] partDrawLoc = new double[] {
+ drawCenter[0] - partInfo.getLocation()[1] / scale,
+ drawCenter[1] - partInfo.getLocation()[0] / scale};
+ paintPartImage(g, part, partDrawLoc, scale);
+ paintPartInfo(g, part, partDrawLoc);
+ }
+
+ private void paintPartImage(Graphics g, VehiclePart part, double[] partDrawLoc, double scale) {
int[]
bufferedImageSize = new int[] {
- drawDiameter, //define width here, currently width = height
- drawDiameter},
+ (int) (part.getDiameter() / scale),
+ (int) (part.getLength() / scale)},
bufferedImageCenter = new int[] {
bufferedImageSize[0] / 2,
bufferedImageSize[1] / 2},
bufferedImageLocation = new int[] {
- drawLocation[0] + (panelSize.width - bufferedImageSize[0]) / 2,
- drawLocation[1] + (panelSize.height - bufferedImageSize[1]) / 2};
+ (int) partDrawLoc[0] - bufferedImageSize[0] / 2,
+ (int) partDrawLoc[1] - bufferedImageSize[1] / 2};
BufferedImage image = new BufferedImage(
bufferedImageSize[0], bufferedImageSize[1],
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = image.createGraphics();
g2.transform(getTransform(angle, bufferedImageCenter));
- paintVehicle(g2, bufferedImageSize, vehicle, scale);
+
+ g2.setColor(PART_COLOR);
+ g2.fillRect(
+ 0, 0,
+ bufferedImageSize[0], bufferedImageSize[1]);
+ g2.setColor(PART_BORDER_COLOR);
+ g2.drawRect(
+ 0, 0,
+ bufferedImageSize[0], bufferedImageSize[1]);
+
g.drawImage(image, bufferedImageLocation[0], bufferedImageLocation[1], imageObserver);
}
+ private void paintPartInfo(Graphics g, VehiclePart part, double[] partDrawLoc) {
+ //part title
+ g.setColor(PART_TEXT_COLOR);
+ g.setFont(PART_TITLE_FONT);
+ g.drawString(
+ part.getName(),
+ (int) partDrawLoc[0], (int) partDrawLoc[1] - 5);
+
+ //part details
+ g.setFont(PART_DETAILS_FONT);
+ g.drawString(
+ "Mass: " + String.format("%." + PART_MASS_DECIMAL_DIGITS + "f", part.getMass()) + " kg",
+ (int) partDrawLoc[0], (int) partDrawLoc[1] + 15);
+ g.drawString(
+ "Length: " + String.format("%." + PART_LENGTH_DECIMAL_DIGITS + "f", part.getLength()) + " m",
+ (int) partDrawLoc[0], (int) partDrawLoc[1] + 30);
+ }
+
//for rotation
private AffineTransform getTransform(double angle, int[] center) {
return new AffineTransform() {{
@@ -80,7 +128,6 @@ private AffineTransform getTransform(double angle, int[] center) {
private void paintVehicle(Graphics2D g2, int[] drawSize, Vehicle vehicle, double scale) {
int[] drawCenter = new int[] {drawSize[0] / 2, drawSize[1] / 2};
List parts = vehicle.getParts();
- double xPart = 0;
for (int i = 0; i < parts.size(); i++) {
VehiclePart part = parts.get(i);
double[]
@@ -88,10 +135,9 @@ private void paintVehicle(Graphics2D g2, int[] drawSize, Vehicle vehicle, double
part.getDiameter() / scale,
part.getLength() / scale},
partDrawLoc = new double[] {
- drawCenter[0] - scaledPartSize[0] / 2,
- xPart / scale};
+ drawCenter[0] - scaledPartSize[0] / 2 - vehicle.getPartInfo(part).getLocation()[1] / scale,
+ drawCenter[1] - scaledPartSize[1] / 2 - vehicle.getPartInfo(part).getLocation()[0] / scale};
paintVehiclePart(g2, part, partDrawLoc, scaledPartSize);
- xPart += part.getLength();
}
}
diff --git a/src/main/java/vehicleGraphics/VehiclePanel.java b/src/main/java/vehicleGraphics/VehiclePanel.java
index 9d918db..04e0608 100644
--- a/src/main/java/vehicleGraphics/VehiclePanel.java
+++ b/src/main/java/vehicleGraphics/VehiclePanel.java
@@ -8,10 +8,7 @@
public class VehiclePanel extends JPanel {
private static final double VEHICLE_DRAW_ANGLE = 30;
private final VehiclePanelData panelData;
- private final PainterInterface
- borderPainter,
- rotationTestPainter,
- vehiclePainter;
+ private final PainterInterface borderPainter, rotationTestPainter, vehiclePainter;
//
public VehiclePanel(VehiclePanelData panelData) {
diff --git a/src/main/java/vehicles/Vehicle.java b/src/main/java/vehicles/Vehicle.java
index 82058f5..938530b 100644
--- a/src/main/java/vehicles/Vehicle.java
+++ b/src/main/java/vehicles/Vehicle.java
@@ -1,14 +1,25 @@
package vehicles;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
//
public abstract class Vehicle {
private final List parts;
+ private final Map partInfo;
//
public Vehicle() {
parts = getInitialParts();
+ partInfo = new HashMap<>() {{
+ double x = getLength() / 2;
+
+ for (VehiclePart part : parts) {
+ put(part, new VehiclePartInfo(new double[]{x - part.getLength() / 2, 0}));
+ x -= part.getLength();
+ }
+ }};
}
//must be ordered for now
@@ -18,9 +29,13 @@ public List getParts() {
return parts;
}
+ public VehiclePartInfo getPartInfo(VehiclePart part) {
+ return partInfo.get(part);
+ }
+
public double getMass() {
double total = 0;
- for(VehiclePart part : parts) {
+ for (VehiclePart part : parts) {
total += part.getMass();
}
return total;
@@ -28,7 +43,7 @@ public double getMass() {
public double getLength() {
double total = 0;
- for(VehiclePart part : parts) {
+ for (VehiclePart part : parts) {
total += part.getLength();
}
return total;
diff --git a/src/main/java/vehicles/VehiclePart.java b/src/main/java/vehicles/VehiclePart.java
index adb29a0..d9449cf 100644
--- a/src/main/java/vehicles/VehiclePart.java
+++ b/src/main/java/vehicles/VehiclePart.java
@@ -3,10 +3,7 @@
//
public class VehiclePart {
private final String name;
- private final double
- mass,
- length,
- diameter;
+ private final double mass, length, diameter;
//
VehiclePart(String name, int mass, int length, int diameter) {
diff --git a/src/main/java/vehicles/VehiclePartInfo.java b/src/main/java/vehicles/VehiclePartInfo.java
new file mode 100644
index 0000000..ab9a57e
--- /dev/null
+++ b/src/main/java/vehicles/VehiclePartInfo.java
@@ -0,0 +1,13 @@
+package vehicles;
+
+public class VehiclePartInfo {
+ private double[] location;
+
+ public VehiclePartInfo(double[] location) {
+ this.location = location;
+ }
+
+ public double[] getLocation() {
+ return location;
+ }
+}
From 05ee9ee8f7adbd8e6742a7b0a783a14ef8da37d1 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 18:17:30 +0300
Subject: [PATCH 03/26] improvements
---
src/main/java/main/graphics/Window.java | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/src/main/java/main/graphics/Window.java b/src/main/java/main/graphics/Window.java
index e582ce7..0ac1000 100644
--- a/src/main/java/main/graphics/Window.java
+++ b/src/main/java/main/graphics/Window.java
@@ -1,8 +1,6 @@
package main.graphics;
-import java.awt.Point;
-import java.awt.Dimension;
-import java.awt.Color;
+import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
@@ -18,12 +16,15 @@ public class Window extends JFrame {
private static final String WINDOW_TITLE = "Vehicle viewer";
private static final Color BACKGROUND = Color.BLACK;
+ private final VehiclePanelData vehiclePanelData;
+
//
public Window(VehicleAdapter vehicleAdapter) {
super();
setWindowConfig();
- setContents(vehicleAdapter);
- setResizable(false);
+ vehiclePanelData = new VehiclePanelData(vehicleAdapter, PANEL_SIZE);
+ setContents();
+ //setResizable(false);
setVisible(true);
}
@@ -37,12 +38,12 @@ private void setWindowConfig() {
setTitle(WINDOW_TITLE);
}
- private void setContents(VehicleAdapter vehicleAdapter) {
+ private void setContents() {
setBackground(BACKGROUND);
- add(getVehiclePanel(vehicleAdapter));
+ add(getVehiclePanel());
}
- private JPanel getVehiclePanel(VehicleAdapter vehicleAdapter) {
- return new VehiclePanel(new VehiclePanelData(vehicleAdapter, PANEL_SIZE));
+ private JPanel getVehiclePanel() {
+ return new VehiclePanel(vehiclePanelData);
}
}
\ No newline at end of file
From 98e98a7b9d956ae517ad836656243432bd68abaf Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 18:46:16 +0300
Subject: [PATCH 04/26] fixes
---
.../java/vehicleGraphics/VehiclePainter.java | 12 ++++++++----
.../java/vehicleGraphics/VehiclePanel.java | 6 +++++-
src/main/java/vehicles/Vehicle.java | 18 +++++++++++-------
src/main/java/vehicles/VehiclePart.java | 5 ++++-
src/main/java/vehicles/VehiclePartInfo.java | 13 -------------
.../java/vehicles/VehiclePartLocationInfo.java | 16 ++++++++++++++++
6 files changed, 44 insertions(+), 26 deletions(-)
delete mode 100644 src/main/java/vehicles/VehiclePartInfo.java
create mode 100644 src/main/java/vehicles/VehiclePartLocationInfo.java
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index d658df4..58f8b55 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -9,7 +9,7 @@
import vehicles.Vehicle;
import vehicles.VehiclePart;
-import vehicles.VehiclePartInfo;
+import vehicles.VehiclePartLocationInfo;
//
class VehiclePainter implements PainterInterface {
@@ -29,7 +29,8 @@ class VehiclePainter implements PainterInterface {
private final double angle;
//
- protected VehiclePainter(ImageObserver imageObserver, VehiclePanelData panelData, double angle) {
+ protected VehiclePainter(ImageObserver imageObserver, VehiclePanelData panelData,
+ double angle) {
this.imageObserver = imageObserver;
this.panelData = panelData;
this.angle = angle;
@@ -60,7 +61,9 @@ public final void paint(Graphics g, int[] drawLocation) {
//buffered image stuff
}
- private void paintPart(Graphics g, VehiclePart part, VehiclePartInfo partInfo, double[] drawCenter, double scale) {
+ private void paintPart(Graphics g,
+ VehiclePart part, VehiclePartLocationInfo partInfo,
+ double[] drawCenter, double scale) {
double[] partDrawLoc = new double[] {
drawCenter[0] - partInfo.getLocation()[1] / scale,
drawCenter[1] - partInfo.getLocation()[0] / scale};
@@ -68,7 +71,8 @@ private void paintPart(Graphics g, VehiclePart part, VehiclePartInfo partInfo, d
paintPartInfo(g, part, partDrawLoc);
}
- private void paintPartImage(Graphics g, VehiclePart part, double[] partDrawLoc, double scale) {
+ private void paintPartImage(Graphics g, VehiclePart part,
+ double[] partDrawLoc, double scale) {
int[]
bufferedImageSize = new int[] {
(int) (part.getDiameter() / scale),
diff --git a/src/main/java/vehicleGraphics/VehiclePanel.java b/src/main/java/vehicleGraphics/VehiclePanel.java
index 04e0608..72cf369 100644
--- a/src/main/java/vehicleGraphics/VehiclePanel.java
+++ b/src/main/java/vehicleGraphics/VehiclePanel.java
@@ -8,7 +8,10 @@
public class VehiclePanel extends JPanel {
private static final double VEHICLE_DRAW_ANGLE = 30;
private final VehiclePanelData panelData;
- private final PainterInterface borderPainter, rotationTestPainter, vehiclePainter;
+ private final PainterInterface
+ borderPainter,
+ rotationTestPainter,
+ vehiclePainter;
//
public VehiclePanel(VehiclePanelData panelData) {
@@ -21,6 +24,7 @@ public VehiclePanel(VehiclePanelData panelData) {
vehiclePainter = new VehiclePainter(this, this.panelData, VEHICLE_DRAW_ANGLE);
}
+ //
@Override
public void update(Graphics g) {
super.update(g);
diff --git a/src/main/java/vehicles/Vehicle.java b/src/main/java/vehicles/Vehicle.java
index 938530b..d2f9a89 100644
--- a/src/main/java/vehicles/Vehicle.java
+++ b/src/main/java/vehicles/Vehicle.java
@@ -1,22 +1,24 @@
package vehicles;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.HashMap;
//
public abstract class Vehicle {
private final List parts;
- private final Map partInfo;
+ private final Map partLocationMap;
//
public Vehicle() {
parts = getInitialParts();
- partInfo = new HashMap<>() {{
+ partLocationMap = new HashMap<>() {{
double x = getLength() / 2;
-
for (VehiclePart part : parts) {
- put(part, new VehiclePartInfo(new double[]{x - part.getLength() / 2, 0}));
+ put(
+ part,
+ new VehiclePartLocationInfo(
+ new double[]{x, 0}));
x -= part.getLength();
}
}};
@@ -29,10 +31,11 @@ public List getParts() {
return parts;
}
- public VehiclePartInfo getPartInfo(VehiclePart part) {
- return partInfo.get(part);
+ public VehiclePartLocationInfo getPartInfo(VehiclePart part) {
+ return partLocationMap.get(part);
}
+ //
public double getMass() {
double total = 0;
for (VehiclePart part : parts) {
@@ -41,6 +44,7 @@ public double getMass() {
return total;
}
+ //
public double getLength() {
double total = 0;
for (VehiclePart part : parts) {
diff --git a/src/main/java/vehicles/VehiclePart.java b/src/main/java/vehicles/VehiclePart.java
index d9449cf..adb29a0 100644
--- a/src/main/java/vehicles/VehiclePart.java
+++ b/src/main/java/vehicles/VehiclePart.java
@@ -3,7 +3,10 @@
//
public class VehiclePart {
private final String name;
- private final double mass, length, diameter;
+ private final double
+ mass,
+ length,
+ diameter;
//
VehiclePart(String name, int mass, int length, int diameter) {
diff --git a/src/main/java/vehicles/VehiclePartInfo.java b/src/main/java/vehicles/VehiclePartInfo.java
deleted file mode 100644
index ab9a57e..0000000
--- a/src/main/java/vehicles/VehiclePartInfo.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package vehicles;
-
-public class VehiclePartInfo {
- private double[] location;
-
- public VehiclePartInfo(double[] location) {
- this.location = location;
- }
-
- public double[] getLocation() {
- return location;
- }
-}
diff --git a/src/main/java/vehicles/VehiclePartLocationInfo.java b/src/main/java/vehicles/VehiclePartLocationInfo.java
new file mode 100644
index 0000000..67d2bc9
--- /dev/null
+++ b/src/main/java/vehicles/VehiclePartLocationInfo.java
@@ -0,0 +1,16 @@
+package vehicles;
+
+//
+public class VehiclePartLocationInfo {
+ private final double[] location;
+
+ //
+ public VehiclePartLocationInfo(double[] location) {
+ this.location = location;
+ }
+
+ //
+ public double[] getLocation() {
+ return location;
+ }
+}
From eea2ed1a909c0b4b6f8348dace697901778df503 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 19:34:55 +0300
Subject: [PATCH 05/26] fixes
---
.../java/vehicleGraphics/VehiclePainter.java | 158 ++++++++----------
1 file changed, 72 insertions(+), 86 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index 58f8b55..406bdcc 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -20,9 +20,6 @@ class VehiclePainter implements PainterInterface {
private static final Font
PART_TITLE_FONT = new Font("Verdana", Font.BOLD, 18),
PART_DETAILS_FONT = new Font(null, Font.BOLD, 15);
- private static final int
- PART_MASS_DECIMAL_DIGITS = 2,
- PART_LENGTH_DECIMAL_DIGITS = 1;
private final ImageObserver imageObserver;
private final VehiclePanelData panelData;
@@ -40,39 +37,40 @@ protected VehiclePainter(ImageObserver imageObserver, VehiclePanelData panelData
@Override
public final void paint(Graphics g, int[] drawLocation) {
Dimension panelSize = panelData.getPanelSize();
- int drawDiameter = Math.min(panelSize.width, panelSize.height);
-
- //draw y = actual -x
- //draw x = actual -y
+ double[] drawCenter = new double[] {
+ panelSize.width / 2.0,
+ panelSize.height / 2.0};
+ int maxDrawLength = Math.min(
+ (int) (panelSize.width * Math.sin(angle)),
+ (int) (panelSize.height * Math.cos(angle)));
//vehicle & scale
Vehicle vehicle = panelData.getVehicle();
- double scale = vehicle.getLength() / drawDiameter;
-
- double[] drawCenter = new double[] {
- panelSize.width / 2.0,
- panelSize.height / 2.0
- };
+ double scale = vehicle.getLength() / maxDrawLength * 1.5;
for (VehiclePart part : vehicle.getParts()) {
- paintPart(g, part, vehicle.getPartInfo(part), drawCenter, scale);
+ VehiclePartLocationInfo partInfo = vehicle.getPartInfo(part);
+ double[]
+ scaledPartLoc = new double[] {
+ - partInfo.getLocation()[1] / scale, //draw x = actual -y
+ - partInfo.getLocation()[0] / scale //draw y = actual -x
+ },
+ partDrawLoc = new double[] { //use trigonometry here
+ drawCenter[0] + scaledPartLoc[0] * Math.sin(angle) + scaledPartLoc[1] * Math.cos(angle),
+ drawCenter[1] + scaledPartLoc[0] * Math.cos(angle) + scaledPartLoc[1] * Math.sin(angle)};
+ paintPart(g, part, partDrawLoc, scale);
}
-
- //buffered image stuff
}
- private void paintPart(Graphics g,
- VehiclePart part, VehiclePartLocationInfo partInfo,
- double[] drawCenter, double scale) {
- double[] partDrawLoc = new double[] {
- drawCenter[0] - partInfo.getLocation()[1] / scale,
- drawCenter[1] - partInfo.getLocation()[0] / scale};
- paintPartImage(g, part, partDrawLoc, scale);
+ private void paintPart(Graphics g, VehiclePart part,
+ double[] partDrawLoc, double scale) {
+ //paintPartImage(g, part, partDrawLoc, scale);
paintPartInfo(g, part, partDrawLoc);
}
- private void paintPartImage(Graphics g, VehiclePart part,
+ /*private void paintPartImage(Graphics g, VehiclePart part,
double[] partDrawLoc, double scale) {
+ //buffered image stuff
int[]
bufferedImageSize = new int[] {
(int) (part.getDiameter() / scale),
@@ -100,44 +98,17 @@ private void paintPartImage(Graphics g, VehiclePart part,
bufferedImageSize[0], bufferedImageSize[1]);
g.drawImage(image, bufferedImageLocation[0], bufferedImageLocation[1], imageObserver);
- }
-
- private void paintPartInfo(Graphics g, VehiclePart part, double[] partDrawLoc) {
- //part title
- g.setColor(PART_TEXT_COLOR);
- g.setFont(PART_TITLE_FONT);
- g.drawString(
- part.getName(),
- (int) partDrawLoc[0], (int) partDrawLoc[1] - 5);
-
- //part details
- g.setFont(PART_DETAILS_FONT);
- g.drawString(
- "Mass: " + String.format("%." + PART_MASS_DECIMAL_DIGITS + "f", part.getMass()) + " kg",
- (int) partDrawLoc[0], (int) partDrawLoc[1] + 15);
- g.drawString(
- "Length: " + String.format("%." + PART_LENGTH_DECIMAL_DIGITS + "f", part.getLength()) + " m",
- (int) partDrawLoc[0], (int) partDrawLoc[1] + 30);
- }
+ }*/
- //for rotation
- private AffineTransform getTransform(double angle, int[] center) {
- return new AffineTransform() {{
- translate(center[0], center[1]);
- rotate(Math.toRadians(angle));
- translate(-center[0], -center[1]);
- }};
- }
-
- private void paintVehicle(Graphics2D g2, int[] drawSize, Vehicle vehicle, double scale) {
+ /*private void paintVehicle(Graphics2D g2, int[] drawSize, Vehicle vehicle, double scale) {
int[] drawCenter = new int[] {drawSize[0] / 2, drawSize[1] / 2};
List parts = vehicle.getParts();
for (int i = 0; i < parts.size(); i++) {
VehiclePart part = parts.get(i);
double[]
scaledPartSize = new double[] {
- part.getDiameter() / scale,
- part.getLength() / scale},
+ part.getDiameter() / scale,
+ part.getLength() / scale},
partDrawLoc = new double[] {
drawCenter[0] - scaledPartSize[0] / 2 - vehicle.getPartInfo(part).getLocation()[1] / scale,
drawCenter[1] - scaledPartSize[1] / 2 - vehicle.getPartInfo(part).getLocation()[0] / scale};
@@ -156,44 +127,59 @@ private void paintVehiclePart(Graphics2D g2, VehiclePart part,
(int) partDrawLoc[0], (int) partDrawLoc[1],
(int) scaledPartSize[0], (int) scaledPartSize[1]);
paintPartInfo(g2, part, partDrawLoc, scaledPartSize);
- }
+ }*/
- private void paintPartInfo(Graphics2D g2, VehiclePart part,
- double[] partDrawLoc, double[] scaledPartSize) {
- g2.setColor(PART_TEXT_COLOR);
- int[] textOffset = new int[]{-35, 5};
+ private void paintPartInfo(Graphics g, VehiclePart part, double[] partDrawLoc) {
+ int[] textOffset = new int[] {-35, 5};
+ g.setColor(PART_TEXT_COLOR);
- //title
- g2.setFont(PART_TITLE_FONT);
- g2.drawString(
+ //part title
+ g.setFont(PART_TITLE_FONT);
+ g.drawString(
part.getName(),
- (int) (partDrawLoc[0] + scaledPartSize[0] / 2 + textOffset[0]),
- (int) (partDrawLoc[1] + scaledPartSize[1] / 2 + textOffset[1]));
-
- //details
- g2.setFont(PART_DETAILS_FONT);
- String massString = "M: " + convertMassToTonnes(part.getMass()) + " t";
- g2.drawString(
- massString,
- (int) (partDrawLoc[0] + scaledPartSize[0] / 2 + textOffset[0]),
- (int) (partDrawLoc[1] + scaledPartSize[1] / 2 + textOffset[1]) + 20);
-
- String sizeString = "L: " + roundLength(part.getLength()) + " m";
- g2.drawString(
- sizeString,
- (int) (partDrawLoc[0] + scaledPartSize[0] / 2 + textOffset[0]),
- (int) (partDrawLoc[1] + scaledPartSize[1] / 2 + textOffset[1]) + 40);
- }
+ (int) partDrawLoc[0] + textOffset[0],
+ (int) partDrawLoc[1] + textOffset[1]);
- private double convertMassToTonnes(double mass) {
- return roundToDecimalDigits(mass / 1000, PART_MASS_DECIMAL_DIGITS);
+ //part details
+ g.setFont(PART_DETAILS_FONT);
+ String massString = "M: " + ValueConvertor.convertMassToTonnes(part.getMass()) + " t";
+ g.drawString(massString,
+ (int) partDrawLoc[0] + textOffset[0],
+ (int) partDrawLoc[1] + textOffset[1] + 15);
+ String sizeString = "L: " + ValueConvertor.roundLength(part.getLength()) + " m";
+ g.drawString(sizeString,
+ (int) partDrawLoc[0] + textOffset[0],
+ (int) partDrawLoc[1] + textOffset[1] + 30);
}
- private double roundLength(double length) {
- return roundToDecimalDigits(length, PART_LENGTH_DECIMAL_DIGITS);
+ //for rotation
+ private AffineTransform getTransform(double angle, int[] center) {
+ return new AffineTransform() {{
+ translate(center[0], center[1]);
+ rotate(Math.toRadians(angle));
+ translate(-center[0], -center[1]);
+ }};
}
- private double roundToDecimalDigits(double value, int decimalDigits) {
- return ((int) (value * Math.pow(10, decimalDigits))) / Math.pow(10.0, decimalDigits);
+ //
+ static class ValueConvertor {
+ private static final int
+ PART_MASS_DECIMAL_DIGITS = 2,
+ PART_LENGTH_DECIMAL_DIGITS = 1;
+
+ //
+ static double convertMassToTonnes(double mass) {
+ return roundToDecimalDigits(mass / 1000, PART_MASS_DECIMAL_DIGITS);
+ }
+
+ //
+ static double roundLength(double length) {
+ return roundToDecimalDigits(length, PART_LENGTH_DECIMAL_DIGITS);
+ }
+
+ //
+ static double roundToDecimalDigits(double value, int decimalDigits) {
+ return ((int) (value * Math.pow(10, decimalDigits))) / Math.pow(10.0, decimalDigits);
+ }
}
}
\ No newline at end of file
From aa73bff0680feb1bc3fcc21deb90ba7ed3a03e9e Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 20:10:41 +0300
Subject: [PATCH 06/26] fixes
---
.../java/vehicleGraphics/VehiclePainter.java | 66 ++++++-------------
.../java/vehicleGraphics/VehiclePanel.java | 2 +-
2 files changed, 21 insertions(+), 47 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index 406bdcc..f8949c7 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -38,37 +38,38 @@ protected VehiclePainter(ImageObserver imageObserver, VehiclePanelData panelData
public final void paint(Graphics g, int[] drawLocation) {
Dimension panelSize = panelData.getPanelSize();
double[] drawCenter = new double[] {
- panelSize.width / 2.0,
- panelSize.height / 2.0};
- int maxDrawLength = Math.min(
- (int) (panelSize.width * Math.sin(angle)),
- (int) (panelSize.height * Math.cos(angle)));
+ (double) panelSize.width / 2,
+ (double) panelSize.height / 2};
//vehicle & scale
Vehicle vehicle = panelData.getVehicle();
- double scale = vehicle.getLength() / maxDrawLength * 1.5;
+ double scaleIncreaseTestCoefficient = 1;
+ int maxDrawLength = Math.min(
+ (int) (panelSize.width * Math.sin(Math.toRadians(angle))),
+ (int) (panelSize.height * Math.cos(Math.toRadians(angle))));
+ double scale = vehicle.getLength() / maxDrawLength * scaleIncreaseTestCoefficient;
for (VehiclePart part : vehicle.getParts()) {
VehiclePartLocationInfo partInfo = vehicle.getPartInfo(part);
double[]
- scaledPartLoc = new double[] {
- - partInfo.getLocation()[1] / scale, //draw x = actual -y
- - partInfo.getLocation()[0] / scale //draw y = actual -x
+ scaledPartLoc = new double[] { //actual loc
+ -1 * partInfo.getLocation()[1] / scale, //draw x = actual -y
+ -1 * partInfo.getLocation()[0] / scale //draw y = actual -x
},
partDrawLoc = new double[] { //use trigonometry here
- drawCenter[0] + scaledPartLoc[0] * Math.sin(angle) + scaledPartLoc[1] * Math.cos(angle),
- drawCenter[1] + scaledPartLoc[0] * Math.cos(angle) + scaledPartLoc[1] * Math.sin(angle)};
+ drawCenter[0] + scaledPartLoc[0] * Math.sin(Math.toRadians(angle)) + scaledPartLoc[1] * Math.cos(Math.toRadians(angle)),
+ drawCenter[1] + scaledPartLoc[0] * Math.cos(Math.toRadians(angle)) + scaledPartLoc[1] * Math.sin(Math.toRadians(angle))};
paintPart(g, part, partDrawLoc, scale);
}
}
private void paintPart(Graphics g, VehiclePart part,
double[] partDrawLoc, double scale) {
- //paintPartImage(g, part, partDrawLoc, scale);
+ paintPartImage(g, part, partDrawLoc, scale);
paintPartInfo(g, part, partDrawLoc);
}
- /*private void paintPartImage(Graphics g, VehiclePart part,
+ private void paintPartImage(Graphics g, VehiclePart part,
double[] partDrawLoc, double scale) {
//buffered image stuff
int[]
@@ -77,14 +78,12 @@ private void paintPart(Graphics g, VehiclePart part,
(int) (part.getLength() / scale)},
bufferedImageCenter = new int[] {
bufferedImageSize[0] / 2,
- bufferedImageSize[1] / 2},
- bufferedImageLocation = new int[] {
- (int) partDrawLoc[0] - bufferedImageSize[0] / 2,
- (int) partDrawLoc[1] - bufferedImageSize[1] / 2};
+ bufferedImageSize[1] / 2};
BufferedImage image = new BufferedImage(
bufferedImageSize[0], bufferedImageSize[1],
BufferedImage.TYPE_INT_ARGB);
+
Graphics2D g2 = image.createGraphics();
g2.transform(getTransform(angle, bufferedImageCenter));
@@ -97,38 +96,13 @@ private void paintPart(Graphics g, VehiclePart part,
0, 0,
bufferedImageSize[0], bufferedImageSize[1]);
- g.drawImage(image, bufferedImageLocation[0], bufferedImageLocation[1], imageObserver);
- }*/
+ int[] bufferedImageLocation = new int[] {
+ (int) partDrawLoc[0] - bufferedImageSize[0] / 2,
+ (int) partDrawLoc[1] - bufferedImageSize[1] / 2};
- /*private void paintVehicle(Graphics2D g2, int[] drawSize, Vehicle vehicle, double scale) {
- int[] drawCenter = new int[] {drawSize[0] / 2, drawSize[1] / 2};
- List parts = vehicle.getParts();
- for (int i = 0; i < parts.size(); i++) {
- VehiclePart part = parts.get(i);
- double[]
- scaledPartSize = new double[] {
- part.getDiameter() / scale,
- part.getLength() / scale},
- partDrawLoc = new double[] {
- drawCenter[0] - scaledPartSize[0] / 2 - vehicle.getPartInfo(part).getLocation()[1] / scale,
- drawCenter[1] - scaledPartSize[1] / 2 - vehicle.getPartInfo(part).getLocation()[0] / scale};
- paintVehiclePart(g2, part, partDrawLoc, scaledPartSize);
- }
+ g.drawImage(image, bufferedImageLocation[0], bufferedImageLocation[1], imageObserver);
}
- private void paintVehiclePart(Graphics2D g2, VehiclePart part,
- double[] partDrawLoc, double[] scaledPartSize) {
- g2.setColor(PART_COLOR);
- g2.fillRect(
- (int) partDrawLoc[0], (int) partDrawLoc[1],
- (int) scaledPartSize[0], (int) scaledPartSize[1]);
- g2.setColor(PART_BORDER_COLOR);
- g2.drawRect(
- (int) partDrawLoc[0], (int) partDrawLoc[1],
- (int) scaledPartSize[0], (int) scaledPartSize[1]);
- paintPartInfo(g2, part, partDrawLoc, scaledPartSize);
- }*/
-
private void paintPartInfo(Graphics g, VehiclePart part, double[] partDrawLoc) {
int[] textOffset = new int[] {-35, 5};
g.setColor(PART_TEXT_COLOR);
diff --git a/src/main/java/vehicleGraphics/VehiclePanel.java b/src/main/java/vehicleGraphics/VehiclePanel.java
index 72cf369..4af68df 100644
--- a/src/main/java/vehicleGraphics/VehiclePanel.java
+++ b/src/main/java/vehicleGraphics/VehiclePanel.java
@@ -6,7 +6,7 @@
//
public class VehiclePanel extends JPanel {
- private static final double VEHICLE_DRAW_ANGLE = 30;
+ private static final double VEHICLE_DRAW_ANGLE = 45;
private final VehiclePanelData panelData;
private final PainterInterface
borderPainter,
From 9724533b9a3c247799819e74e39fd278230dac27 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 20:19:13 +0300
Subject: [PATCH 07/26] fixes
---
src/main/java/vehicleGraphics/VehiclePainter.java | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index f8949c7..a672ed6 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -43,16 +43,17 @@ public final void paint(Graphics g, int[] drawLocation) {
//vehicle & scale
Vehicle vehicle = panelData.getVehicle();
- double scaleIncreaseTestCoefficient = 1;
int maxDrawLength = Math.min(
(int) (panelSize.width * Math.sin(Math.toRadians(angle))),
(int) (panelSize.height * Math.cos(Math.toRadians(angle))));
- double scale = vehicle.getLength() / maxDrawLength * scaleIncreaseTestCoefficient;
+ double scaleTestCoefficient = 1;
+ //actual * scale = draw
+ double scale = vehicle.getLength() / maxDrawLength * scaleTestCoefficient;
for (VehiclePart part : vehicle.getParts()) {
VehiclePartLocationInfo partInfo = vehicle.getPartInfo(part);
double[]
- scaledPartLoc = new double[] { //actual loc
+ scaledPartLoc = new double[] { //actual loc scaled to drawable for g2
-1 * partInfo.getLocation()[1] / scale, //draw x = actual -y
-1 * partInfo.getLocation()[0] / scale //draw y = actual -x
},
From ca5053f69d7d65073795f71e62b8c0abeb59459e Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 20:19:38 +0300
Subject: [PATCH 08/26] fixes
---
src/main/java/vehicleGraphics/VehiclePainter.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index a672ed6..7e77393 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -1,7 +1,5 @@
package vehicleGraphics;
-import java.util.List;
-
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
From 7bc9c6f35ba9dc6a1a3bb952713583b856ff6954 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 20:23:59 +0300
Subject: [PATCH 09/26] testing
---
src/main/java/vehicleGraphics/VehiclePainter.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index 7e77393..89c6adb 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -100,6 +100,12 @@ private void paintPartImage(Graphics g, VehiclePart part,
(int) partDrawLoc[1] - bufferedImageSize[1] / 2};
g.drawImage(image, bufferedImageLocation[0], bufferedImageLocation[1], imageObserver);
+
+ //test square
+ g.setColor(Color.red);
+ g.drawRect(
+ bufferedImageLocation[0], bufferedImageLocation[1],
+ bufferedImageSize[0], bufferedImageSize[1]);
}
private void paintPartInfo(Graphics g, VehiclePart part, double[] partDrawLoc) {
From 5e53d47f014f45fa65528feb5f72897ae202f1b3 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 20:32:44 +0300
Subject: [PATCH 10/26] fixes
---
.../java/vehicleGraphics/VehiclePainter.java | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index 89c6adb..8103afb 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -70,11 +70,16 @@ private void paintPart(Graphics g, VehiclePart part,
private void paintPartImage(Graphics g, VehiclePart part,
double[] partDrawLoc, double scale) {
+ double[] scaledPartSize = new double[] {
+ part.getDiameter() / scale,
+ part.getLength() / scale};
+ int bufferedImageSizeMaxDimension = (int) Math.max(scaledPartSize[0], scaledPartSize[1]);
+
//buffered image stuff
int[]
bufferedImageSize = new int[] {
- (int) (part.getDiameter() / scale),
- (int) (part.getLength() / scale)},
+ bufferedImageSizeMaxDimension,
+ bufferedImageSizeMaxDimension},
bufferedImageCenter = new int[] {
bufferedImageSize[0] / 2,
bufferedImageSize[1] / 2};
@@ -88,12 +93,14 @@ private void paintPartImage(Graphics g, VehiclePart part,
g2.setColor(PART_COLOR);
g2.fillRect(
- 0, 0,
- bufferedImageSize[0], bufferedImageSize[1]);
+ (int) (bufferedImageCenter[0] - scaledPartSize[0] / 2),
+ (int) (bufferedImageCenter[1] - scaledPartSize[1] / 2),
+ (int) scaledPartSize[0], (int) scaledPartSize[1]);
g2.setColor(PART_BORDER_COLOR);
g2.drawRect(
- 0, 0,
- bufferedImageSize[0], bufferedImageSize[1]);
+ (int) (bufferedImageCenter[0] - scaledPartSize[0] / 2),
+ (int) (bufferedImageCenter[1] - scaledPartSize[1] / 2),
+ (int) scaledPartSize[0], (int) scaledPartSize[1]);
int[] bufferedImageLocation = new int[] {
(int) partDrawLoc[0] - bufferedImageSize[0] / 2,
From 7aff03358546c4b069bee943f55c3ad9abe7563d Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 20:34:47 +0300
Subject: [PATCH 11/26] fixes
---
src/main/java/vehicleGraphics/VehiclePainter.java | 2 +-
src/main/java/vehicleGraphics/VehiclePanel.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index 8103afb..5152e19 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -73,7 +73,7 @@ private void paintPartImage(Graphics g, VehiclePart part,
double[] scaledPartSize = new double[] {
part.getDiameter() / scale,
part.getLength() / scale};
- int bufferedImageSizeMaxDimension = (int) Math.max(scaledPartSize[0], scaledPartSize[1]);
+ int bufferedImageSizeMaxDimension = (int) Math.hypot(scaledPartSize[0], scaledPartSize[1]);
//buffered image stuff
int[]
diff --git a/src/main/java/vehicleGraphics/VehiclePanel.java b/src/main/java/vehicleGraphics/VehiclePanel.java
index 4af68df..72cf369 100644
--- a/src/main/java/vehicleGraphics/VehiclePanel.java
+++ b/src/main/java/vehicleGraphics/VehiclePanel.java
@@ -6,7 +6,7 @@
//
public class VehiclePanel extends JPanel {
- private static final double VEHICLE_DRAW_ANGLE = 45;
+ private static final double VEHICLE_DRAW_ANGLE = 30;
private final VehiclePanelData panelData;
private final PainterInterface
borderPainter,
From 76d5a6d1701892a7d227f014c06ae40bb68eeaeb Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 20:51:45 +0300
Subject: [PATCH 12/26] fixes
---
.../java/vehicleGraphics/VehiclePainter.java | 50 +++++++++++--------
1 file changed, 30 insertions(+), 20 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index 5152e19..0eb8fbe 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -21,14 +21,14 @@ class VehiclePainter implements PainterInterface {
private final ImageObserver imageObserver;
private final VehiclePanelData panelData;
- private final double angle;
+ private final double angle; // in radians
//
protected VehiclePainter(ImageObserver imageObserver, VehiclePanelData panelData,
double angle) {
this.imageObserver = imageObserver;
this.panelData = panelData;
- this.angle = angle;
+ this.angle = Math.toRadians(angle);
}
//
@@ -42,8 +42,8 @@ public final void paint(Graphics g, int[] drawLocation) {
//vehicle & scale
Vehicle vehicle = panelData.getVehicle();
int maxDrawLength = Math.min(
- (int) (panelSize.width * Math.sin(Math.toRadians(angle))),
- (int) (panelSize.height * Math.cos(Math.toRadians(angle))));
+ (int) (panelSize.width / Math.sin(angle)),
+ (int) (panelSize.height / Math.cos(angle)));
double scaleTestCoefficient = 1;
//actual * scale = draw
double scale = vehicle.getLength() / maxDrawLength * scaleTestCoefficient;
@@ -56,8 +56,8 @@ public final void paint(Graphics g, int[] drawLocation) {
-1 * partInfo.getLocation()[0] / scale //draw y = actual -x
},
partDrawLoc = new double[] { //use trigonometry here
- drawCenter[0] + scaledPartLoc[0] * Math.sin(Math.toRadians(angle)) + scaledPartLoc[1] * Math.cos(Math.toRadians(angle)),
- drawCenter[1] + scaledPartLoc[0] * Math.cos(Math.toRadians(angle)) + scaledPartLoc[1] * Math.sin(Math.toRadians(angle))};
+ drawCenter[0] + scaledPartLoc[0] * Math.sin(angle) + scaledPartLoc[1] * Math.cos(angle),
+ drawCenter[1] + scaledPartLoc[0] * Math.cos(angle) + scaledPartLoc[1] * Math.sin(angle)};
paintPart(g, part, partDrawLoc, scale);
}
}
@@ -73,7 +73,9 @@ private void paintPartImage(Graphics g, VehiclePart part,
double[] scaledPartSize = new double[] {
part.getDiameter() / scale,
part.getLength() / scale};
- int bufferedImageSizeMaxDimension = (int) Math.hypot(scaledPartSize[0], scaledPartSize[1]);
+ int bufferedImageSizeMaxDimension = (int) Math.hypot(
+ scaledPartSize[0],
+ scaledPartSize[1]);
//buffered image stuff
int[]
@@ -84,28 +86,20 @@ private void paintPartImage(Graphics g, VehiclePart part,
bufferedImageSize[0] / 2,
bufferedImageSize[1] / 2};
+ //create image and apply transform
BufferedImage image = new BufferedImage(
bufferedImageSize[0], bufferedImageSize[1],
BufferedImage.TYPE_INT_ARGB);
-
Graphics2D g2 = image.createGraphics();
g2.transform(getTransform(angle, bufferedImageCenter));
- g2.setColor(PART_COLOR);
- g2.fillRect(
- (int) (bufferedImageCenter[0] - scaledPartSize[0] / 2),
- (int) (bufferedImageCenter[1] - scaledPartSize[1] / 2),
- (int) scaledPartSize[0], (int) scaledPartSize[1]);
- g2.setColor(PART_BORDER_COLOR);
- g2.drawRect(
- (int) (bufferedImageCenter[0] - scaledPartSize[0] / 2),
- (int) (bufferedImageCenter[1] - scaledPartSize[1] / 2),
- (int) scaledPartSize[0], (int) scaledPartSize[1]);
+ //paint on image
+ paintPartOnImage(g2, bufferedImageCenter, scale, part);
+ //paint image
int[] bufferedImageLocation = new int[] {
(int) partDrawLoc[0] - bufferedImageSize[0] / 2,
(int) partDrawLoc[1] - bufferedImageSize[1] / 2};
-
g.drawImage(image, bufferedImageLocation[0], bufferedImageLocation[1], imageObserver);
//test square
@@ -115,6 +109,22 @@ private void paintPartImage(Graphics g, VehiclePart part,
bufferedImageSize[0], bufferedImageSize[1]);
}
+ private void paintPartOnImage(Graphics2D g2, int[] imageCenter, double scale, VehiclePart part) {
+ double[] scaledPartSize = new double[] {
+ part.getDiameter() / scale,
+ part.getLength() / scale};
+ g2.setColor(PART_COLOR);
+ g2.fillRect(
+ (int) (imageCenter[0] - scaledPartSize[0] / 2),
+ (int) (imageCenter[1] - scaledPartSize[1] / 2),
+ (int) scaledPartSize[0], (int) scaledPartSize[1]);
+ g2.setColor(PART_BORDER_COLOR);
+ g2.drawRect(
+ (int) (imageCenter[0] - scaledPartSize[0] / 2),
+ (int) (imageCenter[1] - scaledPartSize[1] / 2),
+ (int) scaledPartSize[0], (int) scaledPartSize[1]);
+ }
+
private void paintPartInfo(Graphics g, VehiclePart part, double[] partDrawLoc) {
int[] textOffset = new int[] {-35, 5};
g.setColor(PART_TEXT_COLOR);
@@ -142,7 +152,7 @@ private void paintPartInfo(Graphics g, VehiclePart part, double[] partDrawLoc) {
private AffineTransform getTransform(double angle, int[] center) {
return new AffineTransform() {{
translate(center[0], center[1]);
- rotate(Math.toRadians(angle));
+ rotate(angle); //already in radians
translate(-center[0], -center[1]);
}};
}
From e29be1a81fbc9d0143011bc1caae357ca2508016 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 21:24:16 +0300
Subject: [PATCH 13/26] fixes
---
.../java/vehicleGraphics/VehiclePainter.java | 34 ++++++++++++-------
.../java/vehicleGraphics/VehiclePanel.java | 2 +-
src/main/java/vehicles/Vehicle.java | 24 +++++++------
3 files changed, 37 insertions(+), 23 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index 0eb8fbe..4a6bd31 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -48,20 +48,30 @@ public final void paint(Graphics g, int[] drawLocation) {
//actual * scale = draw
double scale = vehicle.getLength() / maxDrawLength * scaleTestCoefficient;
+ //paint parts
for (VehiclePart part : vehicle.getParts()) {
VehiclePartLocationInfo partInfo = vehicle.getPartInfo(part);
- double[]
- scaledPartLoc = new double[] { //actual loc scaled to drawable for g2
- -1 * partInfo.getLocation()[1] / scale, //draw x = actual -y
- -1 * partInfo.getLocation()[0] / scale //draw y = actual -x
- },
- partDrawLoc = new double[] { //use trigonometry here
- drawCenter[0] + scaledPartLoc[0] * Math.sin(angle) + scaledPartLoc[1] * Math.cos(angle),
- drawCenter[1] + scaledPartLoc[0] * Math.cos(angle) + scaledPartLoc[1] * Math.sin(angle)};
- paintPart(g, part, partDrawLoc, scale);
+ paintPart(
+ g, part,
+ getDrawLoc(partInfo.getLocation(), drawCenter, scale),
+ scale);
}
}
+ private double[] getDrawLoc(double[] actualLoc, double[] drawCenter, double scale) {
+ double[] relativeOrthogonalLoc = new double[] { //actual loc scaled to drawable for g2
+ -1 * actualLoc[1] / scale, //draw x = actual -y
+ -1 * actualLoc[0] / scale}; //draw y = actual -x
+
+ return new double[] { //use trigonometry here
+ drawCenter[0]
+ + relativeOrthogonalLoc[0] * Math.cos(angle)
+ + relativeOrthogonalLoc[1] * Math.sin(angle),
+ drawCenter[1]
+ + relativeOrthogonalLoc[1] * Math.cos(angle)
+ + relativeOrthogonalLoc[0] * Math.sin(angle)};
+ }
+
private void paintPart(Graphics g, VehiclePart part,
double[] partDrawLoc, double scale) {
paintPartImage(g, part, partDrawLoc, scale);
@@ -73,15 +83,15 @@ private void paintPartImage(Graphics g, VehiclePart part,
double[] scaledPartSize = new double[] {
part.getDiameter() / scale,
part.getLength() / scale};
- int bufferedImageSizeMaxDimension = (int) Math.hypot(
+ int bufferedImageMaxSize = (int) Math.hypot(
scaledPartSize[0],
scaledPartSize[1]);
//buffered image stuff
int[]
bufferedImageSize = new int[] {
- bufferedImageSizeMaxDimension,
- bufferedImageSizeMaxDimension},
+ bufferedImageMaxSize,
+ bufferedImageMaxSize},
bufferedImageCenter = new int[] {
bufferedImageSize[0] / 2,
bufferedImageSize[1] / 2};
diff --git a/src/main/java/vehicleGraphics/VehiclePanel.java b/src/main/java/vehicleGraphics/VehiclePanel.java
index 72cf369..6e88f41 100644
--- a/src/main/java/vehicleGraphics/VehiclePanel.java
+++ b/src/main/java/vehicleGraphics/VehiclePanel.java
@@ -6,7 +6,7 @@
//
public class VehiclePanel extends JPanel {
- private static final double VEHICLE_DRAW_ANGLE = 30;
+ private static final double VEHICLE_DRAW_ANGLE = 15;
private final VehiclePanelData panelData;
private final PainterInterface
borderPainter,
diff --git a/src/main/java/vehicles/Vehicle.java b/src/main/java/vehicles/Vehicle.java
index d2f9a89..ba828d4 100644
--- a/src/main/java/vehicles/Vehicle.java
+++ b/src/main/java/vehicles/Vehicle.java
@@ -12,16 +12,8 @@ public abstract class Vehicle {
//
public Vehicle() {
parts = getInitialParts();
- partLocationMap = new HashMap<>() {{
- double x = getLength() / 2;
- for (VehiclePart part : parts) {
- put(
- part,
- new VehiclePartLocationInfo(
- new double[]{x, 0}));
- x -= part.getLength();
- }
- }};
+ partLocationMap = new HashMap<>();
+ setPartLocationInfo();
}
//must be ordered for now
@@ -31,6 +23,18 @@ public List getParts() {
return parts;
}
+ private void setPartLocationInfo() {
+ double x = getLength() / 2; // {0, 0} at amidship
+ for (VehiclePart part : parts) {
+ double partLength = part.getLength();
+ partLocationMap.put(part, new VehiclePartLocationInfo(new double[] {
+ x - partLength / 2,
+ 0}
+ ));
+ x -= partLength;
+ }
+ }
+
public VehiclePartLocationInfo getPartInfo(VehiclePart part) {
return partLocationMap.get(part);
}
From 1acc10fa38dbaf57e14344b639fdf3c4b850ff27 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 21:29:50 +0300
Subject: [PATCH 14/26] fixes
---
.../java/vehicleGraphics/VehiclePainter.java | 18 ++++++++++--------
.../java/vehicleGraphics/VehiclePanel.java | 2 +-
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index 4a6bd31..fa56582 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -48,14 +48,22 @@ public final void paint(Graphics g, int[] drawLocation) {
//actual * scale = draw
double scale = vehicle.getLength() / maxDrawLength * scaleTestCoefficient;
- //paint parts
+ //paint part images
for (VehiclePart part : vehicle.getParts()) {
VehiclePartLocationInfo partInfo = vehicle.getPartInfo(part);
- paintPart(
+ paintPartImage(
g, part,
getDrawLoc(partInfo.getLocation(), drawCenter, scale),
scale);
}
+
+ //paint part info
+ for (VehiclePart part : vehicle.getParts()) {
+ VehiclePartLocationInfo partInfo = vehicle.getPartInfo(part);
+ paintPartInfo(
+ g, part,
+ getDrawLoc(partInfo.getLocation(), drawCenter, scale));
+ }
}
private double[] getDrawLoc(double[] actualLoc, double[] drawCenter, double scale) {
@@ -72,12 +80,6 @@ private double[] getDrawLoc(double[] actualLoc, double[] drawCenter, double scal
+ relativeOrthogonalLoc[0] * Math.sin(angle)};
}
- private void paintPart(Graphics g, VehiclePart part,
- double[] partDrawLoc, double scale) {
- paintPartImage(g, part, partDrawLoc, scale);
- paintPartInfo(g, part, partDrawLoc);
- }
-
private void paintPartImage(Graphics g, VehiclePart part,
double[] partDrawLoc, double scale) {
double[] scaledPartSize = new double[] {
diff --git a/src/main/java/vehicleGraphics/VehiclePanel.java b/src/main/java/vehicleGraphics/VehiclePanel.java
index 6e88f41..1b21916 100644
--- a/src/main/java/vehicleGraphics/VehiclePanel.java
+++ b/src/main/java/vehicleGraphics/VehiclePanel.java
@@ -6,7 +6,7 @@
//
public class VehiclePanel extends JPanel {
- private static final double VEHICLE_DRAW_ANGLE = 15;
+ private static final double VEHICLE_DRAW_ANGLE = 10;
private final VehiclePanelData panelData;
private final PainterInterface
borderPainter,
From 29739fe1f5cf8679dec17c9b22f63842a6768723 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 8 Jul 2023 21:33:42 +0300
Subject: [PATCH 15/26] final fix
---
src/main/java/vehicleGraphics/VehiclePainter.java | 4 ++--
src/main/java/vehicleGraphics/VehiclePanel.java | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePainter.java b/src/main/java/vehicleGraphics/VehiclePainter.java
index fa56582..cc0b49f 100644
--- a/src/main/java/vehicleGraphics/VehiclePainter.java
+++ b/src/main/java/vehicleGraphics/VehiclePainter.java
@@ -74,10 +74,10 @@ private double[] getDrawLoc(double[] actualLoc, double[] drawCenter, double scal
return new double[] { //use trigonometry here
drawCenter[0]
+ relativeOrthogonalLoc[0] * Math.cos(angle)
- + relativeOrthogonalLoc[1] * Math.sin(angle),
+ - relativeOrthogonalLoc[1] * Math.sin(angle),
drawCenter[1]
+ relativeOrthogonalLoc[1] * Math.cos(angle)
- + relativeOrthogonalLoc[0] * Math.sin(angle)};
+ - relativeOrthogonalLoc[0] * Math.sin(angle)};
}
private void paintPartImage(Graphics g, VehiclePart part,
diff --git a/src/main/java/vehicleGraphics/VehiclePanel.java b/src/main/java/vehicleGraphics/VehiclePanel.java
index 1b21916..5b80937 100644
--- a/src/main/java/vehicleGraphics/VehiclePanel.java
+++ b/src/main/java/vehicleGraphics/VehiclePanel.java
@@ -6,7 +6,7 @@
//
public class VehiclePanel extends JPanel {
- private static final double VEHICLE_DRAW_ANGLE = 10;
+ private static final double VEHICLE_DRAW_ANGLE = 55;
private final VehiclePanelData panelData;
private final PainterInterface
borderPainter,
From 74a1bc1075268d738230c61c33402a1d775699fa Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 22 Jul 2023 12:55:25 +0300
Subject: [PATCH 16/26] improvements
---
src/main/java/vehicles/SimpleVehicle.java | 90 ++++++++++++++++---
src/main/java/vehicles/VehiclePart.java | 2 +-
.../vehicles/VehiclePartLocationInfo.java | 2 +-
3 files changed, 79 insertions(+), 15 deletions(-)
diff --git a/src/main/java/vehicles/SimpleVehicle.java b/src/main/java/vehicles/SimpleVehicle.java
index d80c0d7..d363526 100644
--- a/src/main/java/vehicles/SimpleVehicle.java
+++ b/src/main/java/vehicles/SimpleVehicle.java
@@ -5,6 +5,9 @@
//
public class SimpleVehicle extends Vehicle {
+ private static final int PASSENGER_COUNT = 5;
+ private static final double TARGET_DIAMETER = 3.0;
+
//
public SimpleVehicle() {
super();
@@ -14,42 +17,103 @@ public SimpleVehicle() {
@Override
List getInitialParts() {
return new ArrayList<>() {{
- add(new Cockpit());
- add(new Storage());
- add(new FuelTanks());
- add(new Engines());
+ add(Cockpit.newCockpit(TARGET_DIAMETER, PASSENGER_COUNT));
+ add(new Storage(TARGET_DIAMETER));
+ add(new FuelTanks(TARGET_DIAMETER));
+ add(new Engines(TARGET_DIAMETER));
}};
}
//
private static class Cockpit extends VehiclePart {
- //
- Cockpit() {
- super("Cockpit", 10, 2, 3);
+ private static final String PART_NAME = "Cockpit";
+ private static final double
+ MINIMUM_LENGTH = 1.0, // arbitrary
+ MINIMUM_DIAMETER = 3.0, // arbitrary
+ VOLUME_PER_PASSENGER = 3.0, // arbitrary
+ PART_DENSITY = 500; // arbitrary
+
+ //use this for creating new cockpit
+ @SuppressWarnings("SameParameterValue")
+ static Cockpit newCockpit(double targetDiameter, int passengerCount) {
+ double
+ finalDiameter = calculateFinalDiameter(targetDiameter),
+ finalLength = calculateFinalLength(finalDiameter, passengerCount),
+ mass = calculateMass(finalDiameter, finalLength);
+ return new Cockpit(mass, finalLength, finalDiameter);
+ }
+
+ private Cockpit(double mass, double length, double diameter) {
+ super(PART_NAME, mass, length, diameter);
+ }
+
+ private static double calculateFinalDiameter(double targetDiameter) {
+ return Math.max(targetDiameter, MINIMUM_DIAMETER);
+ }
+
+ private static double calculateFinalLength(double diameter, int passengerCount) {
+ return Math.max(
+ getCylinderLength(passengerCount * VOLUME_PER_PASSENGER, diameter),
+ MINIMUM_LENGTH);
+ }
+
+ private static double calculateMass(double diameter, double length) {
+ return PART_DENSITY * getCylinderVolume(diameter, length);
}
}
//
private static class Storage extends VehiclePart {
//
- Storage() {
- super("Storage", 10, 5, 3);
+ Storage(double diameter) {
+ super("Storage", calculateMass(), 5, diameter);
+ }
+
+ private static double calculateMass() {
+ return 10;
}
}
//
private static class FuelTanks extends VehiclePart {
//
- FuelTanks() {
- super("Fuel Tanks", 10, 20, 3);
+ FuelTanks(double diameter) {
+ super("Fuel Tanks", calculateMass(), 20, diameter);
+ }
+
+ private static double calculateMass() {
+ return 10;
}
}
//
private static class Engines extends VehiclePart {
//
- Engines() {
- super("Engines", 10, 1, 3);
+ Engines(double diameter) {
+ super("Engines", calculateMass(), 1, diameter);
+ }
+
+ private static double calculateMass() {
+ return 10;
+ }
+ }
+
+ //unused yet
+ private abstract static class CylindricalPart extends VehiclePart {
+ CylindricalPart(String name, double length, double diameter) {
+ super(name, 0, length, diameter);
}
}
+
+ private static double getCylinderCrossSection(double diameter) {
+ return Math.PI * Math.pow(diameter / 2, 2);
+ }
+
+ private static double getCylinderLength(double volume, double diameter) {
+ return volume / getCylinderCrossSection(diameter);
+ }
+
+ private static double getCylinderVolume(double diameter, double length) {
+ return getCylinderCrossSection(diameter) * length;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/vehicles/VehiclePart.java b/src/main/java/vehicles/VehiclePart.java
index adb29a0..dcda2d6 100644
--- a/src/main/java/vehicles/VehiclePart.java
+++ b/src/main/java/vehicles/VehiclePart.java
@@ -9,7 +9,7 @@ public class VehiclePart {
diameter;
//
- VehiclePart(String name, int mass, int length, int diameter) {
+ VehiclePart(String name, double mass, double length, double diameter) {
this.name = name;
this.mass = mass;
this.length = length;
diff --git a/src/main/java/vehicles/VehiclePartLocationInfo.java b/src/main/java/vehicles/VehiclePartLocationInfo.java
index 67d2bc9..3e1c28f 100644
--- a/src/main/java/vehicles/VehiclePartLocationInfo.java
+++ b/src/main/java/vehicles/VehiclePartLocationInfo.java
@@ -13,4 +13,4 @@ public VehiclePartLocationInfo(double[] location) {
public double[] getLocation() {
return location;
}
-}
+}
\ No newline at end of file
From 3967f9d1bb876b340e006592124d3881a439649b Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 22 Jul 2023 13:58:23 +0300
Subject: [PATCH 17/26] improvements
---
src/main/java/vehicles/SimpleVehicle.java | 60 ++++++++-----------
src/main/java/vehicles/Vehicle.java | 29 +++++++++
src/main/java/vehicles/VehiclePart.java | 2 +-
.../java/vehicles/engines/ChemicalEngine.java | 14 +++++
src/main/java/vehicles/engines/Engine.java | 33 ++++++++++
.../java/vehicles/engines/EngineType.java | 7 +++
src/main/java/vehicles/engines/IonEngine.java | 14 +++++
.../UnsupportedEngineTypeException.java | 8 +++
8 files changed, 132 insertions(+), 35 deletions(-)
create mode 100644 src/main/java/vehicles/engines/ChemicalEngine.java
create mode 100644 src/main/java/vehicles/engines/Engine.java
create mode 100644 src/main/java/vehicles/engines/EngineType.java
create mode 100644 src/main/java/vehicles/engines/IonEngine.java
create mode 100644 src/main/java/vehicles/engines/UnsupportedEngineTypeException.java
diff --git a/src/main/java/vehicles/SimpleVehicle.java b/src/main/java/vehicles/SimpleVehicle.java
index d363526..a98aee3 100644
--- a/src/main/java/vehicles/SimpleVehicle.java
+++ b/src/main/java/vehicles/SimpleVehicle.java
@@ -3,9 +3,13 @@
import java.util.List;
import java.util.ArrayList;
+import vehicles.engines.EngineType;
+import vehicles.engines.Engine;
+
//
public class SimpleVehicle extends Vehicle {
private static final int PASSENGER_COUNT = 5;
+ private static final EngineType ENGINE_TYPE = EngineType.CHEMICAL;
private static final double TARGET_DIAMETER = 3.0;
//
@@ -20,10 +24,29 @@ List getInitialParts() {
add(Cockpit.newCockpit(TARGET_DIAMETER, PASSENGER_COUNT));
add(new Storage(TARGET_DIAMETER));
add(new FuelTanks(TARGET_DIAMETER));
- add(new Engines(TARGET_DIAMETER));
+ add(Engine.newEngine(TARGET_DIAMETER, ENGINE_TYPE));
}};
}
+ //unused yet
+ private abstract static class CylindricalPart extends VehiclePart {
+ CylindricalPart(String name, double length, double diameter) {
+ super(name, 0, length, diameter);
+ }
+
+ static double getCylinderLength(double volume, double diameter) {
+ return volume / getCylinderCrossSection(diameter);
+ }
+
+ static double getCylinderVolume(double diameter, double length) {
+ return getCylinderCrossSection(diameter) * length;
+ }
+
+ private static double getCylinderCrossSection(double diameter) {
+ return Math.PI * Math.pow(diameter / 2, 2);
+ }
+ }
+
//
private static class Cockpit extends VehiclePart {
private static final String PART_NAME = "Cockpit";
@@ -53,12 +76,12 @@ private static double calculateFinalDiameter(double targetDiameter) {
private static double calculateFinalLength(double diameter, int passengerCount) {
return Math.max(
- getCylinderLength(passengerCount * VOLUME_PER_PASSENGER, diameter),
+ CylindricalPart.getCylinderLength(passengerCount * VOLUME_PER_PASSENGER, diameter),
MINIMUM_LENGTH);
}
private static double calculateMass(double diameter, double length) {
- return PART_DENSITY * getCylinderVolume(diameter, length);
+ return PART_DENSITY * CylindricalPart.getCylinderVolume(diameter, length);
}
}
@@ -85,35 +108,4 @@ private static double calculateMass() {
return 10;
}
}
-
- //
- private static class Engines extends VehiclePart {
- //
- Engines(double diameter) {
- super("Engines", calculateMass(), 1, diameter);
- }
-
- private static double calculateMass() {
- return 10;
- }
- }
-
- //unused yet
- private abstract static class CylindricalPart extends VehiclePart {
- CylindricalPart(String name, double length, double diameter) {
- super(name, 0, length, diameter);
- }
- }
-
- private static double getCylinderCrossSection(double diameter) {
- return Math.PI * Math.pow(diameter / 2, 2);
- }
-
- private static double getCylinderLength(double volume, double diameter) {
- return volume / getCylinderCrossSection(diameter);
- }
-
- private static double getCylinderVolume(double diameter, double length) {
- return getCylinderCrossSection(diameter) * length;
- }
}
\ No newline at end of file
diff --git a/src/main/java/vehicles/Vehicle.java b/src/main/java/vehicles/Vehicle.java
index ba828d4..4fb5543 100644
--- a/src/main/java/vehicles/Vehicle.java
+++ b/src/main/java/vehicles/Vehicle.java
@@ -4,16 +4,26 @@
import java.util.Map;
import java.util.HashMap;
+import vehicles.engines.Engine;
+
//
public abstract class Vehicle {
private final List parts;
private final Map partLocationMap;
+ private final double exhaustVelocity;
//
public Vehicle() {
parts = getInitialParts();
partLocationMap = new HashMap<>();
setPartLocationInfo();
+
+ try {
+ Engine engine = getEngine();
+ exhaustVelocity = engine.getExhaustVelocity();
+ } catch (NoEngineFoundException e) {
+ throw new RuntimeException(e);
+ }
}
//must be ordered for now
@@ -56,4 +66,23 @@ public double getLength() {
}
return total;
}
+
+ private Engine getEngine() throws NoEngineFoundException {
+ for (VehiclePart part : parts) {
+ if (part instanceof Engine) {
+ return (Engine) part;
+ }
+ }
+ throw new NoEngineFoundException();
+ }
+
+ private static class NoEngineFoundException extends Exception {
+ NoEngineFoundException() {
+ super("No engine found!");
+ }
+ }
+
+ public double getExhaustVelocity() {
+ return exhaustVelocity;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/vehicles/VehiclePart.java b/src/main/java/vehicles/VehiclePart.java
index dcda2d6..ed0a248 100644
--- a/src/main/java/vehicles/VehiclePart.java
+++ b/src/main/java/vehicles/VehiclePart.java
@@ -9,7 +9,7 @@ public class VehiclePart {
diameter;
//
- VehiclePart(String name, double mass, double length, double diameter) {
+ public VehiclePart(String name, double mass, double length, double diameter) {
this.name = name;
this.mass = mass;
this.length = length;
diff --git a/src/main/java/vehicles/engines/ChemicalEngine.java b/src/main/java/vehicles/engines/ChemicalEngine.java
new file mode 100644
index 0000000..d5242fe
--- /dev/null
+++ b/src/main/java/vehicles/engines/ChemicalEngine.java
@@ -0,0 +1,14 @@
+package vehicles.engines;
+
+public class ChemicalEngine extends Engine {
+ private static final double EXHAUST_VELOCITY = 5000;
+
+ protected ChemicalEngine(double diameter) {
+ super(diameter);
+ }
+
+ @Override
+ public double getExhaustVelocity() {
+ return EXHAUST_VELOCITY;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/Engine.java b/src/main/java/vehicles/engines/Engine.java
new file mode 100644
index 0000000..e138790
--- /dev/null
+++ b/src/main/java/vehicles/engines/Engine.java
@@ -0,0 +1,33 @@
+package vehicles.engines;
+
+import vehicles.VehiclePart;
+
+//
+public abstract class Engine extends VehiclePart {
+ private static final String PART_NAME = "Engine";
+
+ //use this for creating new engines
+ @SuppressWarnings({"SameParameterValue", "UnnecessaryDefault"})
+ public static Engine newEngine(double diameter, EngineType type) {
+ try {
+ return switch (type) {
+ case CHEMICAL -> new ChemicalEngine(diameter);
+ case ION -> new IonEngine(diameter);
+ default -> throw new UnsupportedEngineTypeException();
+ };
+ } catch (UnsupportedEngineTypeException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ //
+ Engine(double diameter) {
+ super(PART_NAME, calculateMass(), 1, diameter);
+ }
+
+ private static double calculateMass() {
+ return 10;
+ }
+
+ public abstract double getExhaustVelocity();
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/EngineType.java b/src/main/java/vehicles/engines/EngineType.java
new file mode 100644
index 0000000..6093f94
--- /dev/null
+++ b/src/main/java/vehicles/engines/EngineType.java
@@ -0,0 +1,7 @@
+package vehicles.engines;
+
+//TODO: add javadoc
+public enum EngineType {
+ CHEMICAL,
+ ION
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/IonEngine.java b/src/main/java/vehicles/engines/IonEngine.java
new file mode 100644
index 0000000..9f09c85
--- /dev/null
+++ b/src/main/java/vehicles/engines/IonEngine.java
@@ -0,0 +1,14 @@
+package vehicles.engines;
+
+public class IonEngine extends Engine {
+ private static final double EXHAUST_VELOCITY = 20000;
+
+ protected IonEngine(double diameter) {
+ super(diameter);
+ }
+
+ @Override
+ public double getExhaustVelocity() {
+ return EXHAUST_VELOCITY;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/UnsupportedEngineTypeException.java b/src/main/java/vehicles/engines/UnsupportedEngineTypeException.java
new file mode 100644
index 0000000..db06015
--- /dev/null
+++ b/src/main/java/vehicles/engines/UnsupportedEngineTypeException.java
@@ -0,0 +1,8 @@
+package vehicles.engines;
+
+//TODO: add javadoc
+class UnsupportedEngineTypeException extends Exception {
+ protected UnsupportedEngineTypeException() {
+ super("Unsupported engine type!");
+ }
+}
\ No newline at end of file
From 981e57ab3350e5eba22d23233a8eab36fbf51684 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 22 Jul 2023 14:32:54 +0300
Subject: [PATCH 18/26] improvements
---
.../java/vehicles/engines/ChemicalEngine.java | 36 +++++++++++++++++--
src/main/java/vehicles/engines/Engine.java | 14 +++-----
src/main/java/vehicles/engines/IonEngine.java | 8 +++--
3 files changed, 45 insertions(+), 13 deletions(-)
diff --git a/src/main/java/vehicles/engines/ChemicalEngine.java b/src/main/java/vehicles/engines/ChemicalEngine.java
index d5242fe..1ec8b06 100644
--- a/src/main/java/vehicles/engines/ChemicalEngine.java
+++ b/src/main/java/vehicles/engines/ChemicalEngine.java
@@ -2,13 +2,45 @@
public class ChemicalEngine extends Engine {
private static final double EXHAUST_VELOCITY = 5000;
+ private static final double
+ COMBUSTION_CHAMBER_DIAMETER = 0.5,
+ NOZZLE_PROPORTIONS = 3, // length / diameter
+ HARDCODED_MASS = 1000;
+ private final double nozzleLength;
- protected ChemicalEngine(double diameter) {
- super(diameter);
+ //use this for creating new chemical engine
+ protected static ChemicalEngine newChemicalEngine(double targetDiameter) {
+ double
+ finalDiameter = calculateFinalDiameter(targetDiameter),
+ nozzleLength = finalDiameter * NOZZLE_PROPORTIONS,
+ finalLength = COMBUSTION_CHAMBER_DIAMETER + nozzleLength,
+ finalMass = calculateMass();
+ return new ChemicalEngine(finalMass, finalLength, finalDiameter, nozzleLength);
+ }
+
+ private ChemicalEngine(double mass, double length, double diameter, double nozzleLength) {
+ super(mass, length, diameter);
+ this.nozzleLength = nozzleLength;
+ }
+
+ private static double calculateFinalDiameter(double targetDiameter) {
+ return Math.max(COMBUSTION_CHAMBER_DIAMETER, targetDiameter);
+ }
+
+ private static double calculateMass() {
+ return HARDCODED_MASS;
}
@Override
public double getExhaustVelocity() {
return EXHAUST_VELOCITY;
}
+
+ public double getCombustionChamberDiameter() {
+ return COMBUSTION_CHAMBER_DIAMETER;
+ }
+
+ public double[] getNozzleSize() {
+ return new double[] {nozzleLength, getDiameter()};
+ }
}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/Engine.java b/src/main/java/vehicles/engines/Engine.java
index e138790..abf96e5 100644
--- a/src/main/java/vehicles/engines/Engine.java
+++ b/src/main/java/vehicles/engines/Engine.java
@@ -8,11 +8,11 @@ public abstract class Engine extends VehiclePart {
//use this for creating new engines
@SuppressWarnings({"SameParameterValue", "UnnecessaryDefault"})
- public static Engine newEngine(double diameter, EngineType type) {
+ public static Engine newEngine(double targetDiameter, EngineType type) {
try {
return switch (type) {
- case CHEMICAL -> new ChemicalEngine(diameter);
- case ION -> new IonEngine(diameter);
+ case CHEMICAL -> ChemicalEngine.newChemicalEngine(targetDiameter);
+ case ION -> new IonEngine(targetDiameter);
default -> throw new UnsupportedEngineTypeException();
};
} catch (UnsupportedEngineTypeException e) {
@@ -21,12 +21,8 @@ public static Engine newEngine(double diameter, EngineType type) {
}
//
- Engine(double diameter) {
- super(PART_NAME, calculateMass(), 1, diameter);
- }
-
- private static double calculateMass() {
- return 10;
+ protected Engine(double mass, double length, double diameter) {
+ super(PART_NAME, mass, length, diameter);
}
public abstract double getExhaustVelocity();
diff --git a/src/main/java/vehicles/engines/IonEngine.java b/src/main/java/vehicles/engines/IonEngine.java
index 9f09c85..b88ab68 100644
--- a/src/main/java/vehicles/engines/IonEngine.java
+++ b/src/main/java/vehicles/engines/IonEngine.java
@@ -3,8 +3,12 @@
public class IonEngine extends Engine {
private static final double EXHAUST_VELOCITY = 20000;
- protected IonEngine(double diameter) {
- super(diameter);
+ protected IonEngine(double targetDiameter) {
+ super(calculateMass(), 1, targetDiameter);
+ }
+
+ private static double calculateMass() {
+ return 10;
}
@Override
From 8d40fa5b0779596c65748902f05c97c9d4224275 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 22 Jul 2023 14:51:16 +0300
Subject: [PATCH 19/26] improvements
---
src/main/java/vehicles/Cockpit.java | 39 +++++++++++++++
src/main/java/vehicles/CylinderFunctions.java | 23 +++++++++
src/main/java/vehicles/SimpleVehicle.java | 50 -------------------
3 files changed, 62 insertions(+), 50 deletions(-)
create mode 100644 src/main/java/vehicles/Cockpit.java
create mode 100644 src/main/java/vehicles/CylinderFunctions.java
diff --git a/src/main/java/vehicles/Cockpit.java b/src/main/java/vehicles/Cockpit.java
new file mode 100644
index 0000000..f7b970b
--- /dev/null
+++ b/src/main/java/vehicles/Cockpit.java
@@ -0,0 +1,39 @@
+package vehicles;
+
+//
+class Cockpit extends VehiclePart {
+ private static final String PART_NAME = "Cockpit";
+ private static final double
+ MINIMUM_LENGTH = 1.0, // arbitrary
+ MINIMUM_DIAMETER = 3.0, // arbitrary
+ VOLUME_PER_PASSENGER = 3.0, // arbitrary
+ PART_DENSITY = 500; // arbitrary
+
+ //use this for creating new cockpit
+ @SuppressWarnings("SameParameterValue")
+ static Cockpit newCockpit(double targetDiameter, int passengerCount) {
+ double
+ finalDiameter = calculateFinalDiameter(targetDiameter),
+ finalLength = calculateFinalLength(finalDiameter, passengerCount),
+ mass = calculateMass(finalDiameter, finalLength);
+ return new Cockpit(mass, finalLength, finalDiameter);
+ }
+
+ private Cockpit(double mass, double length, double diameter) {
+ super(PART_NAME, mass, length, diameter);
+ }
+
+ private static double calculateFinalDiameter(double targetDiameter) {
+ return Math.max(targetDiameter, MINIMUM_DIAMETER);
+ }
+
+ private static double calculateFinalLength(double diameter, int passengerCount) {
+ return Math.max(
+ CylinderFunctions.getCylinderLength(passengerCount * VOLUME_PER_PASSENGER, diameter),
+ MINIMUM_LENGTH);
+ }
+
+ private static double calculateMass(double diameter, double length) {
+ return PART_DENSITY * CylinderFunctions.getCylinderVolume(diameter, length);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/CylinderFunctions.java b/src/main/java/vehicles/CylinderFunctions.java
new file mode 100644
index 0000000..3017e5f
--- /dev/null
+++ b/src/main/java/vehicles/CylinderFunctions.java
@@ -0,0 +1,23 @@
+package vehicles;
+
+//
+public class CylinderFunctions {
+ //
+ public static double getCircleArea(double radius) {
+ return Math.PI * Math.pow(radius, 2);
+ }
+
+ private static double getCrossSection(double diameter) {
+ return getCircleArea(diameter / 2);
+ }
+
+ //
+ public static double getCylinderVolume(double diameter, double length) {
+ return getCrossSection(diameter) * length;
+ }
+
+ //
+ public static double getCylinderLength(double volume, double diameter) {
+ return volume / getCrossSection(diameter);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/SimpleVehicle.java b/src/main/java/vehicles/SimpleVehicle.java
index a98aee3..b6a7913 100644
--- a/src/main/java/vehicles/SimpleVehicle.java
+++ b/src/main/java/vehicles/SimpleVehicle.java
@@ -33,56 +33,6 @@ private abstract static class CylindricalPart extends VehiclePart {
CylindricalPart(String name, double length, double diameter) {
super(name, 0, length, diameter);
}
-
- static double getCylinderLength(double volume, double diameter) {
- return volume / getCylinderCrossSection(diameter);
- }
-
- static double getCylinderVolume(double diameter, double length) {
- return getCylinderCrossSection(diameter) * length;
- }
-
- private static double getCylinderCrossSection(double diameter) {
- return Math.PI * Math.pow(diameter / 2, 2);
- }
- }
-
- //
- private static class Cockpit extends VehiclePart {
- private static final String PART_NAME = "Cockpit";
- private static final double
- MINIMUM_LENGTH = 1.0, // arbitrary
- MINIMUM_DIAMETER = 3.0, // arbitrary
- VOLUME_PER_PASSENGER = 3.0, // arbitrary
- PART_DENSITY = 500; // arbitrary
-
- //use this for creating new cockpit
- @SuppressWarnings("SameParameterValue")
- static Cockpit newCockpit(double targetDiameter, int passengerCount) {
- double
- finalDiameter = calculateFinalDiameter(targetDiameter),
- finalLength = calculateFinalLength(finalDiameter, passengerCount),
- mass = calculateMass(finalDiameter, finalLength);
- return new Cockpit(mass, finalLength, finalDiameter);
- }
-
- private Cockpit(double mass, double length, double diameter) {
- super(PART_NAME, mass, length, diameter);
- }
-
- private static double calculateFinalDiameter(double targetDiameter) {
- return Math.max(targetDiameter, MINIMUM_DIAMETER);
- }
-
- private static double calculateFinalLength(double diameter, int passengerCount) {
- return Math.max(
- CylindricalPart.getCylinderLength(passengerCount * VOLUME_PER_PASSENGER, diameter),
- MINIMUM_LENGTH);
- }
-
- private static double calculateMass(double diameter, double length) {
- return PART_DENSITY * CylindricalPart.getCylinderVolume(diameter, length);
- }
}
//
From c54a6e9fd9b9a1ebe09a0772ea3e0522b276a3cf Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 22 Jul 2023 15:49:33 +0300
Subject: [PATCH 20/26] improvements
---
.../java/vehicles/engines/ChemicalEngine.java | 46 -----------------
src/main/java/vehicles/engines/Engine.java | 1 +
.../engines/chemical/ChemicalEngine.java | 51 +++++++++++++++++++
.../engines/chemical/CombustionChamber.java | 18 +++++++
.../vehicles/engines/chemical/Nozzle.java | 31 +++++++++++
5 files changed, 101 insertions(+), 46 deletions(-)
delete mode 100644 src/main/java/vehicles/engines/ChemicalEngine.java
create mode 100644 src/main/java/vehicles/engines/chemical/ChemicalEngine.java
create mode 100644 src/main/java/vehicles/engines/chemical/CombustionChamber.java
create mode 100644 src/main/java/vehicles/engines/chemical/Nozzle.java
diff --git a/src/main/java/vehicles/engines/ChemicalEngine.java b/src/main/java/vehicles/engines/ChemicalEngine.java
deleted file mode 100644
index 1ec8b06..0000000
--- a/src/main/java/vehicles/engines/ChemicalEngine.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package vehicles.engines;
-
-public class ChemicalEngine extends Engine {
- private static final double EXHAUST_VELOCITY = 5000;
- private static final double
- COMBUSTION_CHAMBER_DIAMETER = 0.5,
- NOZZLE_PROPORTIONS = 3, // length / diameter
- HARDCODED_MASS = 1000;
- private final double nozzleLength;
-
- //use this for creating new chemical engine
- protected static ChemicalEngine newChemicalEngine(double targetDiameter) {
- double
- finalDiameter = calculateFinalDiameter(targetDiameter),
- nozzleLength = finalDiameter * NOZZLE_PROPORTIONS,
- finalLength = COMBUSTION_CHAMBER_DIAMETER + nozzleLength,
- finalMass = calculateMass();
- return new ChemicalEngine(finalMass, finalLength, finalDiameter, nozzleLength);
- }
-
- private ChemicalEngine(double mass, double length, double diameter, double nozzleLength) {
- super(mass, length, diameter);
- this.nozzleLength = nozzleLength;
- }
-
- private static double calculateFinalDiameter(double targetDiameter) {
- return Math.max(COMBUSTION_CHAMBER_DIAMETER, targetDiameter);
- }
-
- private static double calculateMass() {
- return HARDCODED_MASS;
- }
-
- @Override
- public double getExhaustVelocity() {
- return EXHAUST_VELOCITY;
- }
-
- public double getCombustionChamberDiameter() {
- return COMBUSTION_CHAMBER_DIAMETER;
- }
-
- public double[] getNozzleSize() {
- return new double[] {nozzleLength, getDiameter()};
- }
-}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/Engine.java b/src/main/java/vehicles/engines/Engine.java
index abf96e5..8f1b394 100644
--- a/src/main/java/vehicles/engines/Engine.java
+++ b/src/main/java/vehicles/engines/Engine.java
@@ -1,6 +1,7 @@
package vehicles.engines;
import vehicles.VehiclePart;
+import vehicles.engines.chemical.ChemicalEngine;
//
public abstract class Engine extends VehiclePart {
diff --git a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
new file mode 100644
index 0000000..f845f4a
--- /dev/null
+++ b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
@@ -0,0 +1,51 @@
+package vehicles.engines.chemical;
+
+import vehicles.engines.Engine;
+
+//
+public class ChemicalEngine extends Engine {
+ private static final double EXHAUST_VELOCITY = 5000;
+ private static final double
+ EXHAUST_DIAMETER = 1,
+ HARDCODED_MASS = 1000;
+
+ private final CombustionChamber combustionChamber;
+ private final Nozzle nozzle;
+
+ //use this for creating new chemical engine
+ public static ChemicalEngine newChemicalEngine(double targetDiameter) {
+ Nozzle nozzle = new Nozzle(EXHAUST_DIAMETER);
+ CombustionChamber combustionChamber = new CombustionChamber(nozzle.getThroatDiameter());
+ double
+ finalDiameter = Math.max(combustionChamber.getDiameter(), nozzle.getDiameter()),
+ finalLength = combustionChamber.getDiameter() + nozzle.getLength(),
+ finalMass = HARDCODED_MASS;
+
+ return new ChemicalEngine(
+ finalMass, finalLength, finalDiameter,
+ combustionChamber, nozzle);
+ }
+
+ private ChemicalEngine(double mass, double length, double diameter,
+ CombustionChamber combustionChamber, Nozzle nozzle) {
+ super(mass, length, diameter);
+ this.combustionChamber = combustionChamber;
+ this.nozzle = nozzle;
+ }
+
+ //
+ @Override
+ public double getExhaustVelocity() {
+ return EXHAUST_VELOCITY;
+ }
+
+ //
+ public CombustionChamber getCombustionChamber() {
+ return combustionChamber;
+ }
+
+ //
+ public Nozzle getNozzle() {
+ return nozzle;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/chemical/CombustionChamber.java b/src/main/java/vehicles/engines/chemical/CombustionChamber.java
new file mode 100644
index 0000000..7aeea66
--- /dev/null
+++ b/src/main/java/vehicles/engines/chemical/CombustionChamber.java
@@ -0,0 +1,18 @@
+package vehicles.engines.chemical;
+
+//a spherical combustion chamber
+public class CombustionChamber {
+ private static final double DIAMETER_THROAT_RATIO = 2.0;
+
+ private final double diameter;
+
+ //
+ protected CombustionChamber(double throatDiameter) {
+ diameter = throatDiameter * DIAMETER_THROAT_RATIO;
+ }
+
+ //
+ public double getDiameter() {
+ return diameter;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/chemical/Nozzle.java b/src/main/java/vehicles/engines/chemical/Nozzle.java
new file mode 100644
index 0000000..8cce847
--- /dev/null
+++ b/src/main/java/vehicles/engines/chemical/Nozzle.java
@@ -0,0 +1,31 @@
+package vehicles.engines.chemical;
+
+//
+public class Nozzle {
+ private static final double
+ DIAMETER_THROAT_RATIO = 2.0,
+ LENGTH_DIAMETER_RATIO = 3.0;
+
+ private final double diameter, length;
+
+ //
+ protected Nozzle(double exhaustDiameter) {
+ diameter = exhaustDiameter;
+ length = diameter * LENGTH_DIAMETER_RATIO;
+ }
+
+ //
+ public double getDiameter() {
+ return diameter;
+ }
+
+ //
+ public double getLength() {
+ return length;
+ }
+
+ //
+ public double getThroatDiameter() {
+ return diameter / DIAMETER_THROAT_RATIO;
+ }
+}
\ No newline at end of file
From 78c03cdaf275316e19d7c91529ac081463de466f Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sat, 22 Jul 2023 16:03:23 +0300
Subject: [PATCH 21/26] improvements
---
src/main/java/vehicleGraphics/VehiclePanel.java | 2 +-
src/main/java/vehicles/engines/chemical/ChemicalEngine.java | 2 +-
src/main/java/vehicles/engines/chemical/Nozzle.java | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/main/java/vehicleGraphics/VehiclePanel.java b/src/main/java/vehicleGraphics/VehiclePanel.java
index 5b80937..54d801f 100644
--- a/src/main/java/vehicleGraphics/VehiclePanel.java
+++ b/src/main/java/vehicleGraphics/VehiclePanel.java
@@ -6,7 +6,7 @@
//
public class VehiclePanel extends JPanel {
- private static final double VEHICLE_DRAW_ANGLE = 55;
+ private static final double VEHICLE_DRAW_ANGLE = 33;
private final VehiclePanelData panelData;
private final PainterInterface
borderPainter,
diff --git a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
index f845f4a..4fc391c 100644
--- a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
+++ b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
@@ -4,8 +4,8 @@
//
public class ChemicalEngine extends Engine {
- private static final double EXHAUST_VELOCITY = 5000;
private static final double
+ EXHAUST_VELOCITY = 5000,
EXHAUST_DIAMETER = 1,
HARDCODED_MASS = 1000;
diff --git a/src/main/java/vehicles/engines/chemical/Nozzle.java b/src/main/java/vehicles/engines/chemical/Nozzle.java
index 8cce847..520bdb1 100644
--- a/src/main/java/vehicles/engines/chemical/Nozzle.java
+++ b/src/main/java/vehicles/engines/chemical/Nozzle.java
@@ -3,8 +3,8 @@
//
public class Nozzle {
private static final double
- DIAMETER_THROAT_RATIO = 2.0,
- LENGTH_DIAMETER_RATIO = 3.0;
+ DIAMETER_THROAT_RATIO = 30.0, // arbitrary
+ LENGTH_DIAMETER_RATIO = 1 / Math.tan(Math.toRadians(15)); // approximate
private final double diameter, length;
From bb488b84dc937088961a5f1daea022becead0d88 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sun, 23 Jul 2023 09:31:19 +0300
Subject: [PATCH 22/26] improvements
---
src/main/java/mathUtilities/Circles.java | 24 +++++++++++
src/main/java/mathUtilities/Cylinders.java | 18 ++++++++
src/main/java/vehicles/Cockpit.java | 6 ++-
src/main/java/vehicles/CylinderFunctions.java | 23 ----------
src/main/java/vehicles/SimpleVehicle.java | 32 ++++++++------
src/main/java/vehicles/engines/Engine.java | 9 ++--
src/main/java/vehicles/engines/IonEngine.java | 23 ++++++++--
.../engines/chemical/ChemicalEngine.java | 26 ++++++++----
.../engines/chemical/CombustionChamber.java | 8 ++++
.../vehicles/engines/chemical/Nozzle.java | 42 +++++++++++++++++--
10 files changed, 154 insertions(+), 57 deletions(-)
create mode 100644 src/main/java/mathUtilities/Circles.java
create mode 100644 src/main/java/mathUtilities/Cylinders.java
delete mode 100644 src/main/java/vehicles/CylinderFunctions.java
diff --git a/src/main/java/mathUtilities/Circles.java b/src/main/java/mathUtilities/Circles.java
new file mode 100644
index 0000000..b8b8d87
--- /dev/null
+++ b/src/main/java/mathUtilities/Circles.java
@@ -0,0 +1,24 @@
+package mathUtilities;
+
+//
+public class Circles {
+ // C = 2 * pi * R
+ public static double getCircumference(double radius) {
+ return 2 * Math.PI * radius;
+ }
+
+ // R = C / 2 / pi
+ public static double getRadiusFromCircumference(double circumference) {
+ return circumference / 2 / Math.PI;
+ }
+
+ // S = pi * R ^ 2
+ public static double getArea(double radius) {
+ return Math.PI * Math.pow(radius, 2);
+ }
+
+ // R = sqrt(S / pi)
+ public static double getRadiusFromArea(double area) {
+ return Math.sqrt(area / Math.PI);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/mathUtilities/Cylinders.java b/src/main/java/mathUtilities/Cylinders.java
new file mode 100644
index 0000000..7155aba
--- /dev/null
+++ b/src/main/java/mathUtilities/Cylinders.java
@@ -0,0 +1,18 @@
+package mathUtilities;
+
+//
+public class Cylinders {
+ //
+ public static double getVolume(double diameter, double length) {
+ return getCrossSection(diameter) * length;
+ }
+
+ //
+ public static double getLength(double volume, double diameter) {
+ return volume / getCrossSection(diameter);
+ }
+
+ private static double getCrossSection(double diameter) {
+ return Circles.getArea(diameter / 2);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/Cockpit.java b/src/main/java/vehicles/Cockpit.java
index f7b970b..a31350b 100644
--- a/src/main/java/vehicles/Cockpit.java
+++ b/src/main/java/vehicles/Cockpit.java
@@ -1,5 +1,7 @@
package vehicles;
+import mathUtilities.Cylinders;
+
//
class Cockpit extends VehiclePart {
private static final String PART_NAME = "Cockpit";
@@ -29,11 +31,11 @@ private static double calculateFinalDiameter(double targetDiameter) {
private static double calculateFinalLength(double diameter, int passengerCount) {
return Math.max(
- CylinderFunctions.getCylinderLength(passengerCount * VOLUME_PER_PASSENGER, diameter),
+ Cylinders.getLength(passengerCount * VOLUME_PER_PASSENGER, diameter),
MINIMUM_LENGTH);
}
private static double calculateMass(double diameter, double length) {
- return PART_DENSITY * CylinderFunctions.getCylinderVolume(diameter, length);
+ return PART_DENSITY * Cylinders.getVolume(diameter, length);
}
}
\ No newline at end of file
diff --git a/src/main/java/vehicles/CylinderFunctions.java b/src/main/java/vehicles/CylinderFunctions.java
deleted file mode 100644
index 3017e5f..0000000
--- a/src/main/java/vehicles/CylinderFunctions.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package vehicles;
-
-//
-public class CylinderFunctions {
- //
- public static double getCircleArea(double radius) {
- return Math.PI * Math.pow(radius, 2);
- }
-
- private static double getCrossSection(double diameter) {
- return getCircleArea(diameter / 2);
- }
-
- //
- public static double getCylinderVolume(double diameter, double length) {
- return getCrossSection(diameter) * length;
- }
-
- //
- public static double getCylinderLength(double volume, double diameter) {
- return volume / getCrossSection(diameter);
- }
-}
\ No newline at end of file
diff --git a/src/main/java/vehicles/SimpleVehicle.java b/src/main/java/vehicles/SimpleVehicle.java
index b6a7913..e3583ce 100644
--- a/src/main/java/vehicles/SimpleVehicle.java
+++ b/src/main/java/vehicles/SimpleVehicle.java
@@ -10,7 +10,9 @@
public class SimpleVehicle extends Vehicle {
private static final int PASSENGER_COUNT = 5;
private static final EngineType ENGINE_TYPE = EngineType.CHEMICAL;
- private static final double TARGET_DIAMETER = 3.0;
+ private static final double
+ ENGINE_THRUST_KN = 1000, // in kN; arbitrary
+ TARGET_DIAMETER = 3.0;
//
public SimpleVehicle() {
@@ -20,42 +22,46 @@ public SimpleVehicle() {
//
@Override
List getInitialParts() {
+ double thrust_SI = ENGINE_THRUST_KN * 1000;
return new ArrayList<>() {{
add(Cockpit.newCockpit(TARGET_DIAMETER, PASSENGER_COUNT));
add(new Storage(TARGET_DIAMETER));
add(new FuelTanks(TARGET_DIAMETER));
- add(Engine.newEngine(TARGET_DIAMETER, ENGINE_TYPE));
+ add(Engine.newEngine(ENGINE_TYPE, thrust_SI));
}};
}
- //unused yet
- private abstract static class CylindricalPart extends VehiclePart {
- CylindricalPart(String name, double length, double diameter) {
- super(name, 0, length, diameter);
- }
- }
-
//
private static class Storage extends VehiclePart {
+ private static final String PART_NAME = "Storage";
+ private static final double
+ LENGTH = 5,
+ MASS = 10;
+
//
Storage(double diameter) {
- super("Storage", calculateMass(), 5, diameter);
+ super(PART_NAME, calculateMass(), LENGTH, diameter);
}
private static double calculateMass() {
- return 10;
+ return MASS;
}
}
//
private static class FuelTanks extends VehiclePart {
+ private static final String PART_NAME = "Fuel tanks";
+ private static final double
+ LENGTH = 20,
+ MASS = 10;
+
//
FuelTanks(double diameter) {
- super("Fuel Tanks", calculateMass(), 20, diameter);
+ super(PART_NAME, calculateMass(), LENGTH, diameter);
}
private static double calculateMass() {
- return 10;
+ return MASS;
}
}
}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/Engine.java b/src/main/java/vehicles/engines/Engine.java
index 8f1b394..f1cbbd1 100644
--- a/src/main/java/vehicles/engines/Engine.java
+++ b/src/main/java/vehicles/engines/Engine.java
@@ -9,11 +9,13 @@ public abstract class Engine extends VehiclePart {
//use this for creating new engines
@SuppressWarnings({"SameParameterValue", "UnnecessaryDefault"})
- public static Engine newEngine(double targetDiameter, EngineType type) {
+ public static Engine newEngine(EngineType type, double thrust) {
+ System.out.println("Creating new " + type + " engine.");
+ System.out.println("Thrust: " + (thrust / 1000) + " kN");
try {
return switch (type) {
- case CHEMICAL -> ChemicalEngine.newChemicalEngine(targetDiameter);
- case ION -> new IonEngine(targetDiameter);
+ case CHEMICAL -> ChemicalEngine.newChemicalEngine(thrust);
+ case ION -> new IonEngine();
default -> throw new UnsupportedEngineTypeException();
};
} catch (UnsupportedEngineTypeException e) {
@@ -26,5 +28,6 @@ protected Engine(double mass, double length, double diameter) {
super(PART_NAME, mass, length, diameter);
}
+ //
public abstract double getExhaustVelocity();
}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/IonEngine.java b/src/main/java/vehicles/engines/IonEngine.java
index b88ab68..fd6a91f 100644
--- a/src/main/java/vehicles/engines/IonEngine.java
+++ b/src/main/java/vehicles/engines/IonEngine.java
@@ -1,16 +1,31 @@
package vehicles.engines;
+//
public class IonEngine extends Engine {
- private static final double EXHAUST_VELOCITY = 20000;
+ private static final double
+ EXHAUST_VELOCITY = 20000, // arbitrary
+ HARDCODED_DIAMETER = 3, // arbitrary
+ HARDCODED_LENGTH = 1, // arbitrary
+ HARDCODED_MASS = 1000; // arbitrary
- protected IonEngine(double targetDiameter) {
- super(calculateMass(), 1, targetDiameter);
+ //
+ protected IonEngine() {
+ super(calculateMass(), calculateLength(), calculateDiameter());
+ }
+
+ private static double calculateDiameter() {
+ return HARDCODED_DIAMETER;
+ }
+
+ private static double calculateLength() {
+ return HARDCODED_LENGTH;
}
private static double calculateMass() {
- return 10;
+ return HARDCODED_MASS;
}
+ //
@Override
public double getExhaustVelocity() {
return EXHAUST_VELOCITY;
diff --git a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
index 4fc391c..27dee06 100644
--- a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
+++ b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
@@ -5,24 +5,32 @@
//
public class ChemicalEngine extends Engine {
private static final double
- EXHAUST_VELOCITY = 5000,
- EXHAUST_DIAMETER = 1,
- HARDCODED_MASS = 1000;
+ EXHAUST_VELOCITY = 5000, // average, approximate
+ PROPELLANT_MOLAR_MASS = 18 / 1000.0,
+ EXHAUST_TEMPERATURE = 5000,
+ EXHAUST_PRESSURE = 200000,
+ HARDCODED_MASS = 5000; // arbitrary
private final CombustionChamber combustionChamber;
private final Nozzle nozzle;
//use this for creating new chemical engine
- public static ChemicalEngine newChemicalEngine(double targetDiameter) {
- Nozzle nozzle = new Nozzle(EXHAUST_DIAMETER);
- CombustionChamber combustionChamber = new CombustionChamber(nozzle.getThroatDiameter());
+ public static ChemicalEngine newChemicalEngine(double thrust) {
+ Nozzle nozzle = new Nozzle(
+ thrust, EXHAUST_VELOCITY,
+ PROPELLANT_MOLAR_MASS, EXHAUST_TEMPERATURE, EXHAUST_PRESSURE);
+ double throatDiameter = nozzle.getThroatDiameter();
+ System.out.println("Throat diameter: " + throatDiameter + " m");
+ CombustionChamber combustionChamber = new CombustionChamber(throatDiameter);
+
double
finalDiameter = Math.max(combustionChamber.getDiameter(), nozzle.getDiameter()),
- finalLength = combustionChamber.getDiameter() + nozzle.getLength(),
- finalMass = HARDCODED_MASS;
+ finalLength = combustionChamber.getDiameter() + nozzle.getLength();
+
+ System.out.println("Total engine size: " + finalLength + " x " + finalDiameter);
return new ChemicalEngine(
- finalMass, finalLength, finalDiameter,
+ HARDCODED_MASS, finalLength, finalDiameter,
combustionChamber, nozzle);
}
diff --git a/src/main/java/vehicles/engines/chemical/CombustionChamber.java b/src/main/java/vehicles/engines/chemical/CombustionChamber.java
index 7aeea66..5e508ba 100644
--- a/src/main/java/vehicles/engines/chemical/CombustionChamber.java
+++ b/src/main/java/vehicles/engines/chemical/CombustionChamber.java
@@ -9,6 +9,14 @@ public class CombustionChamber {
//
protected CombustionChamber(double throatDiameter) {
diameter = throatDiameter * DIAMETER_THROAT_RATIO;
+ printParametersToConsole(diameter);
+ }
+
+ private static void printParametersToConsole(double diameter) {
+ double
+ diameter_mm = diameter * 1000,
+ diameter_mm_rounded = ((int) (diameter_mm * 100)) / 100.0;
+ System.out.println("Combustion chamber diameter: " + diameter_mm_rounded + " mm");
}
//
diff --git a/src/main/java/vehicles/engines/chemical/Nozzle.java b/src/main/java/vehicles/engines/chemical/Nozzle.java
index 520bdb1..1679d96 100644
--- a/src/main/java/vehicles/engines/chemical/Nozzle.java
+++ b/src/main/java/vehicles/engines/chemical/Nozzle.java
@@ -1,17 +1,53 @@
package vehicles.engines.chemical;
+import mathUtilities.Circles;
+
//
public class Nozzle {
private static final double
+ GAS_CONSTANT = 8.31,
DIAMETER_THROAT_RATIO = 30.0, // arbitrary
LENGTH_DIAMETER_RATIO = 1 / Math.tan(Math.toRadians(15)); // approximate
- private final double diameter, length;
+ private final double
+ diameter,
+ length;
//
- protected Nozzle(double exhaustDiameter) {
- diameter = exhaustDiameter;
+ protected Nozzle(double thrust, double exhaustVelocity,
+ double propellantMolarMass, double exhaustTemperature, double exhaustPressure) {
+ double
+ propellantDensityAtExhaust = calculatePropellantDensityAtExhaust(
+ propellantMolarMass, exhaustTemperature, exhaustPressure),
+ exhaustCrossSection = calculateExhaustCrossSection(
+ thrust, exhaustVelocity, propellantDensityAtExhaust);
+ diameter = calculateExhaustDiameter(exhaustCrossSection);
length = diameter * LENGTH_DIAMETER_RATIO;
+ printParametersToConsole(propellantDensityAtExhaust, length, diameter);
+ }
+
+ // ro = p * M / R / T
+ private double calculatePropellantDensityAtExhaust(double molarMass, double temperature, double pressure) {
+ return pressure * molarMass / GAS_CONSTANT / temperature;
+ }
+
+ // S = F / (ro * ve ^ 2)
+ private double calculateExhaustCrossSection(double thrust, double exhaustVelocity, double propellantDensity) {
+ return thrust / (propellantDensity * Math.pow(exhaustVelocity, 2));
+ }
+
+ private double calculateExhaustDiameter(double crossSection) {
+ return Circles.getRadiusFromArea(crossSection) * 2;
+ }
+
+ private static void printParametersToConsole(double propellantDensityAtExhaust,
+ double length, double diameter) {
+ double
+ propellantDensity_rounded = ((int) (propellantDensityAtExhaust * 1000)) / 1000.0,
+ length_rounded = ((int) (length * 1000)) / 1000.0,
+ diameter_rounded = ((int) (diameter * 1000)) / 1000.0;
+ System.out.println("Propellant density at exhaust: " + propellantDensity_rounded + " kg/m3");
+ System.out.println("Nozzle size: " + length_rounded + " x " + diameter_rounded);
}
//
From c6386ac513e2c20aa8bcb9a7344cc16089bdd31d Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sun, 23 Jul 2023 10:21:25 +0300
Subject: [PATCH 23/26] improvements
---
.../engines/chemical/ChemicalEngine.java | 23 ++++++++----
.../engines/chemical/CombustionChamber.java | 2 +-
.../vehicles/engines/chemical/Nozzle.java | 37 ++++++++++++-------
.../engines/propellants/Propellant.java | 18 +++++++++
.../engines/propellants/WaterPropellant.java | 11 ++++++
5 files changed, 68 insertions(+), 23 deletions(-)
create mode 100644 src/main/java/vehicles/engines/propellants/Propellant.java
create mode 100644 src/main/java/vehicles/engines/propellants/WaterPropellant.java
diff --git a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
index 27dee06..a3b3336 100644
--- a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
+++ b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
@@ -1,15 +1,17 @@
package vehicles.engines.chemical;
import vehicles.engines.Engine;
+import vehicles.engines.propellants.Propellant;
+import vehicles.engines.propellants.WaterPropellant;
//
public class ChemicalEngine extends Engine {
private static final double
EXHAUST_VELOCITY = 5000, // average, approximate
- PROPELLANT_MOLAR_MASS = 18 / 1000.0,
- EXHAUST_TEMPERATURE = 5000,
- EXHAUST_PRESSURE = 200000,
+ EXHAUST_TEMPERATURE = 5000, // arbitrary
+ EXHAUST_PRESSURE = 200000, // arbitrary
HARDCODED_MASS = 5000; // arbitrary
+ private static final Propellant PROPELLANT = new WaterPropellant();
private final CombustionChamber combustionChamber;
private final Nozzle nozzle;
@@ -17,23 +19,28 @@ public class ChemicalEngine extends Engine {
//use this for creating new chemical engine
public static ChemicalEngine newChemicalEngine(double thrust) {
Nozzle nozzle = new Nozzle(
+ PROPELLANT,
thrust, EXHAUST_VELOCITY,
- PROPELLANT_MOLAR_MASS, EXHAUST_TEMPERATURE, EXHAUST_PRESSURE);
+ EXHAUST_TEMPERATURE, EXHAUST_PRESSURE);
double throatDiameter = nozzle.getThroatDiameter();
- System.out.println("Throat diameter: " + throatDiameter + " m");
CombustionChamber combustionChamber = new CombustionChamber(throatDiameter);
double
finalDiameter = Math.max(combustionChamber.getDiameter(), nozzle.getDiameter()),
finalLength = combustionChamber.getDiameter() + nozzle.getLength();
-
- System.out.println("Total engine size: " + finalLength + " x " + finalDiameter);
-
+ printParametersToConsole(finalLength, finalDiameter);
return new ChemicalEngine(
HARDCODED_MASS, finalLength, finalDiameter,
combustionChamber, nozzle);
}
+ private static void printParametersToConsole(double length, double diameter) {
+ double
+ lengthRounded = ((int) (length * 1000)) / 1000.0,
+ diameterRounded = ((int) (diameter * 1000)) / 1000.0;
+ System.out.println("Total engine size: " + lengthRounded + " m x " + diameterRounded + " m");
+ }
+
private ChemicalEngine(double mass, double length, double diameter,
CombustionChamber combustionChamber, Nozzle nozzle) {
super(mass, length, diameter);
diff --git a/src/main/java/vehicles/engines/chemical/CombustionChamber.java b/src/main/java/vehicles/engines/chemical/CombustionChamber.java
index 5e508ba..bdc0090 100644
--- a/src/main/java/vehicles/engines/chemical/CombustionChamber.java
+++ b/src/main/java/vehicles/engines/chemical/CombustionChamber.java
@@ -2,7 +2,7 @@
//a spherical combustion chamber
public class CombustionChamber {
- private static final double DIAMETER_THROAT_RATIO = 2.0;
+ private static final double DIAMETER_THROAT_RATIO = 2.0; // arbitrary
private final double diameter;
diff --git a/src/main/java/vehicles/engines/chemical/Nozzle.java b/src/main/java/vehicles/engines/chemical/Nozzle.java
index 1679d96..3428f1d 100644
--- a/src/main/java/vehicles/engines/chemical/Nozzle.java
+++ b/src/main/java/vehicles/engines/chemical/Nozzle.java
@@ -1,11 +1,11 @@
package vehicles.engines.chemical;
import mathUtilities.Circles;
+import vehicles.engines.propellants.Propellant;
//
public class Nozzle {
private static final double
- GAS_CONSTANT = 8.31,
DIAMETER_THROAT_RATIO = 30.0, // arbitrary
LENGTH_DIAMETER_RATIO = 1 / Math.tan(Math.toRadians(15)); // approximate
@@ -14,21 +14,20 @@ public class Nozzle {
length;
//
- protected Nozzle(double thrust, double exhaustVelocity,
- double propellantMolarMass, double exhaustTemperature, double exhaustPressure) {
+ protected Nozzle(Propellant propellant,
+ double thrust, double exhaustVelocity,
+ double exhaustTemperature, double exhaustPressure) {
double
- propellantDensityAtExhaust = calculatePropellantDensityAtExhaust(
- propellantMolarMass, exhaustTemperature, exhaustPressure),
+ propellantDensityAtExhaust = propellant.getDensity(exhaustTemperature, exhaustPressure),
exhaustCrossSection = calculateExhaustCrossSection(
thrust, exhaustVelocity, propellantDensityAtExhaust);
diameter = calculateExhaustDiameter(exhaustCrossSection);
length = diameter * LENGTH_DIAMETER_RATIO;
- printParametersToConsole(propellantDensityAtExhaust, length, diameter);
- }
- // ro = p * M / R / T
- private double calculatePropellantDensityAtExhaust(double molarMass, double temperature, double pressure) {
- return pressure * molarMass / GAS_CONSTANT / temperature;
+ printParametersToConsole(
+ propellantDensityAtExhaust,
+ length, diameter,
+ getThroatDiameter());
}
// S = F / (ro * ve ^ 2)
@@ -41,13 +40,23 @@ private double calculateExhaustDiameter(double crossSection) {
}
private static void printParametersToConsole(double propellantDensityAtExhaust,
- double length, double diameter) {
+ double length, double diameter,
+ double throatDiameter) {
+ //propellant density
+ double propellantDensity_rounded = ((int) (propellantDensityAtExhaust * 1000)) / 1000.0;
+ System.out.println("Propellant density at exhaust: " + propellantDensity_rounded + " kg/m3");
+
+ //length x diameter
double
- propellantDensity_rounded = ((int) (propellantDensityAtExhaust * 1000)) / 1000.0,
length_rounded = ((int) (length * 1000)) / 1000.0,
diameter_rounded = ((int) (diameter * 1000)) / 1000.0;
- System.out.println("Propellant density at exhaust: " + propellantDensity_rounded + " kg/m3");
- System.out.println("Nozzle size: " + length_rounded + " x " + diameter_rounded);
+ System.out.println("Nozzle size: " + length_rounded + " m x " + diameter_rounded + " m");
+
+ //throat diameter
+ double
+ throatDiameter_mm = throatDiameter * 1000,
+ throatDiameter_mm_rounded = ((int) (throatDiameter_mm * 100)) / 100.0;
+ System.out.println("Throat diameter: " + throatDiameter_mm_rounded + " mm");
}
//
diff --git a/src/main/java/vehicles/engines/propellants/Propellant.java b/src/main/java/vehicles/engines/propellants/Propellant.java
new file mode 100644
index 0000000..9216869
--- /dev/null
+++ b/src/main/java/vehicles/engines/propellants/Propellant.java
@@ -0,0 +1,18 @@
+package vehicles.engines.propellants;
+
+//
+public class Propellant {
+ private static final double GAS_CONSTANT = 8.31;
+
+ private final double molarMass;
+
+ //
+ public Propellant(double molarMass) {
+ this.molarMass = molarMass;
+ }
+
+ // ro = M * p / (R * T)
+ public double getDensity(double temperature, double pressure) {
+ return molarMass * pressure / (GAS_CONSTANT * temperature);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/propellants/WaterPropellant.java b/src/main/java/vehicles/engines/propellants/WaterPropellant.java
new file mode 100644
index 0000000..67d35be
--- /dev/null
+++ b/src/main/java/vehicles/engines/propellants/WaterPropellant.java
@@ -0,0 +1,11 @@
+package vehicles.engines.propellants;
+
+//
+public class WaterPropellant extends Propellant {
+ private static final double MOLAR_MASS = 18.0 / 1000; // approximate
+
+ //
+ public WaterPropellant() {
+ super(MOLAR_MASS);
+ }
+}
\ No newline at end of file
From ded08041ee3eb2d209a08b5423f6789af283a8b2 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sun, 23 Jul 2023 10:39:41 +0300
Subject: [PATCH 24/26] improvements
---
.../engines/propellants/CarbonDioxidePropellant.java | 11 +++++++++++
.../engines/propellants/PotassiumPropellant.java | 11 +++++++++++
.../java/vehicles/engines/propellants/Propellant.java | 1 -
.../engines/propellants/SodiumPropellant.java | 11 +++++++++++
.../vehicles/engines/propellants/WaterPropellant.java | 2 +-
5 files changed, 34 insertions(+), 2 deletions(-)
create mode 100644 src/main/java/vehicles/engines/propellants/CarbonDioxidePropellant.java
create mode 100644 src/main/java/vehicles/engines/propellants/PotassiumPropellant.java
create mode 100644 src/main/java/vehicles/engines/propellants/SodiumPropellant.java
diff --git a/src/main/java/vehicles/engines/propellants/CarbonDioxidePropellant.java b/src/main/java/vehicles/engines/propellants/CarbonDioxidePropellant.java
new file mode 100644
index 0000000..175bb5b
--- /dev/null
+++ b/src/main/java/vehicles/engines/propellants/CarbonDioxidePropellant.java
@@ -0,0 +1,11 @@
+package vehicles.engines.propellants;
+
+//for chemical engine
+public class CarbonDioxidePropellant extends Propellant {
+ private static final double MOLAR_MASS = 44.0 / 1000; // approximate
+
+ //
+ public CarbonDioxidePropellant() {
+ super(MOLAR_MASS);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/propellants/PotassiumPropellant.java b/src/main/java/vehicles/engines/propellants/PotassiumPropellant.java
new file mode 100644
index 0000000..aeb8bfd
--- /dev/null
+++ b/src/main/java/vehicles/engines/propellants/PotassiumPropellant.java
@@ -0,0 +1,11 @@
+package vehicles.engines.propellants;
+
+//for ion engine
+public class PotassiumPropellant extends Propellant {
+ private static final double MOLAR_MASS = 39.0 / 1000; // approximate
+
+ //
+ public PotassiumPropellant() {
+ super(MOLAR_MASS);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/propellants/Propellant.java b/src/main/java/vehicles/engines/propellants/Propellant.java
index 9216869..ae73f4e 100644
--- a/src/main/java/vehicles/engines/propellants/Propellant.java
+++ b/src/main/java/vehicles/engines/propellants/Propellant.java
@@ -3,7 +3,6 @@
//
public class Propellant {
private static final double GAS_CONSTANT = 8.31;
-
private final double molarMass;
//
diff --git a/src/main/java/vehicles/engines/propellants/SodiumPropellant.java b/src/main/java/vehicles/engines/propellants/SodiumPropellant.java
new file mode 100644
index 0000000..0896086
--- /dev/null
+++ b/src/main/java/vehicles/engines/propellants/SodiumPropellant.java
@@ -0,0 +1,11 @@
+package vehicles.engines.propellants;
+
+//for ion engine
+public class SodiumPropellant extends Propellant {
+ private static final double MOLAR_MASS = 23.0 / 1000; // approximate
+
+ //
+ public SodiumPropellant() {
+ super(MOLAR_MASS);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/propellants/WaterPropellant.java b/src/main/java/vehicles/engines/propellants/WaterPropellant.java
index 67d35be..a57d473 100644
--- a/src/main/java/vehicles/engines/propellants/WaterPropellant.java
+++ b/src/main/java/vehicles/engines/propellants/WaterPropellant.java
@@ -1,6 +1,6 @@
package vehicles.engines.propellants;
-//
+//for chemical engine
public class WaterPropellant extends Propellant {
private static final double MOLAR_MASS = 18.0 / 1000; // approximate
From 471a9778021a0f331acb132094acb3c42af8f0c8 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sun, 23 Jul 2023 11:34:28 +0300
Subject: [PATCH 25/26] improvements
---
src/main/java/vehicles/engines/Engine.java | 12 +++++--
src/main/java/vehicles/engines/Exhaust.java | 33 +++++++++++++++++++
src/main/java/vehicles/engines/IonEngine.java | 33 ++++++++++---------
.../engines/chemical/ChemicalEngine.java | 8 -----
.../vehicles/engines/chemical/Nozzle.java | 20 +++--------
5 files changed, 63 insertions(+), 43 deletions(-)
create mode 100644 src/main/java/vehicles/engines/Exhaust.java
diff --git a/src/main/java/vehicles/engines/Engine.java b/src/main/java/vehicles/engines/Engine.java
index f1cbbd1..f4218e7 100644
--- a/src/main/java/vehicles/engines/Engine.java
+++ b/src/main/java/vehicles/engines/Engine.java
@@ -11,13 +11,19 @@ public abstract class Engine extends VehiclePart {
@SuppressWarnings({"SameParameterValue", "UnnecessaryDefault"})
public static Engine newEngine(EngineType type, double thrust) {
System.out.println("Creating new " + type + " engine.");
- System.out.println("Thrust: " + (thrust / 1000) + " kN");
+ System.out.println("Thrust: " + (((int) (thrust / 1000 / 10)) * 10.0) + " kN");
+
try {
- return switch (type) {
+ Engine engine = switch (type) {
case CHEMICAL -> ChemicalEngine.newChemicalEngine(thrust);
- case ION -> new IonEngine();
+ case ION -> IonEngine.newIonEngine(thrust);
default -> throw new UnsupportedEngineTypeException();
};
+ double
+ lengthRounded = ((int) (engine.getLength() * 1000)) / 1000.0,
+ diameterRounded = ((int) (engine.getDiameter() * 1000)) / 1000.0;
+ System.out.println("Total engine size: " + lengthRounded + " m x " + diameterRounded + " m");
+ return engine;
} catch (UnsupportedEngineTypeException e) {
throw new RuntimeException(e);
}
diff --git a/src/main/java/vehicles/engines/Exhaust.java b/src/main/java/vehicles/engines/Exhaust.java
new file mode 100644
index 0000000..6ec6177
--- /dev/null
+++ b/src/main/java/vehicles/engines/Exhaust.java
@@ -0,0 +1,33 @@
+package vehicles.engines;
+
+import mathUtilities.Circles;
+
+//
+public class Exhaust {
+ private final double
+ crossSection,
+ diameter,
+ massFlowRate;
+
+ //
+ public Exhaust(double thrust, double velocity, double propellantDensity) {
+ crossSection = thrust / (propellantDensity * Math.pow(velocity, 2));
+ diameter = Circles.getRadiusFromArea(crossSection) * 2;
+ massFlowRate = velocity * propellantDensity * crossSection;
+ }
+
+ //
+ public double getCrossSection() {
+ return crossSection;
+ }
+
+ //
+ public double getDiameter() {
+ return diameter;
+ }
+
+ //
+ public double getMassFlowRate() {
+ return massFlowRate;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vehicles/engines/IonEngine.java b/src/main/java/vehicles/engines/IonEngine.java
index fd6a91f..7839b0a 100644
--- a/src/main/java/vehicles/engines/IonEngine.java
+++ b/src/main/java/vehicles/engines/IonEngine.java
@@ -1,28 +1,29 @@
package vehicles.engines;
+import vehicles.engines.propellants.Propellant;
+import vehicles.engines.propellants.SodiumPropellant;
+
//
public class IonEngine extends Engine {
private static final double
- EXHAUST_VELOCITY = 20000, // arbitrary
- HARDCODED_DIAMETER = 3, // arbitrary
- HARDCODED_LENGTH = 1, // arbitrary
- HARDCODED_MASS = 1000; // arbitrary
+ EXHAUST_VELOCITY = 20000, // arbitrary
+ EXHAUST_TEMPERATURE = 10000, // arbitrary
+ EXHAUST_PRESSURE = 100000, // arbitrary
+ HARDCODED_LENGTH = 2, // arbitrary
+ HARDCODED_MASS = 10000; // arbitrary
+ private static final Propellant PROPELLANT = new SodiumPropellant();
//
- protected IonEngine() {
- super(calculateMass(), calculateLength(), calculateDiameter());
- }
-
- private static double calculateDiameter() {
- return HARDCODED_DIAMETER;
+ protected static IonEngine newIonEngine(double thrust) {
+ Exhaust exhaust = new Exhaust(
+ thrust, EXHAUST_VELOCITY,
+ PROPELLANT.getDensity(EXHAUST_TEMPERATURE, EXHAUST_PRESSURE));
+ return new IonEngine(HARDCODED_MASS, HARDCODED_LENGTH, exhaust.getDiameter());
}
- private static double calculateLength() {
- return HARDCODED_LENGTH;
- }
-
- private static double calculateMass() {
- return HARDCODED_MASS;
+ //
+ private IonEngine(double mass, double length, double diameter) {
+ super(mass, length, diameter);
}
//
diff --git a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
index a3b3336..e0e5a09 100644
--- a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
+++ b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
@@ -28,19 +28,11 @@ public static ChemicalEngine newChemicalEngine(double thrust) {
double
finalDiameter = Math.max(combustionChamber.getDiameter(), nozzle.getDiameter()),
finalLength = combustionChamber.getDiameter() + nozzle.getLength();
- printParametersToConsole(finalLength, finalDiameter);
return new ChemicalEngine(
HARDCODED_MASS, finalLength, finalDiameter,
combustionChamber, nozzle);
}
- private static void printParametersToConsole(double length, double diameter) {
- double
- lengthRounded = ((int) (length * 1000)) / 1000.0,
- diameterRounded = ((int) (diameter * 1000)) / 1000.0;
- System.out.println("Total engine size: " + lengthRounded + " m x " + diameterRounded + " m");
- }
-
private ChemicalEngine(double mass, double length, double diameter,
CombustionChamber combustionChamber, Nozzle nozzle) {
super(mass, length, diameter);
diff --git a/src/main/java/vehicles/engines/chemical/Nozzle.java b/src/main/java/vehicles/engines/chemical/Nozzle.java
index 3428f1d..5df8ec2 100644
--- a/src/main/java/vehicles/engines/chemical/Nozzle.java
+++ b/src/main/java/vehicles/engines/chemical/Nozzle.java
@@ -1,6 +1,6 @@
package vehicles.engines.chemical;
-import mathUtilities.Circles;
+import vehicles.engines.Exhaust;
import vehicles.engines.propellants.Propellant;
//
@@ -8,7 +8,6 @@ public class Nozzle {
private static final double
DIAMETER_THROAT_RATIO = 30.0, // arbitrary
LENGTH_DIAMETER_RATIO = 1 / Math.tan(Math.toRadians(15)); // approximate
-
private final double
diameter,
length;
@@ -17,11 +16,9 @@ public class Nozzle {
protected Nozzle(Propellant propellant,
double thrust, double exhaustVelocity,
double exhaustTemperature, double exhaustPressure) {
- double
- propellantDensityAtExhaust = propellant.getDensity(exhaustTemperature, exhaustPressure),
- exhaustCrossSection = calculateExhaustCrossSection(
- thrust, exhaustVelocity, propellantDensityAtExhaust);
- diameter = calculateExhaustDiameter(exhaustCrossSection);
+ double propellantDensityAtExhaust = propellant.getDensity(exhaustTemperature, exhaustPressure);
+ Exhaust exhaust = new Exhaust(thrust, exhaustVelocity, propellantDensityAtExhaust);
+ diameter = exhaust.getDiameter();
length = diameter * LENGTH_DIAMETER_RATIO;
printParametersToConsole(
@@ -30,15 +27,6 @@ protected Nozzle(Propellant propellant,
getThroatDiameter());
}
- // S = F / (ro * ve ^ 2)
- private double calculateExhaustCrossSection(double thrust, double exhaustVelocity, double propellantDensity) {
- return thrust / (propellantDensity * Math.pow(exhaustVelocity, 2));
- }
-
- private double calculateExhaustDiameter(double crossSection) {
- return Circles.getRadiusFromArea(crossSection) * 2;
- }
-
private static void printParametersToConsole(double propellantDensityAtExhaust,
double length, double diameter,
double throatDiameter) {
From f0966ccead49073fb258210846090baef3bc10a2 Mon Sep 17 00:00:00 2001
From: Oskars AA <66279792+Krumuvecis@users.noreply.github.com>
Date: Sun, 23 Jul 2023 12:34:43 +0300
Subject: [PATCH 26/26] improvements
---
src/main/java/vehicles/engines/IonEngine.java | 10 +++++-----
.../java/vehicles/engines/chemical/ChemicalEngine.java | 8 ++++----
src/main/java/vehicles/engines/chemical/Nozzle.java | 2 +-
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/main/java/vehicles/engines/IonEngine.java b/src/main/java/vehicles/engines/IonEngine.java
index 7839b0a..380583c 100644
--- a/src/main/java/vehicles/engines/IonEngine.java
+++ b/src/main/java/vehicles/engines/IonEngine.java
@@ -6,11 +6,11 @@
//
public class IonEngine extends Engine {
private static final double
- EXHAUST_VELOCITY = 20000, // arbitrary
- EXHAUST_TEMPERATURE = 10000, // arbitrary
- EXHAUST_PRESSURE = 100000, // arbitrary
- HARDCODED_LENGTH = 2, // arbitrary
- HARDCODED_MASS = 10000; // arbitrary
+ EXHAUST_VELOCITY = 20000, // arbitrary
+ EXHAUST_TEMPERATURE = 5000, // arbitrary
+ EXHAUST_PRESSURE = 0.1 * 10000, // arbitrary
+ HARDCODED_LENGTH = 2, // arbitrary
+ HARDCODED_MASS = 10000; // arbitrary
private static final Propellant PROPELLANT = new SodiumPropellant();
//
diff --git a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
index e0e5a09..15415a4 100644
--- a/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
+++ b/src/main/java/vehicles/engines/chemical/ChemicalEngine.java
@@ -7,10 +7,10 @@
//
public class ChemicalEngine extends Engine {
private static final double
- EXHAUST_VELOCITY = 5000, // average, approximate
- EXHAUST_TEMPERATURE = 5000, // arbitrary
- EXHAUST_PRESSURE = 200000, // arbitrary
- HARDCODED_MASS = 5000; // arbitrary
+ EXHAUST_VELOCITY = 5000, // average, approximate
+ EXHAUST_TEMPERATURE = 2000, // arbitrary
+ EXHAUST_PRESSURE = 0.7 * 10000, // arbitrary
+ HARDCODED_MASS = 5000; // arbitrary
private static final Propellant PROPELLANT = new WaterPropellant();
private final CombustionChamber combustionChamber;
diff --git a/src/main/java/vehicles/engines/chemical/Nozzle.java b/src/main/java/vehicles/engines/chemical/Nozzle.java
index 5df8ec2..dbf6860 100644
--- a/src/main/java/vehicles/engines/chemical/Nozzle.java
+++ b/src/main/java/vehicles/engines/chemical/Nozzle.java
@@ -6,7 +6,7 @@
//
public class Nozzle {
private static final double
- DIAMETER_THROAT_RATIO = 30.0, // arbitrary
+ DIAMETER_THROAT_RATIO = 50.0, // arbitrary
LENGTH_DIAMETER_RATIO = 1 / Math.tan(Math.toRadians(15)); // approximate
private final double
diameter,