From: Bill Kuker Date: Sun, 31 Oct 2010 15:25:06 +0000 (+0000) Subject: fixed X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=883773b381b998b2f05c089ccb916216d6689aa6;p=sw%2Fmotorsim fixed --- diff --git a/src/com/billkuker/rocketry/motorsim/GraphSimplifier.java b/src/com/billkuker/rocketry/motorsim/GraphSimplifier.java index 6f3a823..decac48 100644 --- a/src/com/billkuker/rocketry/motorsim/GraphSimplifier.java +++ b/src/com/billkuker/rocketry/motorsim/GraphSimplifier.java @@ -20,12 +20,15 @@ import javax.swing.JSplitPane; import org.jscience.physics.amount.Amount; -import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; +import com.billkuker.rocketry.motorsim.grain.EndBurner; import com.billkuker.rocketry.motorsim.visual.Chart; public class GraphSimplifier { Method f; - + + private static final int CHOOSE = 10; + private static final int EVEN = 10; + private class Entry { Amount x; Amount y; @@ -37,7 +40,7 @@ public class GraphSimplifier { @Override public int compareTo(DDEntry o) { - return dd.compareTo(o.dd); + return o.dd.compareTo(dd); } } @@ -58,7 +61,7 @@ public class GraphSimplifier { f = source.getClass().getMethod(method, Amount.class); Vector oldEntries = new Vector(); - + Entry max = null; while (domain.hasNext()) { Amount x = domain.next(); Amount y = (Amount) f.invoke(source, x); @@ -66,6 +69,8 @@ public class GraphSimplifier { e.x = x; e.y = y; oldEntries.add(e); + if ( max == null || e.y.isGreaterThan(max.y) ) + max = e; } List byDD = new Vector(); @@ -75,11 +80,21 @@ public class GraphSimplifier { Entry low = oldEntries.elementAt(i - 1); Entry middle = oldEntries.elementAt(i); Entry high = oldEntries.elementAt(i + 1); + + //if this is one of the N even stepped + //samples include it. + if ( i % (oldEntries.size()/EVEN) == 0 ){ + out.put(middle.x, middle.y); + } - Amount d1, d2, dd; + Amount d1, d2, dd; d1 = middle.y.minus(low.y).divide(middle.x.minus(low.x)); d2 = high.y.minus(middle.y).divide(high.x.minus(middle.x)); + + //dd = (d1.isGreaterThan(d2))?d1:d2; + + dd = d2.minus(d1).divide(high.x.minus(low.x)); DDEntry dde = new DDEntry(); @@ -93,23 +108,37 @@ public class GraphSimplifier { Collections.sort(byDD); + //always include the first, MAX and last out.put(oldEntries.elementAt(0).x, oldEntries.elementAt(0).y); + out.put(max.x, max.y); + int last = oldEntries.size() - 1; + out.put(oldEntries.elementAt(last).x, oldEntries.elementAt(last).y); + int count = 0; for (DDEntry dde : byDD) { + if ( out.containsKey(dde.x) ) + continue; out.put(dde.x, byX.get(dde.x)); - if (++count >= 20) + if (++count >= CHOOSE) break; } - int last = oldEntries.size() - 1; - out.put(oldEntries.elementAt(last).x, oldEntries.elementAt(last).y); + + } public static void main(String args[]) throws Exception { + /* CoredCylindricalGrain g = new CoredCylindricalGrain(); g.setLength(Amount.valueOf(70, SI.MILLIMETER)); g.setOD(Amount.valueOf(30, SI.MILLIMETER)); g.setID(Amount.valueOf(10, SI.MILLIMETER)); + */ + EndBurner g = new EndBurner(); + g.setLength(Amount.valueOf(70, SI.MILLIMETER)); + g.setoD(Amount.valueOf(30, SI.MILLIMETER)); + g.setPuntDepth(Amount.valueOf(10, SI.MILLIMETER)); + g.setPuntDiameter(Amount.valueOf(10, SI.MILLIMETER)); JFrame f = new JFrame(); f.setSize(1024, 768); @@ -132,6 +161,8 @@ public class GraphSimplifier { d.setDomain(gs.getDomain()); jsp.setBottomComponent(d); + + f.setVisible(true); jsp.setDividerLocation(.5); jsp.revalidate();