From: Bill Kuker Date: Sun, 24 Oct 2010 18:07:53 +0000 (+0000) Subject: moved approx function to RocketScience. X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=8c2bd09f72f16fc0cd8c9244db76750ec9f5ca2c;p=sw%2Fmotorsim moved approx function to RocketScience. Made progress panel show % and regression --- diff --git a/src/com/billkuker/rocketry/motorsim/RocketScience.java b/src/com/billkuker/rocketry/motorsim/RocketScience.java index c17f471..de6ceaf 100644 --- a/src/com/billkuker/rocketry/motorsim/RocketScience.java +++ b/src/com/billkuker/rocketry/motorsim/RocketScience.java @@ -1,5 +1,6 @@ package com.billkuker.rocketry.motorsim; +import java.text.DecimalFormat; import java.util.HashSet; import java.util.Set; @@ -11,6 +12,8 @@ import javax.measure.unit.SI; import javax.measure.unit.Unit; import javax.measure.unit.UnitFormat; +import org.jscience.physics.amount.Amount; + public class RocketScience { public static Unit PSI = new ProductUnit(NonSI.POUND_FORCE.divide(NonSI.INCH.pow(2))); public static Unit NEWTON_SECOND = new ProductUnit(SI.NEWTON.times(SI.SECOND)); @@ -67,4 +70,22 @@ public class RocketScience { } } + @SuppressWarnings("unchecked") + public static String approx(Amount a) { + Unit u = RocketScience.UnitPreference.preference.getPreferredUnit(a + .getUnit()); + double d = a.doubleValue(u); + + DecimalFormat df; + if (Math.abs(d) < 10.0) { + df = new DecimalFormat("#.##"); + } else if (Math.abs(d) < 10.0) { + df = new DecimalFormat("#.#"); + } else { + df = new DecimalFormat("#"); + } + + return df.format(d) + " " + u.toString(); + } + } diff --git a/src/com/billkuker/rocketry/motorsim/visual/BurnPanel.java b/src/com/billkuker/rocketry/motorsim/visual/BurnPanel.java index 8158dd9..a42aaa1 100644 --- a/src/com/billkuker/rocketry/motorsim/visual/BurnPanel.java +++ b/src/com/billkuker/rocketry/motorsim/visual/BurnPanel.java @@ -10,7 +10,6 @@ import javax.measure.quantity.Force; import javax.measure.quantity.Pressure; import javax.measure.quantity.Velocity; import javax.measure.unit.SI; -import javax.measure.unit.Unit; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; @@ -140,11 +139,11 @@ public class BurnPanel extends JPanel { text.add(new JLabel("Max Pressure")); text.add(new JLabel(percent + "% " + new String(new char[]{cl}) + "-" +Math.round(averageThrust.doubleValue(SI.NEWTON)))); - text.add(new JLabel(approx(ns))); - text.add(new JLabel(approx(isp))); - text.add(new JLabel(approx(maxThrust))); - text.add(new JLabel(approx(averageThrust))); - text.add(new JLabel(approx(maxPressure))); + text.add(new JLabel(RocketScience.approx(ns))); + text.add(new JLabel(RocketScience.approx(isp))); + text.add(new JLabel(RocketScience.approx(maxThrust))); + text.add(new JLabel(RocketScience.approx(averageThrust))); + text.add(new JLabel(RocketScience.approx(maxPressure))); add(text, BorderLayout.NORTH); @@ -156,14 +155,6 @@ public class BurnPanel extends JPanel { } - @SuppressWarnings("unchecked") - private String approx(Amount a){ - Unit u = RocketScience.UnitPreference.preference.getPreferredUnit(a.getUnit()); - double d = a.doubleValue(u); - long i = Math.round(d); - return i + " " + u.toString(); - } - private class SL extends JSlider implements ChangeListener{ private static final long serialVersionUID = 1L; private static final int STEPS = 80; diff --git a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index 42769bc..3ce6b11 100644 --- a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -13,6 +13,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Vector; +import javax.measure.quantity.Length; import javax.measure.unit.SI; import javax.swing.BoxLayout; import javax.swing.ComboBoxModel; @@ -44,6 +45,7 @@ import com.billkuker.rocketry.motorsim.Fuel; import com.billkuker.rocketry.motorsim.Grain; import com.billkuker.rocketry.motorsim.Motor; import com.billkuker.rocketry.motorsim.Nozzle; +import com.billkuker.rocketry.motorsim.RocketScience; import com.billkuker.rocketry.motorsim.fuel.KNSU; import com.billkuker.rocketry.motorsim.grain.CSlot; import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; @@ -136,12 +138,19 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { final Thread me = this; final JProgressBar bar = new JProgressBar(0, 100); add(bar, BorderLayout.NORTH); + final JLabel progress = new JLabel(); + add(progress, BorderLayout.CENTER); try { final Burn b = new Burn(motor, new Burn.BurnProgressListener() { @Override public void setProgress(float f) { - bar.setValue((int) (f * 100)); + int pct = (int)(f*100); + bar.setValue(pct); + Amount web = motor.getGrain().webThickness(); + Amount remaining = web.times(1.0 - f); + + progress.setText("Progress: " + pct + "% (" + RocketScience.approx(remaining) + " web thickness remaining)"); if ( currentThread != me ){ throw new BurnCanceled(); }