From 98116b417dbfefa254511577cfe4fd030a9aa5ed Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Wed, 15 Apr 2009 18:31:09 +0000 Subject: [PATCH] Since area calc can do shapes with holes just expose the final area and use it --- .../rocketry/motorsim/grain/BurningShape.java | 4 +-- .../motorsim/grain/ExtrudedShapeGrain.java | 35 +++---------------- 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/src/com/billkuker/rocketry/motorsim/grain/BurningShape.java b/src/com/billkuker/rocketry/motorsim/grain/BurningShape.java index 31d9b0f..16a1764 100644 --- a/src/com/billkuker/rocketry/motorsim/grain/BurningShape.java +++ b/src/com/billkuker/rocketry/motorsim/grain/BurningShape.java @@ -35,7 +35,7 @@ public class BurningShape { } - public java.awt.geom.Area getPlus(Amount regression) { + private java.awt.geom.Area getPlus(Amount regression) { java.awt.geom.Area a = new java.awt.geom.Area(); for (Shape s : plus) a.add(new java.awt.geom.Area(regress(s, regression @@ -43,7 +43,7 @@ public class BurningShape { return a; } - public java.awt.geom.Area getMinus(Amount regression) { + private java.awt.geom.Area getMinus(Amount regression) { java.awt.geom.Area a = new java.awt.geom.Area(); for (Shape s : minus) a.add(new java.awt.geom.Area(regress(s, regression diff --git a/src/com/billkuker/rocketry/motorsim/grain/ExtrudedShapeGrain.java b/src/com/billkuker/rocketry/motorsim/grain/ExtrudedShapeGrain.java index 97e1f8e..ef00d4a 100644 --- a/src/com/billkuker/rocketry/motorsim/grain/ExtrudedShapeGrain.java +++ b/src/com/billkuker/rocketry/motorsim/grain/ExtrudedShapeGrain.java @@ -41,9 +41,9 @@ public class ExtrudedShapeGrain extends MotorPart implements Grain { Shape outside = new Ellipse2D.Double(0, 0, 30, 30); xsection.add(outside); xsection.inhibit(outside); - xsection.subtract(new Rectangle2D.Double(13, 13, 4, 30)); - //minus.add(new Ellipse2D.Double(12, 12, 6, 6)); - length = Amount.valueOf(70, SI.MILLIMETER); + //xsection.subtract(new Rectangle2D.Double(13, 13, 4, 30)); + xsection.subtract(new Ellipse2D.Double(10,10, 10, 10)); + length = Amount.valueOf(100, SI.MILLIMETER); /**/ /* @@ -79,7 +79,7 @@ public class ExtrudedShapeGrain extends MotorPart implements Grain { burn.subtract(getCrossSection(regression.plus(Amount.valueOf(.001, SI.MILLIMETER)))); - Amount xSection = crossSectionArea(regression); + Amount xSection = ShapeUtil.area(xsection.getShape(regression)); return ShapeUtil.perimeter(burn).divide(2).times(rLen).plus( xSection.times(2)).to(Area.UNIT); @@ -96,38 +96,13 @@ public class ExtrudedShapeGrain extends MotorPart implements Grain { if (rLen.isLessThan(Amount.valueOf(0, SI.MILLIMETER))) return zero; - Amount xSection = crossSectionArea(regression); + Amount xSection = ShapeUtil.area(xsection.getShape(regression)); return xSection.times(rLen).to(Volume.UNIT); } - - - private Amount crossSectionArea(Amount regression) { - //Get the PLUS shape and sum its area - java.awt.geom.Area plus = xsection.getPlus(regression); - Amount plusArea = Amount.valueOf(0, SI.SQUARE_METRE); - for (java.awt.geom.Area a : ShapeUtil.separate(plus)) { - plusArea = plusArea.plus(ShapeUtil.area(a)); - } - - //Get the MINUS shape, intersect it with PLUS to get just the parts - //that are removed, sum it's area - java.awt.geom.Area minus = xsection.getMinus(regression); - minus.intersect(plus); - Amount minusArea = Amount.valueOf(0, SI.SQUARE_METRE); - for (java.awt.geom.Area a : ShapeUtil.separate(minus)) { - minusArea = minusArea.plus(ShapeUtil.area(a)); - } - - //Subtract PLUS from MINUS and return - Amount area = plusArea.minus(minusArea); - - return area; - } - @Override public Amount webThickness() { return webThickness; -- 2.47.2