private Grain grain;\r
private int count;\r
\r
+ private double flush = 1;\r
+ private Amount<Length> delay = Amount.valueOf(0, SI.MILLIMETER);\r
+ \r
public MultiGrain( Grain g, int c ){\r
grain = g;\r
count = c;\r
}\r
+ \r
+ private Amount<Length> getAdjustedRegression(Amount<Length> regression, int grain){\r
+ return regression.minus(delay.times(grain)).times(Math.pow(flush,grain));\r
+ }\r
\r
public Amount<Area> surfaceArea(Amount<Length> regression) {\r
- return grain.surfaceArea(regression).times(count);\r
+ Amount<Area> ret = Amount.valueOf(0, SI.SQUARE_METRE);\r
+ for ( int i = 0; i < count; i++ ){\r
+ ret = ret.plus(grain.surfaceArea(getAdjustedRegression(regression, i)));\r
+ }\r
+ return ret;\r
}\r
\r
public Amount<Volume> volume(Amount<Length> regression) {\r
- return grain.volume(regression).times(count);\r
+ Amount<Volume> ret = Amount.valueOf(0, SI.CUBIC_METRE);\r
+ for ( int i = 0; i < count; i++ ){\r
+ ret = ret.plus(grain.volume(getAdjustedRegression(regression, i)));\r
+ }\r
+ return ret;\r
}\r
\r
public Amount<Length> webThickness() {\r
- return grain.webThickness();\r
+ return grain.webThickness().plus(delay.times(count));\r
}\r
\r
public java.awt.geom.Area getCrossSection(Amount<Length> regression) {\r
Rectangle2D unburntBounds = grain.getSideView(Amount.valueOf(0, SI.MILLIMETER)).getBounds2D();\r
\r
java.awt.geom.Area ret = new java.awt.geom.Area();\r
- java.awt.geom.Area g = grain.getSideView(regression);\r
\r
for ( int i = 0 ; i < count ; i++ ){\r
- ret.add(g);\r
- ret.transform(AffineTransform.getTranslateInstance(0, unburntBounds.getHeight() + 10));\r
+ java.awt.geom.Area g = grain.getSideView(getAdjustedRegression(regression, i));\r
+ ret.add(g); \r
+ ret.transform(AffineTransform.getTranslateInstance(0, -(unburntBounds.getHeight() + 10)));\r
}\r
return ret;\r
}\r