package com.billkuker.rocketry.motorsim.grain;\r
\r
+import java.awt.Rectangle;\r
import java.awt.Shape;\r
import java.awt.geom.AffineTransform;\r
import java.awt.geom.Area;\r
import java.awt.geom.GeneralPath;\r
import java.awt.geom.PathIterator;\r
import java.awt.geom.Rectangle2D;\r
-\r
import javax.measure.quantity.Length;\r
import javax.measure.quantity.Volume;\r
import javax.measure.unit.SI;\r
\r
+import org.apache.log4j.Logger;\r
import org.jscience.physics.amount.Amount;\r
\r
import com.billkuker.rocketry.motorsim.Grain;\r
\r
public class RotatedShapeGrain implements Grain {\r
\r
+ private static Logger log = Logger.getLogger(RotatedShapeGrain.class);\r
+ \r
public enum Quality {\r
High()\r
{{\r
\r
burn.subtract(shape.getShape(regression.plus(Amount.valueOf(quality.surfaceAreaStep,\r
SI.MILLIMETER))));\r
- \r
- System.out.println(regression);\r
\r
double sqmm = yRotatedSurfaceArea(burn);\r
\r
}\r
\r
@Override\r
- //TODO find actual thickness\r
public Amount<Length> webThickness() {\r
- if ( web != null )\r
+ if (web != null)\r
return web;\r
- Rectangle2D b = shape.getShape(Amount.valueOf(0, SI.MILLIMETER)).getBounds2D();\r
- double webmm = b.getWidth()>b.getHeight()?b.getWidth():b.getHeight();\r
- return web = Amount.valueOf(webmm, SI.MILLIMETER);\r
+\r
+ java.awt.geom.Area a = getCrossSection(Amount.valueOf(0, SI.MILLIMETER));\r
+ Rectangle r = a.getBounds();\r
+ double max = r.getWidth() < r.getHeight() ? r.getHeight() : r\r
+ .getWidth(); // The max size\r
+ double min = 0;\r
+ double guess;\r
+ while (true) {\r
+ guess = min + (max - min) / 2; // Guess halfway through\r
+ log.debug("Min: " + min + " Guess: " + guess + " Max: " + max);\r
+ a = getCrossSection(Amount.valueOf(guess, SI.MILLIMETER));\r
+ if (a.isEmpty()) {\r
+ // guess is too big\r
+ max = guess;\r
+ } else {\r
+ // min is too big\r
+ min = guess;\r
+ }\r
+ if ((max - min) < .01)\r
+ break;\r
+ }\r
+ web = Amount.valueOf(guess, SI.MILLIMETER);\r
+\r
+ return web;\r
+\r
}\r
\r
\r
add = Math.PI * (xl*s1 - xs*s2);\r
}\r
\r
- System.out.println(add);\r
- \r
len += add;\r
\r
x = nx;\r